“Które z naszych umów zawierają karę za wypowiedzenie?” brzmi jak zadanie dla agenta AI i tak jest, ale nie poprzez czytanie umów. Agent, który otwiera każdy plik, aby na nie odpowiedzieć, zużywa kontekst na 297 nieistotnych dokumentów i wciąż musi ufać, że zauważył klauzulę w pozostałych trzech. Z GroupDocs.Search.Mcp działającym lokalnie w Dockerze, Claude Desktop, Cursor lub Copilot indeksuje folder raz, pyta indeks, które umowy pasują, i czyta tylko klauzule:
Które z moich umów wspominają o karze za wypowiedzenie? Zacytuj klauzulę dla każdej z nich.
Krok po kroku z konfiguracją i rozwiązywaniem problemów znajduje się w dokumentacji: How to ask questions across a folder of contracts with an AI agent.
Co idzie nie tak, gdy agent czyta wszystko?
Trzy rzeczy, w rosnącym stopniu niebezpieczeństwa. Jest to wolne i kosztowne: każda umowa przechodzi przez okno kontekstu przy każdym zapytaniu. Brakuje miejsca: po kilku dziesiątkach długich dokumentów wczesne znikają z okna lub są streszczane, a w streszczeniu może brakować klauzuli. I cicho się nie udaje: „Znalazłem dwie umowy z karą za wypowiedzenie” brzmi tak samo, czy agent sprawdził wszystkie 300, czy przeglądał 40. Nic w odpowiedzi nie mówi, które to są.
Indeks usuwa pierwszy problem i ujawnia trzeci. Pytanie „które pliki zawierają te słowa” ma dokładną odpowiedź, a narzędzie wyszukiwania zwraca ją z liczbą, którą możesz sprawdzić.
Jak wygląda prawidłowa sekwencja?
Indeksuj raz, wyszukaj, potem przeczytaj dopasowania. Oto co serwer zwrócił w naszym teście, przeciwko pięciu syntetycznym umowom: dwóm z klauzulą kary i jednej NDA, która wspomina oba słowa, ale wyklucza karę.
-> 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…
Co uczą nas trzy wyniki?
Pierwsze zapytanie nie trafiło, a serwer wyjaśnił dlaczego. W GroupDocs.Search słowa oddzielone spacjami bez cudzysłowów nie pasują jako fraza. Zamiast zwrócić gołe zero, serwer dołącza hint wyjaśniający poprawkę, a agenci korygują się przy następnym wywołaniu. To najczęstszy błąd przy pierwszym użyciu i jest obsługiwany w samej odpowiedzi.
AND znalazło trzy, fraza dwa. AND jest oceniane per dokument. NDA Initech zawiera oba słowa w zdaniu „Nie ma opłaty ani kary związanej z wypowiedzeniem tej NDA”. Model, który czyta tylko wynik wyszukiwania, policzyłby je; czytając fragment, zgłasza NDA osobno jako umowę, która wyraźnie wyklucza karę. Ta rozróżnienie to cała wartość trzeciego wywołania.
Formaty nie miały znaczenia. Dopasowania pochodziły z PDF i DOCX, a umowa w formacie TXT znajdowała się w tym samym indeksie. Silnik indeksuje 82 formaty, więc folder, który rozwijał się przez dziesięć lat przy użyciu różnych narzędzi, odpowiada na jedno zapytanie.
Wywołania, w kolejności
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." |
Po pierwszym indeksowaniu każde nowe pytanie kosztuje dwa wywołania, niezależnie od liczby umów. „Which contracts have a force majeure clause?” to "force majeure". „Which leases renew automatically?” to renewal OR renews, a fragment mówi „renews automatically for 12 months unless notice is given”. Klauzula o okresach wypowiedzenia to terminat? AND notice, gdzie ? oznacza jeden znak i pasuje do terminate.
Gdzie człowiek pozostaje w pętli
To nie jest przegląd umów i nie powinno się tak udawać. Indeks znajduje i cytuje tekst; agent podsumowuje to, co zacytował. Dwa nawyki utrzymują go w szczerości. Proś o cytat przy każdym twierdzeniu, aby błędne podsumowanie było widoczne obok zdania, które źle odczytano. I pytaj także o prawie‑trafienia: „list contracts that mention the words without the clause”, ponieważ to właśnie tam najważniejsza jest ocena czytelnika.
Szczere ograniczenia
- W trybie ewaluacji indeks przechowuje maksymalnie 100 dokumentów, a wyszukiwanie zwraca maksymalnie 10, i każda odpowiedź to informuje. Wywołaj
get_license_statusprzed prawdziwym uruchomieniem, ponieważ ograniczona odpowiedź wygląda na kompletną. - Skanowane umowy bez warstwy tekstowej są indeksowane wyłącznie na podstawie właściwości pliku; nie ma OCR.
- Wyszukiwanie pełnotekstowe dopasowuje słowa: agent musi używać słownictwa umowy lub próbować wariantów.
- Usunięcie jednego pliku z indeksowanego folderu nie jest obsługiwane; usuń folder i dodaj z powrotem to, co chcesz.
FAQ
Czy agent AI może przeszukać wszystkie moje umowy bez ich przesyłania?
Tak. Indeks jest tworzony i przeszukiwany w kontenerze na Twoim komputerze; tylko klauzule, które agent cytuje, docierają do modelu.
Ile umów może obsłużyć?
Licencjonowany, tak wiele, jak pozwalają dysk i pamięć; indeks jest tworzony raz i aktualizowany przyrostowo. Tryb ewaluacji zatrzymuje się po 100 dokumentach na indeks.
Dlaczego moje wyszukiwanie dwóch słów nie zwróciło wyników?
Słowa bez cudzysłowów nie pasują jako fraza. Cytuj je, "termination penalty", lub połącz słowa przy pomocy AND; hint serwera mówi to samo.
Zanurz się głębiej
- Dokumentacja, kanoniczny przewodnik: How to ask questions across a folder of contracts with an AI agent
- Centrum dokumentacji: GroupDocs.Search MCP Server
- Zacznij tutaj: Do you need a vector database to ask questions about a folder of documents?
- Powiązane: Grounded answers from your files: quote the passage, not the model’s memory
- Powiązane: grep can’t read PDF: give your coding agent a document index
- Powiązane: Search your email archive with an AI agent: PST, MSG, EML and the attachments inside
- Powiązane: Project memory for AI agents: one index per project, kept current
- On‑premise i model bezpieczeństwa: 3 architectures for AI document processing, and the one that keeps files inside your network
- Pytania: GroupDocs Search forum
- Źródło: GroupDocs.Search.Mcp on GitHub