検索が適切なナレッジを見つける仕組み
Pathruleがパスで絞り込み、意味とキーワードで照合し、言語をまたいで機能し、実際の利用から学習し、Cloudワークスペースでチームに一貫した結果を返す仕組みを説明します。
このページの内容
1つのワークスペースには、数千ものメモリ、ルール、スキルが入ることがあります。検索の役割は、そのうち本当に必要な少数をアシスタントが作業を始める前にコンテキストへ入れ、残りは入れないことです。このページでは、この選択が何をしているのか、そして時間とともにどう改善されていくのかを説明します。優先順位の計算方法はPathruleの独自エンジンの一部であり、公開していません。
まずパススコープ
最初のフィルターは場所です。メモリ、ルール、スキルはすべてノードパスに置かれています。アシスタントが/apps/api/paymentsで作業しているとき、Pathruleはそのパスに固定されたものと、上位のパスから継承されるものを出発点にします。/apps/web/dashboardでUIを少し調整するときに、データベースマイグレーションに関するルールが入り込むことはありません。
これは基本概念で説明しているパススコープと同じもので、それを最初の絞り込みとして適用しています。コストの高い処理が走る頃には、候補はすでに少数になっています。
意味とキーワードを同時に
パスで対象を絞り込んだあと、Pathruleはあなたの意図を2つの方法で同時に候補と照合します。
- キーワード照合は完全一致を捉えます。ファイル名、関数名、メモリのタイトルにある語句そのものなどです。
- 意味に基づく照合はそれ以外を捉えます。メモリの書き方とは違う言い回しの質問、同義語、言い換え、エントリと単語をひとつも共有していない概念などです。
後者は、手順を増やしただけのテキスト検索ではありません。各エントリとあなたのリクエストを、共有する単語ではなく意味で比較するため、共通の文字列がまったくなくても一致することがあります。詳しくはPathruleが計算するものを参照してください。
どちらか一方だけでは不十分です。キーワード検索では、同じ内容を別の言葉で書いたメモリを見落とします。意味に基づく検索では、ファイル名の完全一致がぼやけることがあります。Pathruleは両者を組み合わせるので、完全一致は優先度を保ち、同じ考えを別の言葉で表したものも拾われます。
Cloudワークスペースでは、プロンプトフックがプロンプトの冒頭(およそ最初の1,000文字)をPathrule Cloudに送り、ナレッジを意味で優先順位付けできるようにします。この呼び出しが遅い場合や失敗した場合、そのプロンプトについてはフックがローカルインデックスにフォールバックします。アカウントを使わないローカルモードでは、照合はパススコープとキーワードが中心になります。
作業中のファイルの隣にあるファイル
パススコープも意味も、アシスタントが作業している場所を起点にします。そこを少しだけ広げるのが別のシグナルです。Pathruleは、チームが同じ作業の中でいつも一緒に変更するファイルを学習し、そうした隣接ファイルに紐づくナレッジも表に出します。
これにより、決定事項をそれが下されたファイルに一度記録しておけば、プロンプトがそのファイルに一切触れなくても、必要とするセッションに届きます。このシグナルはファイルの内容ではなくファイルパスから作られます。元になるのは、エージェントが記録した作業で触れたパスと、Cloudワークスペースでは最近のgit履歴のファイルパスを使った初回のみのシードです。そのため、チームがまだ作業をあまり記録していない段階から役立ちます。こうした関係が見られなくなると、シグナルは薄れていきます。Cloudワークスペースでは、アシスタントの目の前にあるファイルと特に頻繁に一緒に変更される隣接ファイルがある場合、エージェントが要求するコンテキストにそのファイル名を挙げた1行の注意書きも含まれます。詳しくは一緒に変更されるファイルを参照してください。
言語をまたいで機能する
意味に基づく照合は、特定の言語に縛られません。トルコ語のプロンプトで英語のメモリが見つかることもありますし、複数の言語が混ざったプロンプトでも適切なエントリを見つけられます。
これは単純なキーワード検索では対応できないケースです。プロンプトとメモリが考えは共有していても言葉を共有していない場合、照合は綴りではなく意味に基づいて行う必要があります。
最適な一致はすぐ使える形で届く
検索は2段階で配信します。プロンプトに明らかに合うエントリは完全な内容として届くので、アシスタントはわざわざ読みに行くことなく、チームのナレッジを直接使って作業できます。毎ターン送られるのはプロンプトごとの予算内で最も関連性の高い少数だけで、アシスタントがすでに持っている内容は再送されません。そのため、アシスタントはナレッジベース全体を抱え込むことなく必要なものを得られます。
条件を満たすそれ以外のものは、名前、ID、1行の説明として届きます。アシスタントがそれを認識し、必要だとわかったときに本文を取得するには十分な情報です。そのため、予算に収まらない関連エントリも捨てられずに一覧に残ります。スキルは名前で提示されます。手順は押し付けるものではなく、求められて使うものだからです。別々の2つのことを尋ねるプロンプトは部分ごとに照合されるので、両方にナレッジが届きます。この3点については全文で届くものと、名前だけで届くもので説明しています。
候補は根拠であり、答えではない
検索は、確信がないときに確信があるふりをしません。Pathruleは可能性の高いエントリを候補として示し、それに基づいて行動する前に本文全体を読むようアシスタントに伝えます。候補は確認する価値のある手がかりであって、そのまま繰り返すべき事実ではありません。
これは、誤ったコンテキストはコンテキストがないよりも悪い、というPathruleの基本方針に従ったものです。曖昧なケースでは、Pathruleは答えを断定せず候補を示します。
実際の使われ方から学習する
検索は、メモリが書かれた時点で固定されるわけではありません。Pathruleは、どのエントリがどの種類の作業で実際に役立ったかを時間をかけて観察し、それを今後の結果に反映させます。ある種類のタスクで繰り返し役立っているエントリは、後の似た作業でも表に出やすくなります。
この観察は、誰かが付ける評価ではなく具体的な記録に基づきます。配信のたびに、そのターンの経過とあわせて記録が残ります。配信したエントリのうちアシスタントが単に受け取っただけでなく実際に参照したのはどれか、作業にいくつのツール呼び出しが必要だったか、そのうちいくつがどのファイルで失敗したか、といった内容です。ナレッジを受け取ったうえでなお失敗したターンは、そのとき渡されたナレッジにとってマイナスに数えられます。
この記録は、問い合わせて得るものではなく、配信を担ったレイヤー自身が取ります。ターンを計測するためにアシスタントがツールを呼び出したり、何らかの形で協力したりする必要はないため、クライアントが違ってもループの一貫性が保たれます。
記録は作業の種類ごとに保持されるため、結果はエントリごとに1つのスコアにはなりません。同じメモリでも、マイグレーションでは優先度が高く、UIの微調整では低い、ということがあり得ます。手作業で管理する単一の重要度フィールドでは、この違いを表現できません。
学習は意図的に慎重に設計されています。
- 結果が不明瞭なものからは学ばない。 結果が曖昧なターンは学習に使いません。
- 明らかな外れは評価を下げるが、消し去りはしない。 明らかな外れが1回あると、その種類の作業におけるエントリの評価は下がりますが、それまでの履歴が消えるわけではありません。
- 影響は時間とともに薄れる。 現在のコードに合わなくなったエントリは、いつまでも結果に残り続けることなく、徐々に順位を落とします。
そして学習が変えるのは選択であって、量ではありません。エントリがこれまでに示した実績によって、同程度に関連性の高い別のエントリより前に出ることはあります。しかし、そもそも何かを送るかどうかを決める関連性の基準をエントリに越えさせることはありません。時間が経つにつれて、ワークスペースは同じ量のコンテキストで、ターンごとにより良い少数のエントリを届けるようになります。ここでの学習がもたらすのは精度であり、余地ではありません。
このループ全体はナレッジが積み重なる仕組みで、古くなったエントリがレビューのためにどう提示されるかは提案とセルフ監査で説明しています。
チーム全体で同じ結果
Cloudワークスペースでは、優先順位付けに各メンバーのクライアントにある個別のコピーではなく、Pathrule Cloud上のワークスペースの共有データを使います。2人のチームメイトが同じパスで同じことを尋ねれば、どのコーディングエージェントを使っていても一貫した結果が得られます。Claude CodeとCodexは、プロンプト送信フックを通じてプロンプトに基づいて優先順位付けされた選択結果を受け取ります。CursorとGitHub Copilotにはプロンプト送信フックがないため、代わりにセッションフックとツールフックがパス単位のナレッジを届けます。Windsurfを含むどのクライアントも、pathrule_get_contextでMCPサーバーにコンテキストを要求すれば、優先順位付けされた選択結果を受け取れます。
これは学習も共有されることを意味します。あるエントリが役立つと、それをきっかけにした本人だけでなく、チームの全員にとってそのエントリが表に出やすくなります。
検索が見ないもの
検索が扱うのは、チームが書いたメモリ、ルール、スキルに加えて、作業中のパス、リクエストの文言、過去の作業の経過の記録です。ソースファイルの内容を読み取ったり、インデックス化したり、アップロードしたりすることはありません。照合の対象はチームが書き残すことを選んだナレッジであって、リポジトリそのものではありません。
Cloudワークスペースがチェックアウトから取得するのはファイルパスです。エージェントが初めて詳細なコンテキストを要求したとき、Pathruleは一緒に変更されるファイルのシードを作るために最近のgit履歴のファイルパスを読み取り、使われている技術を把握するためにフォルダツリー上位にあるファイル名を読み取ります。これとは別に、あなたやエージェントがpathrule snapshotを実行すると、ファイルツリー、マニフェスト、短いドキュメントのサンプル、最近のgitメタデータがアップロードされます。何が読み取られ、何が保持されるかはPathruleが計算するものに一覧があります。
次に読むもの
- 基本概念では、検索が最初に使うフィルターであるパススコープを定義しています。
- フックの仕組みでは、選ばれたナレッジがアシスタントの最初のツール呼び出しより前にどう届くかを説明しています。
- ナレッジが積み重なる仕組みでは、配信、記録、スコアリングのループの中で検索がどこに位置するかを説明しています。