解説ねえねえ、智也くん!これ、…
解説
ねえねえ智也くん!この『In Line with Context』っていう論文、タイトルがかっこよくない?「文脈に沿って」って、なんかエモい感じ!
エモいかどうかは別として、内容はすごく実用的だよ。これは「リポジトリレベルのコード生成」に関する研究なんだ。
りぽじとり……?あ、プロジェクト全体のファイルが入ってる箱みたいなやつだっけ?
そう。普通のAIは一つの関数を作るのは得意だけど、プロジェクト全体を見渡して、他のファイルにある関数やクラスとの整合性を取るのは苦手なんだ。既存のやり方だと、似たようなコードを検索してくるだけだから、細かい使い勝手がズレちゃうことが多いんだよね。
なるほど!カレーを作ってって頼んだのに、冷蔵庫にある材料を無視して、勝手に高級なスパイスが必要なレシピを持ってきちゃうみたいな感じかな?
……例えは微妙だけど、まあそんな感じかな。この論文の「InlineCoder」は、そのズレをなくすために、関数が「どう使われるか」と「何を使うか」をAIにしっかり教える手法を提案しているんだ。
どうやって教えるの?AIにプロジェクト全部を読ませるのは大変なんでしょ?
全部は無理だから、賢く絞り込むんだ。まず、作りたい関数の「ドラフト(下書き)」をサッと作る。次に、そのドラフトを「呼び出し元」のコードの中に直接埋め込むんだ。これを『上流インライニング』と呼んでいるよ。
えっ、下書きを本番のコードの中に突っ込んじゃうの?それって大丈夫なの?
あくまでAIに見せるヒントとしてだよ。そうすることで、AIは「あ、この関数はこういう引数で呼ばれて、戻り値はこう使われるんだな」っていう具体的な状況を理解できる。さらに、ドラフトの中で使っている他の関数、つまり「下流」の情報も集めてくるんだ。
上下から挟み撃ちにする作戦だね!でも、その「ドラフト」が間違ってたらどうするの?
鋭いね。そこでは「パープレキシティ」っていう指標を使って、AIが自分の書いたドラフトにどれくらい自信があるかを評価するんだ。自信がない部分は、より慎重に文脈を補強して最終的なコードを作る仕組みになっているよ。
へぇー!AIも自分の間違いを気にするんだね。で、結果はどうだったの?
圧倒的だよ。RepoExecっていうテスト用データセットでは、既存の最強の手法と比べて、コードの正確さを表すBLEUスコアが約49%も向上したんだ。他の指標でも20%から30%くらい良くなっている。
49%!?それはすごい!これがあれば、私が適当に書いたコードも、智也くんが書いたみたいに完璧になるってこと?
……まあ、設計図さえしっかりしていれば、細かい実装のミスは劇的に減るだろうね。将来的には、人間が細かいライブラリの仕様を覚えなくても、プロジェクトの意図を汲み取ってAIが勝手に整合性を取ってくれるようになるはずだ。
夢が広がるね!でも、何か弱点はないの?
課題としては、巨大すぎるプロジェクトだと呼び出し関係を解析するのに時間がかかることかな。あとは、ドラフトが最初から完全に的外れだと、インライニングの効果も薄れてしまう。今後はもっと複雑な依存関係をどう効率的に扱うかが研究の方向性になると思うよ。
そっかぁ。じゃあ、私も智也くんの脳内に私の「ドラフト」をインライニングして、テストの答えを教えてもらおうかな!
それはただのカンニングだし、僕の脳がバグるから絶対にやめてくれ。
要点
- リポジトリレベルのコード生成において、ファイル間の複雑な依存関係を理解するための新手法「InlineCoder」を提案。
- 従来のRAG(検索拡張生成)が表面的な類似性に頼っていたのに対し、関数の呼び出し関係(コールグラフ)を活用する。
- まず「ドラフト(下書き)」を作成し、それを呼び出し元(上流)のコードに埋め込む「コンテキスト・インライニング」が最大の特徴。
- 呼び出し先(下流)の依存関係も同時に取得し、双方向の文脈をAIに提供することで、プロジェクト全体の整合性を保ったコード生成が可能になる。
- 主要なベンチマークで従来手法を大幅に上回る精度(BLEUスコアで最大49.34%向上)を達成。