“Which of our contracts carry a termination penalty?” ressemble à une tâche pour un agent IA, et c’en est un, mais pas en lisant les contrats. Un agent qui ouvre chaque fichier pour répondre consomme son contexte sur 297 documents sans rapport et doit encore faire confiance au fait qu’il a remarqué la clause dans les trois autres. Avec GroupDocs.Search.Mcp exécuté localement dans Docker, Claude Desktop, Cursor ou Copilot indexe le dossier une fois, interroge l’index pour savoir quels contrats correspondent, et ne lit que les clauses :
Quels sont mes contrats qui mentionnent une pénalité de résiliation ? Citez la clause pour chacun d’eux.
La version pas à pas avec configuration et dépannage se trouve dans la documentation : Comment poser des questions à travers un dossier de contrats avec un agent IA.
Qu’est-ce qui ne va pas lorsque l’agent lit tout ?
Trois choses, par ordre croissant de danger. C’est lent et coûteux : chaque contrat passe par la fenêtre de contexte, à chaque fois que vous posez une question. La fenêtre se remplit : après quelques dizaines de documents longs, les premiers sortent de la fenêtre ou sont résumés, et un résumé est l’endroit où une clause peut disparaître. Et il échoue silencieusement : « J’ai trouvé deux contrats avec une pénalité de résiliation » sonne de la même façon que l’agent ait vérifié les 300 ou n’ait survolé que 40. Rien dans la réponse ne vous indique lesquels.
Un index élimine le premier problème et expose le troisième. La question « quels fichiers contiennent ces mots » a une réponse exacte, et un outil de recherche la renvoie avec un compte que vous pouvez vérifier.
À quoi ressemble la bonne séquence ?
Indexez une fois, recherchez, puis lisez les correspondances. Voici ce que le serveur a renvoyé dans notre test, contre cinq contrats synthétiques : deux avec une clause de pénalité, et un NDA qui mentionne les deux mots mais exclut la pénalité.
-> 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…
Que nous apprennent les trois résultats ?
La première requête a échoué, et le serveur a expliqué pourquoi. Dans GroupDocs.Search, les mots séparés par des espaces sans guillemets ne correspondent pas à une phrase. Plutôt que de renvoyer simplement zéro, le serveur ajoute un hint expliquant la correction, et les agents se corrigent lors de l’appel suivant. C’est l’erreur la plus courante au premier essai, et elle est gérée directement dans la réponse.
AND a trouvé trois, la phrase en a trouvé deux. AND est évalué par document. Le NDA d’Initech contient les deux mots dans la phrase « There is no fee and no penalty associated with termination of this NDA ». Un modèle qui ne lirait que le résultat de recherche le compterait ; en lisant le passage, il signale le NDA séparément comme un contrat qui exclut explicitement la pénalité. Cette distinction représente toute la valeur du troisième appel.
Les formats n’ont pas d’importance. Les correspondances provenaient d’un PDF et d’un DOCX, et un contrat TXT était présent dans le même index. Le moteur indexe 82 formats, donc un dossier qui a évolué pendant dix ans avec différents outils répond à une seule requête.
Les appels, dans l’ordre
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." |
Après le premier indexage, chaque nouvelle question coûte deux appels quel que soit le nombre de contrats. “Which contracts have a force majeure clause?” devient "force majeure". “Which leases renew automatically?” devient renewal OR renews, et le passage indique “renews automatically for 12 months unless notice is given”. Une clause sur les périodes de préavis est terminat? AND notice, où le ? représente un caractère unique et correspond à terminate.
Où l’humain reste dans la boucle
Ce n’est pas une révision de contrat, et il ne doit pas prétendre l’être. L’index trouve et cite le texte ; l’agent résume ce qu’il a cité. Deux habitudes le maintiennent honnête. Demandez la citation avec chaque affirmation, afin qu’un résumé erroné soit visible à côté de la phrase mal interprétée. Et demandez aussi les quasi‑correspondances, « listez les contrats qui mentionnent les mots sans la clause », car ce sont ceux où le jugement du lecteur compte le plus.
Limites honnêtes
- En mode évaluation, un index ne contient pas plus de 100 documents et une recherche renvoie au maximum 10 résultats, et chaque réponse le précise. Appelez
get_license_statusavant une exécution réelle, car une réponse tronquée peut sembler complète. - Les contrats numérisés sans couche texte sont indexés uniquement par leurs propriétés de fichier ; il n’y a pas d’OCR.
- La recherche en texte intégral correspond aux mots : un agent doit utiliser le vocabulaire du contrat, ou essayer des variantes.
- Supprimer un fichier d’un dossier indexé n’est pas supporté ; supprimez le dossier et ré‑ajoutez ce que vous souhaitez.
FAQ
Un agent IA peut‑il rechercher tous mes contrats sans les télécharger ?
Oui. L’index est construit et recherché dans un conteneur sur votre machine ; seules les clauses que l’agent cite atteignent le modèle.
Combien de contrats peut‑il gérer ?
Sous licence, autant que votre disque et votre mémoire le permettent ; l’index est construit une fois et mis à jour de façon incrémentale. Le mode évaluation s’arrête à 100 par index.
Pourquoi ma recherche de deux mots n’a‑t‑elle rien renvoyé ?
Les mots non cités ne correspondent pas à une phrase. Citez‑les, "termination penalty", ou combinez les mots avec AND ; le hint du serveur indique la même chose.
Approfondir
- Documentation, guide canonique : Comment poser des questions à travers un dossier de contrats avec un agent IA
- Hub de documentation : GroupDocs.Search MCP Server
- Commencez ici : Avez‑vous besoin d’une base de vecteurs pour poser des questions sur un dossier de documents ?
- Connexe : Réponses ancrées à partir de vos fichiers : citez le passage, pas la mémoire du modèle
- Connexe : grep ne peut pas lire le PDF : donnez à votre agent de codage un index de documents
- Connexe : Recherchez votre archive d’e‑mail avec un agent IA : PST, MSG, EML et les pièces jointes à l’intérieur
- Connexe : Mémoire de projet pour les agents IA : un index par projet, maintenu à jour
- Modèle sur site et sécurité : 3 architectures pour le traitement de documents IA, et celle qui garde les fichiers dans votre réseau
- Questions : GroupDocs Search forum
- Source : GroupDocs.Search.Mcp sur GitHub