“どの契約に解約ペナルティがあるか?” は AI エージェントの仕事に見えますし、実際そうですが、契約書を読むことで解決するわけではありません。すべてのファイルを開いて答えようとするエージェントは、297 件の無関係な文書にコンテキストを費やし、残りの 3 件の条項に気付いたかどうかを信頼しなければなりません。GroupDocs.Search.Mcp をローカルの Docker で実行し、Claude Desktop、Cursor、または Copilot がフォルダーを一度インデックス化し、インデックスにどの契約が一致するかを問い合わせ、条項だけを読み取ります。

私の契約のうち、解約ペナルティが記載されているものはどれですか? 各契約の条項を引用してください。

手順と設定・トラブルシューティングの詳細はドキュメントにあります: フォルダー内の契約書に対して AI エージェントで質問する方法.

エージェントがすべてを読み込むと何が問題になるか?

危険度が高まる順に 3 つの問題があります。遅くてコストがかかります:すべての契約がコンテキストウィンドウを通過し、質問するたびに処理されます。容量が足りなくなります:数十件の長文書を超えると、古いものがウィンドウから外れたり要約されたりし、要約された箇所で条項が抜け落ちます。そして静かに失敗します:“解約ペナルティがある契約が 2 件見つかりました” は、エージェントが 300 件すべてをチェックしたか 40 件だけざっくり読んだかで同じように聞こえます。返信にはどちらかが分かる情報がありません。

インデックスは最初の問題を解消し、三番目の問題を顕在化させます。“どのファイルにこれらの単語が含まれるか” という質問には正確な答えがあり、検索ツールはチェックできる件数とともに返します。

正しいシーケンスはどのようになるか?

一度インデックス化し、検索し、マッチしたものを読む。以下はテストでサーバーが返した結果です(5 件の合成契約:ペナルティ条項があるものが 2 件、両方の単語は含むがペナルティを除外する NDA が 1 件)。

-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexed 'contracts' into index 'contracts': 5 document(s) added,
   5 in the index.

-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
     "hint": "Unquoted words separated by spaces do not match. Search the
              phrase as \"termination penalty\", or combine the words with
              AND / OR, e.g. termination AND penalty." }

-> search {"query":"termination AND penalty","indexName":"contracts"}
<- documentsFound 3: acme-master-services-agreement.pdf,
   globex-consulting-agreement.docx, initech-nda.docx

-> get_text_fragments {"query":"\"termination penalty\"",...}
<- === contracts/acme-master-services-agreement.pdf ===
     …a termination penalty of three monthly fees applies, payable
     within 30…
   === contracts/globex-consulting-agreement.docx ===
     …Early termination penalty: the Client pays 50 percent of the fees…

3 つの結果から何が学べるか?

最初のクエリはミスし、サーバーは理由を示しました。 GroupDocs.Search では、引用符なしでスペースで区切った単語はフレーズとして一致しません。単に 0 を返す代わりに、サーバーは hint を添付して修正方法を説明し、エージェントは次の呼び出しで自ら修正します。これは最も一般的な初回ミスで、レスポンス自体で処理されます。

AND は 3 件、フレーズは 2 件見つけました。 AND は文書単位で評価されます。Initech NDA には “There is no fee and no penalty associated with termination of this NDA” という文に両方の単語が含まれています。検索結果だけを読むモデルはそれをカウントしますが、該当箇所を読むと NDA はペナルティを明示的に除外する契約として別途報告されます。この区別が三番目の呼び出しの全価値です。

フォーマットは関係ありません。 マッチは PDF と DOCX から来ており、TXT の契約も同じインデックスに入っていました。エンジンは 82 種類のフォーマットをインデックス化できるため、10 年間にわたってさまざまなツールで増えたフォルダーでも 1 つのクエリで回答できます。

呼び出しの順序

user              agent                         Search MCP server
 |  "Which contracts mention a termination penalty?"           |
 |---------------->|                                           |
 |                 |-- add_to_index (once) ------------------>|
 |                 |-- search {"query":"termination AND       |
 |                 |           penalty"} -------------------->|
 |                 |<- 3 files --------------------------------|
 |                 |-- get_text_fragments {"query":           |
 |                 |   "\"termination penalty\""} ----------->|
 |                 |<- the two clauses, with context ----------|
 |<- "Acme: 3 monthly fees (12.3). Globex: 50% of remaining    |
 |    fees. Initech NDA: explicitly no penalty."               |

最初のインデックス化以降は、契約数に関わらず各新しい質問は 2 回の呼び出しで済みます。“force majeure” 条項がある契約はどれか? は "force majeure"、“リースが自動更新するか?” は renewal OR renews、そして本文は “renews automatically for 12 months unless notice is given” と述べています。通知期間に関する条項は terminat? AND notice で、? は 1 文字を表し terminate にマッチします。

人間がループに残る場所

これは契約レビューではなく、そう装うべきでもありません。インデックスはテキストを検索・引用し、エージェントは引用された内容を要約します。正直さを保つための 2 つの習慣があります。すべての主張に対して引用を要求し、誤った要約が誤読した文の横に見えるようにします。また、“条項なしで単語だけが出ている契約をリストアップしてください” のように近似ミスも要求します。これらは読者の判断が最も重要になるケースです。

正直な制限

  • 評価モードではインデックスは最大 100 文書まで保持し、検索は最大 10 件まで返し、すべてのレスポンスでその旨が示されます。実運用前に get_license_status を呼び出して、回答が上限に達していないか確認してください。
  • テキスト層がないスキャン済み契約はファイル属性のみでインデックス化され、OCR は利用できません。
  • フルテキスト検索は単語にマッチします。エージェントは契約書の語彙を使用するか、バリエーションを試す必要があります。
  • インデックス化されたフォルダーから単一ファイルを削除することはサポートされていません。フォルダー全体を削除し、必要なものだけを再度追加してください。

FAQ

AI エージェントは契約書をアップロードせずにすべて検索できますか?
はい。インデックスはローカルのコンテナ内で構築・検索され、エージェントが引用した条項だけがモデルに送られます。

何件までの契約を扱えますか?
ライセンス次第で、ディスクとメモリが許す限り扱えます。インデックスは一度構築され、増分で更新されます。評価モードではインデックスあたり 100 件が上限です。

なぜ 2 語の検索で何も返ってこなかったのですか?
引用符なしの単語はフレーズとして一致しません。"termination penalty" のように引用するか、AND で結合してください。サーバーの hint でも同じことが示されています。

さらに深く