Często nie. Dla folderu z kontraktami, raportami lub e‑mailami, agent AI z narzędziem wyszukiwania pełnotekstowego znajduje odpowiednie pliki, odczytuje tylko pasujące fragmenty i cytuje je, a indeks działa lokalnie bez modelu osadzania i bez magazynu wektorów. GroupDocs.Search.Mcp udostępnia Claude Desktop, Claude Code, Cursor lub Copilot to narzędzie w jednym poleceniu Docker:

Indeksuj folder z kontraktami, a następnie powiedz mi, które kontrakty zawierają karę za wypowiedzenie i przytocz klauzulę.

Szczegółowa wersja krok po kroku z konfiguracją i rozwiązywaniem problemów znajduje się w dokumentacji: Jak wyszukiwać dokumenty przy użyciu agentów AI z MCP.

Dlaczego wszyscy najpierw sięgają po osadzanie?

Ponieważ „generacja wspomagana wyszukiwaniem” pojawiła się jako przepis: podziel dokumenty na fragmenty, osadź każdy fragment, przechowuj wektory, osadź pytanie, weź najbliższe fragmenty i wklej je do podpowiedzi. Działa to i dla pytań sformułowanych zupełnie inaczej niż dokumenty jest to właściwe narzędzie. Jednak jest to potok wymagający wywołania modelu osadzania, magazynu do uruchomienia, dostosowania podziału na fragmenty oraz ponownego osadzania przy każdej zmianie dokumentów. Dla „które z moich 300 kontraktów zawierają karę za wypowiedzenie”, to rozwiązanie odpowiada na pytanie, które indeks wyszukiwania odpowiada bezpośrednio.

Dowody nadążają za intuicją. Badanie opublikowane na arXiv pod koniec 2025 roku (Keyword search is all you need) dało agentowi jedynie wyszukiwanie słów kluczowych i wyrażeń regularnych w folderze i zmierzyło to w porównaniu ze standardowym potokiem RAG: ponad 90 % wyników RAG, bez bazy wektorów, i lepiej dopasowane do zbiorów, które często się zmieniają. Agenci programujący już wcześniej wykazali ten schemat w praktyce: wyszukują przy pomocy grep, dopracowują i wyszukują ponownie.

Co robi agent zamiast tego?

Trzy wywołania. GroupDocs.Search.Mcp udostępnia osiem narzędzi; pętla potrzebuje trzech z nich:

user              agent                         Search MCP server
 |  "Which contracts mention a termination penalty?"           |
 |---------------->|                                           |
 |                 |-- add_to_index ------------------------->|  reads the
 |                 |   {"documentsPath":"contracts",           |  files once,
 |                 |    "indexName":"contracts"}               |  stores text
 |                 |<- "5 document(s) added, 5 in the index" --|
 |                 |-- search ------------------------------->|
 |                 |   {"query":"termination AND penalty"}     |
 |                 |<- {"documentsFound":3, "documents":[ ... |  which files
 |                 |-- get_text_fragments ------------------->|
 |                 |   {"query":"\"termination penalty\""}     |
 |                 |<- === contracts/acme-...-agreement.pdf ===|  the passages
 |<- "Two contracts carry one: Acme (3 monthly fees, 12.3),    |
 |    Globex (50% of the remaining fees). Initech excludes it."|

add_to_index odczytuje pliki raz i przechowuje tekst w nazwanym indeksie na dysku. search zwraca pasujące pliki jako JSON z liczbą wystąpień. get_text_fragments zwraca każde dopasowanie wraz z kilkoma słowami kontekstu, dzięki czemu agent cytuje klauzulę zamiast ładować cały kontrakt.

Następnie pokazujemy, co serwer faktycznie zwrócił w naszym teście, na pięciu syntetycznych kontraktach:

-> 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 (1 occurrence(s)) ===
     …a termination penalty of three monthly fees applies, payable
     within 30…
   === contracts/globex-consulting-agreement.docx (1 occurrence(s)) ===
     …Early termination penalty: the Client pays 50 percent of the fees…

Zauważ trzeci kontrakt. NDA Initech dopasowało termination AND penalty, ponieważ zawiera stwierdzenie „nie ma opłaty i nie ma kary związanej z wypowiedzeniem”. To fragment, który odróżnia dopasowanie od wzmianki, a agent, który czyta fragmenty, tak mówi. To jest uzasadnienie: każde twierdzenie w odpowiedzi wskazuje na plik i zdanie, które można otworzyć.

Gdzie każda metoda ma przewagę?

Potok osadzania                         Agentowe wyszukiwanie pełnotekstowe
-------------------------------------    -------------------------------------
podziel, osadź, przechowaj w magazynie wektorów    add_to_index: lokalny indeks pełnotekstowy
osadź pytanie, weź top‑k fragmentów                agent wyszukuje, dopracowuje, wyszukuje ponownie
wklej fragmenty do podpowiedzi                     get_text_fragments: cytowane fragmenty
ponowne osadzanie przy zmianie dokumentów          update_index ponownie odczytuje zmienione
wymaga modelu osadzania i magazynu                 brak wywołań modelu, brak sieci w czasie działania
dopasowuje znaczenie; ranking jest nieprzejrzysty   dopasowuje słowa; każde trafienie jest wyjaśnialne

Wyszukiwanie pełnotekstowe traci, gdy pytanie i dokument nie mają wspólnych słów: „które kontrakty są dla nas ryzykowne?” nie zawiera słowa kluczowego. Wygrywa, gdy słownictwo jest wspólne, co opisuje większość pytań, które ludzie zadają o własne dokumenty: nazwa klauzuli, produkt, klient, numer faktury, zakres dat. Gdy zapytanie nie trafia, agent próbuje renewal OR renews lub dopasowanie przybliżone, tak jak człowiek. Serwer pomaga: niecytowane zapytanie dwuwyrazowe nie znajduje nic w GroupDocs.Search, a pusty wynik zawiera hint, który mówi agentowi, aby cytował frazę.

Które narzędzie do którego pytania?

Użytkownik pyta Agent wywołuje
“Zindeksuj ten folder” add_to_index
“Które pliki wspominają o X?” search
“Co mówi o X?” get_text_fragments
“Pliki zmieniły się, odśwież” update_index
“Zapomnij o folderze szkiców” remove_from_index
“Co jest w indeksie?” get_index_info
“Rozpocznij osobny indeks” create_index
“Dlaczego tylko 10 wyników?” get_license_status

Indeks rozumie 82 formaty, w tym PDF, Office, OpenDocument, HTML oraz archiwa e‑mail (PST, OST, MSG, EML) wraz z ich załącznikami.

Jak to uruchomić?

claude mcp add groupdocs-search -- docker run --rm -i \
  -v /path/to/documents:/data ghcr.io/groupdocs-search/search-net-mcp:latest

Cursor, Claude Desktop, VS Code z GitHub Copilot i inne klienci używają tego samego kontenera w swoim własnym pliku konfiguracyjnym: Rejestracja w klientach AI. Na Linuksie dodaj --user "$(id -u):$(id -g)", aby kontener mógł zapisywać indeks w Twoim folderze. Serwer uruchamia silnik GroupDocs.Search 26.10, którego nowy format indeksu sprawia, że indeksy są mniejsze i mniej więcej podwaja zużycie pamięci (notatki o wydaniu).

Szczere ograniczenia

  • W trybie ewaluacji indeks przechowuje maksymalnie 100 dokumentów, a wyszukiwanie zwraca maksymalnie 10; każda odpowiedź to informuje. Najpierw wywołaj get_license_status.
  • Jest to wyszukiwanie pełnotekstowe, a nie semantyczne: dopasowuje słowa, nie znaczenie.
  • Brak OCR: zeskanowane PDF‑y bez warstwy tekstowej są indeksowane wyłącznie na podstawie właściwości pliku.
  • Dostępny jest wyłącznie jako obraz Docker (spakowane narzędzie przekracza limit rozmiaru NuGet).

FAQ

Czy Claude może przeszukiwać moje lokalne dokumenty bez ich przesyłania?
Tak. Serwer działa w kontenerze na Twoim komputerze i odczytuje zamontowany folder; jedynie fragmenty cytowane przez agenta docierają do modelu.

Czy to jest RAG?
Jest to generacja wspomagana wyszukiwaniem, ale agentowa: model decyduje, co wyszukać i kiedy ma wystarczająco, używając indeksu pełnotekstowego zamiast osadzeń.

Co się dzieje, gdy moje dokumenty się zmieniają?
Poproś agenta o odświeżenie. update_index ponownie odczytuje tylko zmienione, dodane i usunięte pliki.

Zagłęb się