Generating Complex Code Analyzers from Natural Language Questions
本論文は、大規模言語モデルとCodeQLプログラム分析フレームワークを、大規模なコードベースに関する複雑な自然言語質問に効果的に回答し、開発者のタスクの精度と効率を大幅に向上させるための、新規のRAGベースの反復生成および自己テストアプローチを用いて統合するシステム「Merlin」を紹介する。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
数百万冊の書籍(コードベース)が、非常に特殊で技術的な言語で書かれた巨大な図書館があると想像してください。あなたは図書館司書(開発者)であり、「生まれる前に自分自身を紹介するキャラクターが登場するすべての書籍」を見つけるという、非常に特定のパターンを探す必要があります。
これを手作業で行うことは不可能です。「born」という単語を検索バーで探す(grep のような)だけでは、文の「意味」を見逃してしまうため無意味です。超賢い AI アシスタント(大規模言語モデル、LLM)に図書館全体を読みさせて答えを求めようとすることも、図書館が大きすぎて AI が一度に記憶しきれないため失敗するか、AI が単に誤った推測をしてしまうことがよくあります。
ここで登場するのがMerlinです。
Merlin は、超強力な翻訳者と探偵として機能する新しいシステムです。あなた(自然な英語を話す人)と、コードの技術的構造を完璧に理解する非常に厳格で強力なデータベースエンジンであるCodeQLの間に位置しています。
以下は、簡単な比喩を用いた Merlin の仕組みの説明です。
1. 翻訳者(自然言語から CodeQL へ)
あなたは Merlin に平易な英語で質問します。「後から変更可能なメソッドをコンストラクタが呼び出す場所をすべて示せ」と。
Merlin は単に答えを推測するのではなく、あなたの質問を CodeQL データベースへの正確なクエリに翻訳します。CodeQL を、あなたのコード全体を記した巨大で構造化されたスプレッドシートだと考えてください。Merlin は、そのスプレッドシートから必要な正確なデータを求めるための、SQL に似た特定の命令を作成します。
2. 「自己テスト」(リトマス試験紙)
ここが難しい点です。Merlin が文法的に正しいように見えるクエリを作成しても、論理的に間違っている可能性があります。「果物」を意図していたのに「りんご」を求めたり、条件が厳しすぎて何も見つからなかったりするのです。
これを解決するため、Merlin には自己テスト機能があります。巨大な図書館を検索する前に、AI に小さな架空の例(「モック」シナリオ)を作成させ、クエリが機能するか確認します。
- 比喩: 金属探知機をテストしていると想像してください。都市全体を歩き回る前に、数枚の埋められた硬貨がある小さな庭園を歩いてみます。金属探知機が硬貨に対してブザーを鳴らせば、それが機能していることがわかります。もし無音のままなら、探知機が故障していることがわかり、都市を探す時間を無駄にする前にそれを修正します。
- 結果: クエリがこの小さなテストに失敗した場合、Merlin はそれが故障していると判断し、再試行します。
3. 「支援クエリ」(探偵の懐中電灯)
時には、クエリが構文的に完璧であっても、AI が微妙な点を誤解しているために何も見つからないことがあります。
Merlin は支援クエリという技術を使用します。
- 比喩: 森の中で特定の種類の鳥を探しているが、双眼鏡が曇っていると想像してください。ただ必死に見つめるのではなく、手伝いの人に今すぐ木々の中で見えているものをすべて叫んでもらいます(「赤い鳥、青い鳥、リスが見えます…」)。
- どのように役立つか: この「目撃者」のリストを見ることで、AI は「ああ!私は赤い鳥を探していたが、森は青い鳥で満ちている。検索を変更する必要がある」と気づきます。これにより、AI は自身の論理をデバッグし、正しい答えを見つけるのを助けます。
4. 結果:なぜ重要なのか
研究者たちは、Merlin を他のツールや人間の開発者と比較してテストしました。
- 針の発見: Merlin は、既存の専門ツールが見つけたバグのほとんどをすべて発見しましたが、他のツールが見逃していたさらに多くのバグも発見しました。
- 人間の速度: 実際のプログラマーがバグを発見して修正する必要がある研究において:
- Merlin を使用したグループは、使用しなかったグループに比べて3.8 倍正確でした。
- 彼らはタスクを31% 高速に完了しました。
- 「なぜ」: Merlin がなければ、プログラマーは退屈な手作業による検索に陥ったり、誤った答えを与える AI に依存したりすることがよくありました。Merlin は、発見された場所の明確で監査可能なリストと、それを見つけるために使用された正確な論理を提供し、結果を信頼できるようにしました。
まとめ
Merlin は、「人間の英語」と「機械の論理」の両方を話す翻訳者、指示を送る前にそれをテストする品質管理検査員、そして検索が失敗した理由を突き止めるために懐中電灯を使う探偵のようなものです。これにより、開発者は巨大なコードベースに関する複雑な質問を投げかけ、自分自身が技術的なクエリ言語の専門家である必要なく、信頼性が高く正確な答えを得ることができます。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。