Každý nový chat začíná s agentem, který zapomněl vaše dokumenty. Může je znovu načíst, což stojí čas a kontext, nebo se může poradit s něčím, co si pamatuje. GroupDocs.Search.Mcp uchovává pojmenovaný fulltextový index na disku, lokálně, který přežívá mezi relacemi a restarty kontejneru, takže Claude Desktop, Cursor nebo Copilot zahajují každou relaci s dokumenty projektu již prohledávatelnými a obnoví je jedním voláním, když se soubory změní:

Upravil jsem některé smlouvy. Aktualizujte index smluv a pak mi řekněte, které smlouvy nyní zmiňují pokutu.

Verze krok za krokem s konfigurací a řešením problémů je v dokumentaci: Jak udržet index dokumentů aktuální při změně souborů.

Co znamená „paměť“ pro agenta?

V praxi jde o dvě věci: stav, který přetrvává mimo konverzaci, a levný způsob, jak tento stav udržet pravdivý. Historie chatu selhává v obou ohledech: končí s relací a nic ji neaktualizuje, když se dokument změní. Vyhledávací index je pro dokumenty vhodnější. Žije na disku vedle nich, odpovídá na otázku „které soubory říkají X“ bez jejich načítání a může být inkrementálně aktualizován.

session 1    add_to_index --> index "contracts" --+
                                                 |  kept on disk in
session 2    search, get_text_fragments <--------+  /data/.groupdocs-search-
             (nothing is re-read)                    index/contracts
files edit   update_index --> re-reads changed, added, deleted files only
new project  create_index {"indexName":"legal-2026"} --> a separate index

Jak funguje aktualizace?

update_index porovnává index se soubory na disku a znovu načítá jen to, co se změnilo. Zde je, co server v našem testu vrátil po tom, co byla mezi dvěma voláními do jedné smlouvy přidána klauzule o pokutě:

-> get_index_info {"indexName":"contracts"}
<- { "documentCount": 5, "indexedPaths": [ "contracts" ],
     "documentsWithErrors": [], "status": "Ready" }

-> update_index {"indexName":"contracts"}
<- Index 'contracts' updated: 0 added, 1 updated, 0 removed;
   5 document(s) in the index.

-> search {"query":"penalty","indexName":"contracts"}
<- documentsFound 3, including the edited initech-nda.docx

Počty vám říkají, co se stalo: jeden soubor byl znovu načten, nic dalšího nebylo dotčeno. Smazané soubory vypadnou při stejném volání.

Proč jeden index na projekt?

Protože oddělené korpusy si zaslouží oddělené odpovědi. Otázka o letošních smlouvách by neměla přinést návrhy z loňských návrhů a dokumenty jednoho klienta by se neměly míchat s dokumenty jiného klienta. Názvy indexů jsou levné:

-> create_index {"indexName":"legal-2026"}
<- Index 'legal-2026' created. Add documents with add_to_index
   (indexName: 'legal-2026').

Každý index je složka pod /data/.groupdocs-search-index a get_index_info bez názvu je vypíše všechny. Zřídka potřebujete explicitně create_index, protože add_to_index vytvoří index při prvním použití, ale jejich úmyslné pojmenování je to, co promění „index“ na „paměť tohoto projektu“.

Jedno pravidlo o odstraňování

Engine odstraňuje cesty, které byly přidány, nikoli jednotlivé soubory uvnitř nich. Server to říká jasně, když to zkusíte:

-> remove_from_index {"documentPath":"contracts/hooli-supply-terms.txt",...}
<- Removal failed for 'contracts/hooli-supply-terms.txt':
   'contracts/hooli-supply-terms.txt' is inside the indexed folder
   'contracts'. GroupDocs.Search removes whole indexed paths only: ...

Takže to navrhněte tak: pokud očekáváte, že později odstraníte část korpusu, například rok, klienta nebo návrhy, indexujte tyto části jako samostatné cesty (contracts/2025, contracts/2026) a každou lze odstranit samostatně. Smazání souboru na disku a spuštění update_index jej také odstraní.

Udržování aktuálnosti bez dotazu

create_index (optional)
      |
      v
add_to_index ---> search ---> get_text_fragments
      ^              ^
      |              |  get_index_info: counts, paths, status
update_index  (files changed on disk)
      |
remove_from_index  (only a path that was given to add_to_index)

Tři praktické způsoby, jak automatizovat aktualizaci:

  1. V instrukcích agenta. Řádek v CLAUDE.md nebo AGENTS.md, “call update_index for this project’s index before answering if files may have changed”, přiměje agenta provést to na začátku relace.
  2. Podle plánu. Jakákoli automatizace podporující MCP může volat update_index každou noc; když se málo změnilo, volání je rychlé.
  3. Po hromadném kopírování. Jedno volání zachytí každý přidaný soubor.

Indexy také přežívají aktualizace: indexy vytvořené GroupDocs.Search 22.7 až 26.8 jsou při prvním použití převedeny, s zálohou uloženou vedle nich.

Co rozhoduje agent a co dělá index

Agent rozhoduje Index dělá
ke kterému indexu otázka patří uchovává každý pojmenovaný index ve své vlastní složce
kdy se soubory mohly změnit znovu načítá jen změněné, přidané a smazané soubory
která slova hledat a jaké varianty zkusit porovnává slova, fráze, rozsahy; hlásí nalezené termíny
kolik kontextu citovat vrací úryvky s požadovaným počtem slov kolem nich
co vám říct nic: vrací počty, cesty a text, nikdy závěry

Rozdělení je úmyslné. Rozhodování zůstává na modelu a fakta, ze kterých usuzuje, pocházejí z nástroje, jehož výstup můžete zkontrolovat.

Upřímná omezení

  • V evaluačním režimu index obsahuje maximálně 100 dokumentů a vyhledávání vrací maximálně 10. Před spoleháním se na index jako na zdroj pravdy zavolejte get_license_status.
  • Index přetrvává pouze pokud je /data (nebo svazek indexu) připojený jako hostitelská složka; jinak zmizí s kontejnerem.
  • Index obsahuje text dokumentů: chraňte a likvidujte jej stejně jako dokumenty.
  • Pouze Docker; na Linuxu přidejte --user "$(id -u):$(id -g)", aby kontejner mohl zapisovat do indexu.

Často kladené otázky

Pamatuje si agent mé dokumenty mezi relacemi?
S trvalým indexem ano: index zůstává na disku a další relace jej prohledá bez opětovného načítání čehokoli.

Musím index přestavovat, když se soubory změní?
Ne. update_index znovu načítá jen změněné, přidané a smazané soubory.

Mohu mít index oddělený od dokumentů jen pro čtení?
Ano. Připojte dokumenty jen pro čtení, připojte zapisovatelnou složku na /index a nastavte GROUPDOCS_MCP_INDEX_PATH=/index.

Prohloubení