セマンティック検索でエージェントを強化する
コーディングエージェントがプロンプトを受け取ると、正確な回答を返すために、ファイルを読み込み、関連情報を検索してコードベースを理解する必要があります。
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 とセマンティック検索を活用しており、両者を組み合わせることで最良の結果が得られます。モデルが進化するのに合わせ、エージェントのハーネスに提供する各種ツールについて継続的にテストと評価を行っています。