膨大な、混沌とした図書館(コードリポジトリ)の中に、数百万冊の本があるところを想像してください。あなたは、特定のページを見つけるために、非常に賢いが少し困惑している司書(AIエージェント)を雇いました。
通常、司書が道に迷ったとき、私たちは2つの方法のいずれかで問題を解決しようとします。
- 司書を再学習させる: 司書がこの特定の図書館のレイアウトを暗記するように、数ヶ月かけて新しい事実を教え込みます。(これが現在のほとんどのAIシステムが行っていることです)。
- より良い道具を与える: 司書に豪華な地図や超高速の検索エンジンを与えます。(これは他の研究者たちが行っていることです)。
Libraは、これらとは異なる第3の、全く異なるアイデアを提案しています。**「司書を直すのではなく、図書館のインデックスカードを直せ」**というアイデアです。
コアとなるアイデア:「生きたカタログ」
著者たちは、Libraと呼ばれるシステムを作り上げました。彼らはAIを賢くしようとするのではなく、図書館の「目次」(彼らがカタログと呼ぶもの)を賢くしました。これらのカタログは、ナビゲーションガイドとして機能するシンプルなテキストファイルに過ぎません。
魔法は、すべてが固定された(つまり、その脳が変わることはない)3人のキャラクターによる、「かくれんぼ」のゲームを通じた自己改善ループによって起こります。
- 出題者 (Prompter): 図書館内のランダムなページを見て、その特定のページを見つけなければ答えられないような、トリッキーな問題を作ります。これは、テストを作成するクイズマスターのようなものです。
- 探索者 (Solver): 実際のAIエージェントであり、答えを探そうとします。このエージェントは、ナビゲーションのために現在の「目次」のみを使用できます。直接答えを見ることはできません。もし地図が悪ければ、探索者は迷子になります。
- 修復者 (Healer): これが最も重要なキャラクターです。探索者が失敗したとき、修復者はそのミスを見つめます。「なぜ探索者は迷ったのか? 地図が分かりにくかったのか? 何か手がかりを見逃したのか?」と問いかけます。そして、次に備えて、次回の探索のために「目次」をより明確なものへと書き換えます。
実践における仕組み
これは、ソフトウェアをアップデートするのではなく、道路標識をアップデートするGPSシステムのトレーニングのようなものです。
- ラウンド1: 探索者は、空または白紙の地図を使ってファイルを探そうとします。90%の確率で失敗します。
- 修正: 修復者はこれらの失敗を見て、地図にメモを追加します。「『数学関数』を探している場合は、『グラフィックス』フォルダではなく、『数学』フォルダを確認してください。」
- ラウンド2: 探索者は再び試みます。地図が少し良くなったため、失敗する頻度が減ります。
- 修正: 修復者は残りのミスを確認し、より具体的な詳細を追加します。「『数学』フォルダには2つのサブフォルダがあります。『代数』は方程式用であり、『幾何学』は図形用です。」
時間が経つにつれ、地図は驚くほど詳細かつ正確になります。それは探索者が賢くなったからではなく、探索者の考え方に合わせて環境(地図)が「治療」されたからです。
結果
研究者たちは、これを12種類の異なる大規模ソフトウェアプロジェクト(Pythonライブラリの sympy、django、matplotlib など)でテストしました。
- 継続的な改善: システムがラウンドを重ねるごとに、正しいコードを見つける精度は、対数曲線のように上昇し続けました。最初は緩やかに始まり、その後急速に改善し、向上し続けました。
- ゼロショット転送: これが最も素晴らしい部分です。一度「地図」が特定のAIエージェントを用いてトレーニングされると、全く異なるAIエージェント(異なる会社の異なるモデル)に差し替えることができます。すると、新しいエージェントは新しい地図を使うだけで、即座に高いパフォーマンスを発揮します。この地図は誰にとっても機能するのです。
- 最高峰を凌駕: 実験で使用された「探索者」は非常に単純なものでしたが(
ls や grep といった基本的なツールしか持っていません)、Libraによってトレーニングされた地図を与えられると、より複雑なツールやメモリを持つ他の最先端のシステムをも上回る性能を発揮しました。
結論
この論文は、**「環境を最適化することは、脳を最適化することと同じくらい強力である」**と主張しています。自らのミスから学ぶ、自己改善型のプレーンテキスト・インデックスを作成することで、Libraは単純なAIエージェントであっても、大規模なコードベースを極めて高い精度でナビゲートすることを可能にします。これは、図書館自体を、静的なデータの塊ではなく、スマートで進化し続けるパートナーへと変えるのです。
この論文が主張していないこと:
- これは、医療診断や臨床用途で機能すると主張しているものではありません。
- これは、システムがコードを自動的に修正できると主張しているものでもありません(コードを修正するためのコードを見つけるのを助けるだけです)。
- これは、コードが変更される際にシステムがリアルタイムで動作すると主張しているものでもありません(静的なコードのスナップショットに対してテストされました)。
技術要約:Libra: エージェントによる情報検索のための環境学習
問題提起
大規模なソフトウェアリポジトリ内におけるコードのローカライゼーション(特定)は、自律的なコーディングエージェントにとって不可欠な能力であり、ダウンストリームのタスク解決率と強く相関している。エージェントの性能を向上させる既存のアプローチは、一般的に以下の2つのカテゴリーに分類される:
- モデル中心型(Model-Centric): リポジトリ由来のデータを用いて基礎となる基盤モデルをファインチューニングする。この手法はシステムを特定のモデルに固定してしまい、最先端の商用LLMが持つ優れた推論能力を損なう可能性がある。
- 静的環境拡張(Static Environment Augmentation): 検索を補助するために、静的なインデックス(階層的なサマリー、逆インデックス、または知識グラフなど)を構築する。これらはモデルに依存しないが、インデックスは静的であり、エージェント固有の検索課題に対して動的に適応したり、継続的な改善のためにインタラクション・データを活用したりするメカニズムを欠いている。
現在、特定のリポジトリに対してエージェントの情報検索能力を能動的に進化させることができる、モデルに依存しないデータ駆動型のフレームワークが不足している。
手法:Libraフレームワーク
Libraは、静的なインデックスから、リポジトリ内にネイティブに存在する、能動的に進化するプレーンテキスト・インデックスへのパラダイムシフトを提案する。本システムは、3つの凍結されたエージェントと、可変的な環境アーティファクトである「Libra Catalogs」を用いた、敵対的なLLM最適化ループによって駆動される自己進化フレームワークを採用している。
1. 可変アーティファクト:Libra Catalogs
Libraは、リポジトリのルートおよびサブモジュールディレクトリ内に配置される、Markdownファイルの階層(「カタログ」と呼称)を構築する。これらのファイルは、リポジトリのルーティング情報をエンコードするナビゲーション可能なインデックスとして機能する。静的な埋め込みやグラフとは異なり、これらのカタログは人間が読みやすく、編集可能であり、システムによって更新される可変の状態変数である。
2. 3つの凍結されたエージェント
最適化ループは、重みとプロンプトが固定された3つの異なるエージェントを利用する:
- Prompter (データ合成器): 合成的な質問と回答のペアを生成する。リポジトリからランダムなコードチャンク c をサンプリングし、c によって回答可能であり、正解となるファイルパス p∗ を回答とする自然言語のクエリ q を捏造する。Promterは、セマンティック検索を強制するために、正確な識別子(identifier)の使用を避けるよう指示される。
- Solver (クエリ解決器): ダウンストリームのコーディングエージェントを表す。クエリ q と現在のカタログ状態 K が与えられたとき、Solverはカタログのみをガイドとして使用して、正しいファイルパス p^ を特定しようと試みる。極めて重要な点として、Solverはこのプロセス中に正解のチャンクやパスにアクセスすることはできない。
- Healer (LLM最適化器): 最適化器として機能する。Healerは、Solverの失敗集合 F(p^=p∗ の場合)を分析し、ルーティング信号を修復するためにMarkdownカタログ K を書き換える。Healerは、失敗の原因が情報の欠落、ノイズ、あるいは構造的な問題に起因するものかどうかを診断し、カタログに対して標的を絞った編集を行う。
3. 最適化ループ
システムは以下のラウンド(T)で動作する:
- テストフェーズ: Prompterがバッチ形式でクエリを生成する。Solverは現在のカタログを使用してそれらを解決しようと試みる。失敗は失敗集合 F に集約される。
- ヒーリング(修復)フェーズ: Healerが F を処理し、将来のルーティングエラーを最小限に抑えるためにカタログ K を更新する。
このループは、収束するまで(あるいは最適化されたカタログが永続的なインデックスとして機能するまで)継続される。
主な貢献
- 環境の学習(Environmental Training): 本論文は、LLMの重みをファインチューニングするのではなく、環境(インデックス)を学習することを提案しており、モデルに依存しないアーティファクトを作成することで、LLMの重みを再学習することなく検索性能を向上させる。
- 敵対的自己改善(Adversarial Self-Improvement): システムは、Prompterが困難なクエリを作成し、Solverが現行のインデックスの弱点を露呈させ、Healerがこれらの失敗に基づいてインデックス構造を反復的に洗練させるという、敵対的なループを利用している。
- プレーンテキスト・インデックス: ベクトル埋め込みや複雑なグラフではなく、Markdownカタログを使用することで、Libraは、コードベースにネイティブに統合され、解釈可能で、移植性と編集性に優れたインデックスを提供する。
実験結果
著者らは、SWE-BENCH LITEデータセットから抽出した12個のPythonリポジトリを用いてLibraを評価した。
- 対数的な改善: sympyリポジトリにおいて、合成クエリによる学習は、コードのローカライゼーション精度において継続的な対数的改善をもたらした。システムは、ステップ0でのファイル精度60.3%からスタートし、ステップ85で83.3%に達し、最先端のベースラインを上回った。
- 実世界タスクへの汎化: 合成データのみで学習されたカタログは、実世界のSWE-BENCH LITEバグローカリゼーションタスクへの転移に成功した。学習されたLibra Solverは、最小限のツールセット(
BashとReadのみ)を使用しているにもかかわらず、LocAgentやRepoMemと比較して、最高のパフォーマンス(5ターンで77.8% File ACC、10ターンで82.3%)を達成した。
- モデル非依存性: 最適化されたカタログは、再学習なしに異なるSolverモデル(GPT-5-mini, GPT-5, Gemini-2.5-Flash)の性能を向上させる永続的なリソースとして機能した。性能の向上は、より弱いモデル(例:Gemini-2.5-Flashは+31.0ポイント)において最も顕著であった。
- ヒーリング効果: 個々のテストインスタンスの分析によれば、54.3%のインスタンスが学習の初期段階から後期段階にかけて改善しており、改善したケースと低下したケースの比率は3.3:1であった。これは、システムがルーティングの失敗を体系的に修正できる能力を示している。
意義と主張
本論文は、**「テキストベースのインデックスをインタラクションのフィードバックを通じて最適化することが、従来の検索手法に代わる実行可能かつ適応可能な選択肢を提供することを、Libraは示している」**と主張している。
著者らが強調する主なポイントは以下の通りである:
- パラダイムシフト: 静的な外部埋め込みから、リポジトリ内にネイティブに存在する、能動的に進化するプレーンテキスト・インデックスへの移行。
- 転移可能性: 自己生成された合成クエリのみで学習されたシステムが、実世界のソフトウェアエンジニアリングタスクを解決するための学習されたルーティング能力を正常に転移できること。
- コストと移植性: このアプローチは、競争力のある性能を達成しながら、解釈可能性(人間が読めるカタログ)と移植性(モデルに依存しない)において明確な利点を提供する。
著者らは限界についても認めており、最適化ループの計算負荷の高さや、現在のリポジトリが静的であることを前提としている点などを挙げ、増分更新やマルチホップ・クエリ合成については今後の課題としている。しかし、本フレームワークが、静的な環境拡張とモデル固有のファインチューニングとの間の溝を埋めることに成功したと断言している。
毎週最高の computer science 論文をお届け。
スタンフォード、ケンブリッジ、フランス科学アカデミーの研究者に信頼されています。
受信トレイを確認して登録を完了してください。
問題が発生しました。もう一度お試しください。
スパムなし、いつでも解除可能。
週刊ダイジェスト — 最新の研究をわかりやすく。登録