コンテンツへスキップ

セマンティック検索でエージェントを改善する

作成者: Stefan Heule, Emily Jia & Naman Jain研究

コーディングエージェントがプロンプトを受け取ると、正しい答えを返すには、ファイルを読み込み、関連情報を検索してコードベースを把握する必要があります。

Cursor のエージェントが使うツールのひとつにセマンティック検索があります。これは、grep のようなツールによる正規表現ベースの検索に加え、「認証はどこで処理している?」といった自然言語のクエリに合致するコードの断片を取得します。

セマンティック検索を実現するため、当社は独自の埋め込みモデルを学習し、高速な検索・取得に向けたインデックス化パイプラインを構築しました。検索を grep などのコマンドラインツールのみに頼ることも可能ですが、特に大規模なコードベースでは、セマンティック検索によりエージェントのパフォーマンスが大幅に向上することがわかっています。

  • 質問応答の正確性が平均で12.5%向上(モデルにより6.5%〜23.5%)。
  • コードベースに残りやすい(採用されやすい)コード変更を生み出すこと。
  • ユーザーが正解に到達するまでの反復回数を減らす。
  • 最先端のコーディングモデルを含む、テストしたすべてのモデルで精度が向上。

オフライン評価

私たちは、正解が既知のコードベースから情報を検索・取得することに特化した評価用データセット「Cursor Context Bench」を運用しています。この評価は、私たち自身のComposerを含む、Cursor で最もよく使用されているモデルすべてを対象に実行しています。

この比較では、利用可能なツールを「セマンティック検索あり」と「なし」の2通りで性能を評価しています。いずれの構成でも、セマンティック検索は結果を大幅に改善します。

オンラインのA/Bテスト

エンドユーザー体験への影響も把握したいと考えました。両グループが同じモデルを使い、一方のグループのエージェントにはセマンティック検索へのアクセスを付与し、もう一方は grep などの従来型検索ツールのみに依存する、という A/B テストを行いました。評価指標は次の2点です。

  • コード定着率:優れたエージェントが書いたコードは、ユーザーのコードベースに残りやすくなります。セマンティック検索が利用可能な場合、エージェントのコード定着率は0.3%向上します。この効果は、1,000ファイル以上の大規模コードベースでは2.6%まで高まります。
  • 不満足なユーザーからのリクエスト:有能なエージェントが作成したコードには、追加入力や修正は不要です。セマンティック検索が使えない場合、不満の残るフォローアップのユーザーリクエストが2.2%増加することを確認しました。

ここでは効果量が小さくなっています。A/Bテストがすべてのエージェントのクエリを対象としており、すべてのリクエストで検索が必要になるわけではないためです。

カスタムリトリーバルモデル

こうした結果を可能にしている要素のひとつが、当社のカスタム埋め込みモデルです。私たちの手法では、エージェントのセッションを学習データとして用います。エージェントがタスクを進める際は、最適なコードにたどり着くまでに複数回検索を行い、ファイルを開きます。これらのトレースを分析することで、振り返って、会話のより早い段階で本来取得すべきだったものが何かを明らかにできます。

これらのトレースをLLMに渡し、各ステップで「最も有用だったはずのコンテンツ」をランク付けさせます。次に、埋め込みモデルの学習を行い、その類似度スコアがこのLLM生成のランキングに一致するように調整します。こうして、汎用的なコードの類似度に頼るのではなく、エージェントが実際にコーディングタスクを進める過程から学習できるフィードバックループが生まれます。

結論

特に大規模なコードベースでは、最良の結果を得るにはセマンティック検索が現時点で不可欠です。

当社のエージェントは grep とセマンティック検索を重用しており、この2つを組み合わせることで最良の成果を生み出します。モデルの改善に合わせて、エージェント実行基盤に組み込むあらゆるツールを継続的にテスト・評価しています。

カテゴリー: 研究

著者s: Stefan Heule, Emily Jia & Naman Jain