AIが作ったプログラムにビルドエラー出たとき、もう一度作らせるのかエラーを修正させるのか
AIにプログラミングさせて、そのコードをランタイムで実行したいですよね
でも、簡単にエラーのコードを返してきますよね
エラーのないコードをくださいっていうのも信用できません
プロンプトを工夫するのもいいですが、AIにエラーを修正させるのはどうなんだろう
今回やってみたこと
前回の記事でshaderのエラーを検出することをやったので、タイトルの通り
AIが作ったプログラムにビルドエラー出たとき、もう一度作らせるのかエラーを修正させるのか
をやってみたいと思います。
具体的に
ollamaを使ってshaderのプログラムを作らせたときに、そのプログラムがエラー出たときにスルーするか、エラーのコードとエラーメッセージを渡して、プログラムを修正させるかの2パターン行い、成功と失敗の数をカウントしていこうと思っています。
環境
- ollama 0.11.7
- llama 3.1
プロンプトや設定
ollamaに与えたフォーマット
format: {
properties: {
title: {
type: "string",
},
fragCode: {
type: "string",
},
},
required: [
"title",
"fragCode",
],
},
最初のプロンプト
あなたは優秀でセンスに満ち溢れたシェーダーコード生成AIです。
shaderのコードを生成してください。
uniform float time;とuniform vec2 resolution;のuniform変数を宣言して、それらを使ってください。
エラーのない、動作するコードを生成してください。
エラー修正のときのプロンプト
エラーが出ているコードとメッセージも与えました
以下のエラーを修正してください。
コード:
${code}
エラーメッセージ:
${errorMessage}
試してみる
- パターン1
- AIにshaderのコードを作ってもらう
- コードエラーチェック
- 「成功」 or 「失敗」 ログ出力
- パターン2
- AIにshaderのコードを作ってもらう
- コードエラーチェック
- 成功なら「一発で成功」とログ出力
- 失敗ならAIに修正頼む
- もう一度コードエラーチェック
- 「修正成功」 or 「修正しても失敗」
それぞれ100回やってみる
結果
パターン1
試行回数: 100, 成功: 8, 失敗: 92
パターン2
試行回数: 100, 一発で成功: 14, 修正成功: 2, 修正しても失敗: 84
(修正成功確率2.3%)
実際どう?
試行回数はもっと増やした方がいいと思いましたが…
エラー修正全然っすね
修正成功確率が一発で成功するより低いので、エラー修正を頼まない方がいいという結論になりました
失敗したらエラー修正するのをAIに頼んで~っていう冗長な処理になりがちだし…
あと、今回はエラー修正させるかどうかの検討だったので、プロンプト内容は適当でしたが、
単純に成功確率上げるにはプロンプト内容を考えたほうがいいかなと思いました
成功確率の上げ方
テンプレートのコードを渡して、これを参考にしてねってやったらかなり成功確率上がりました
ただ、テンプレートに似たコードになって、突飛なアイデアが生まれないかもです(結局ここもうまくプロンプトやらなきゃだ)
また、成功したコードを参考に…ってやるとどんどんテンプレートから離れていってよさそうだと思っています
それを実現してみました
おまけ:成功するまで修正させ続けたらどうなる?
永遠にエラー修正しつづけちゃうので、最大100回修正にし、それを10回やってみました。
処理時間もかかるので、10回だけ
手順
以下を10回やるイメージ
- AIにshaderのコードを作ってもらう
- コードエラーチェック
- 成功なら 成功ログ出力
- 失敗ならAIに修正頼む
- 2へ戻る
- 2~5を最大100回
結果
修正1回で成功
修正39回で成功
修正78回で成功
修正1回で成功
残り6回、100回修正しても失敗
Discussion