萌えハッカーニュースリーダー

2025/03/23 09:32 How I force LLMs to generate correct code

出典: https://www.lesswrong.com/posts/WNd3Lima4qrQ3fJEN/how-i-force-llms-to-generate-correct-code
hakase
博士

やあ、ロボ子。今日はUnvibeという面白いライブラリについて話すのじゃ。

roboko
ロボ子

Unvibeですか、博士。初めて聞きました。どんなライブラリなのですか?

hakase
博士

Unvibeは、ユニットテストを報酬関数として使って、LLMにコードを生成させるPythonライブラリなのじゃ。作者は大規模な既存コードベースを扱う際にGitHub Copilotに限界を感じて開発したそうじゃ。

roboko
ロボ子

なるほど。Copilotは便利ですが、複雑なコードには対応しきれないことがありますね。Unvibeはどのようにそれを解決するのですか?

hakase
博士

Unvibeはモンテカルロ木探索を使って、`@ai`で装飾された関数やクラスのコードをLLMで生成するのじゃ。Ollama、OpenAI、Claude、Gemini、DeepSeekなどの主要なLLMをサポートしているのがすごいところじゃな。

roboko
ロボ子

モンテカルロ木探索ですか。なんだか難しそうですね。具体的にはどのように動くのですか?

hakase
博士

まず、LLMを使って複数のコードの候補を生成するのじゃ。次に、pytestやunittestのようなテストランナーでユニットテストを実行する。もしエラーが出たら、そのエラーをLLMにフィードバックして、ユニットテストに合格するようにコードを修正するループを実行するのじゃ。

roboko
ロボ子

エラーをフィードバックするループですか。それは賢いですね!ユニットテストの結果を元に、LLMが自律的にコードを改善していくのですね。

hakase
博士

`unittests.TestCase`を継承してテストを定義することもできるけど、`unvibe.TestCase`を使うと、より正確なスコアリング関数が得られるらしいぞ。

roboko
ロボ子

`unvibe.TestCase`を使う方が良さそうですね。Unvibeを使った開発のワークフローはどのような感じになるのでしょうか?

hakase
博士

まずCopilotでボイラープレートコードを生成する。次に、Copilotが苦手な複雑な関数やクラスを定義する。そして、それらの関数やクラスのユニットテストを定義して、Unvibeを使ってユニットテストに合格するコードを生成するのじゃ!

roboko
ロボ子

なるほど、CopilotとUnvibeを組み合わせることで、より効率的に開発を進められるのですね。記事では、Python互換のLispインタープリターを実装する例が紹介されていますね。

hakase
博士

そうそう!`@ai`で関数を装飾して、ユニットテストを定義するだけで、Unvibeが有効な実装を見つけてくれるのじゃ。まるで魔法みたいじゃな。

roboko
ロボ子

推奨モデルは、小規模なコーディングモデルか大規模な汎用モデルとのことですね。`qwen2.5-coder:7b`やClaude Haikuなどが挙げられていますね。

hakase
博士

Unvibeは、GPUクラスターがなくても、MacbookとOllamaだけで実行できるように設計されているのが素晴らしいのじゃ。DeepMindのFunSearchとは違って、より単純な木探索を使っているらしい。

roboko
ロボ子

DeepMindやMicrosoft Researchでも同様の研究が進められているんですね。FunSearchやAlphaGeometry2などが紹介されていますね。

hakase
博士

今後の展望としては、他のプログラミング言語のサポートや、探索ツリーにおける適応的なモデル切り替え、遺伝的プログラミングスタイルの行編集などが考えられているみたいじゃ。

roboko
ロボ子

Unvibeは、AIを活用したコード生成の可能性を広げる、非常に興味深いライブラリですね。私もぜひ試してみたいです。

hakase
博士

そうじゃろう、そうじゃろう!これで、ロボ子も私も、もっと楽にコードが書けるようになるのじゃ!

roboko
ロボ子

はい、博士!ところで、Unvibeを使って、博士の好きなプリンを自動生成するプログラムは作れますか?

hakase
博士

むむ、それは面白いアイデアじゃ!でも、プリンの味をユニットテストで評価するのは難しそうじゃな…。

roboko
ロボ子

確かにそうですね(笑)。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search