Кожен новий чат починається з агента, який забув ваші документи. Він може перечитати їх, витрачаючи час і контекст, або звернутися до чогось, що пам’ятає. GroupDocs.Search.Mcp зберігає іменований повнотекстовий індекс на диску, локально, який зберігається між сеансами та перезапусками контейнера, тому Claude Desktop, Cursor або Copilot запускаються кожен сеанс з уже доступними для пошуку документами проєкту і оновлюють їх одним викликом, коли файли змінюються:

Я відредагував деякі контракти. Оновіть індекс контрактів, а потім повідомте, які контракти зараз містять пункт про штраф.

Крок‑за‑кроком з конфігурацією та усуненням проблем описано в документації: Як підтримувати індекс документів актуальним під час зміни файлів.

Що означає «пам’ять» для агента?

На практиці це два поняття: стан, що зберігається поза розмовою, і недорогий спосіб підтримувати цей стан актуальним. Історія чату не підходить: вона закінчується разом із сеансом, і нічого не оновлює, коли документ змінюється. Пошуковий індекс краще підходить для документів. Він живе на диску поруч із ними, відповідає на запит «які файли містять X», не завантажуючи їх, і може оновлюватися інкрементально.

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

Як працює оновлення?

update_index порівнює індекс з файлами на диску і перечитує лише те, що змінилося. Ось що сервер повернув у нашому тесті після того, як до одного контракту було додано пункт про штраф між двома викликами:

-> 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

Лічильники показують, що сталося: один файл перечитано, інше не торкнулося. Видалені файли зникають під час того ж виклику.

Чому один індекс на проєкт?

Тому що окремі корпуси заслуговують окремих відповідей. Питання про контракти цього року не повинно піднімати чернетки минулого року, і документи одного клієнта не повинні змішуватись з документами іншого. Імена індексів недорогі:

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

Кожен індекс — це папка в /data/.groupdocs-search-index, а get_index_info без вказання імені виводить їх усі. Рідко потрібно явно викликати create_index, бо add_to_index створює індекс при першому використанні, проте навмисне їх іменування перетворює «якийсь індекс» у «пам’ять цього проєкту».

Єдине правило щодо видалення

Двигун видаляє шляхи, які були додані, а не окремі файли всередині них. Сервер повідомляє про це чітко, коли ви намагаєтесь:

-> 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: ...

Тому плануйте заздалегідь: якщо ви плануєте згодом відкинути частину корпусу, наприклад рік, клієнта або чернетки, індексуйте ці частини як окремі шляхи (contracts/2025, contracts/2026) і кожен з них можна буде видалити окремо. Видалення файлу з диска та запуск update_index також його прибирає.

Підтримка актуальності без запитів

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)

Три практичні способи автоматизувати оновлення:

  1. У інструкціях агента. Рядок у CLAUDE.md або AGENTS.md: «викликати update_index для індексу цього проєкту перед відповіддю, якщо файли могли змінитися», змусить агента робити це на початку сеансу.
  2. За розкладом. Будь‑яка автоматизація, сумісна з MCP, може викликати update_index щовечора; коли змін мало, виклик швидкий.
  3. Після масового копіювання. Один виклик підхоплює всі додані файли.

Індекси також переживають оновлення: індекси, створені GroupDocs.Search 22.7‑26.8, конвертуються при першому використанні, з резервною копією, що зберігається поруч.

Що вирішує агент, а що робить індекс

Що вирішує агент Що робить індекс
який індекс використати для питання зберігає кожен іменований індекс у власній папці
коли файли могли змінитися перечитує лише змінені, додані та видалені файли
які слова шукати і які варіанти пробувати знаходить слова, фрази, діапазони; повідомляє знайдені терміни
скільки контексту цитувати повертає уривки з потрібною кількістю слів навколо
що сказати вам нічого: повертає лише лічильники, шляхи та текст, без висновків

Розподіл навмисний. Судження залишається за моделлю, а факти, на яких вона базується, надходять від інструменту, вихід яких ви можете перевірити.

Чесні обмеження

  • У режимі оцінки індекс містить не більше 100 документів, а пошук повертає не більше 10 результатів. Виконайте get_license_status перед тим, як покладатися на індекс як на джерело правди.
  • Індекс зберігається лише якщо /data (або том індексу) змонтовано як папка хоста; інакше він зникає разом із контейнером.
  • Індекс містить текст документів: захищайте та утилізуйте його так само, як і самі документи.
  • Тільки Docker; у Linux додайте --user "$(id -u):$(id -g)", щоб контейнер міг записувати індекс.

FAQ

Чи пам’ятає агент мої документи між сеансами?
При наявності постійного індексу — так: індекс залишається на диску, і наступний сеанс шукає в ньому без перечитування.

Чи потрібно перебудовувати індекс, коли файли змінюються?
Ні. update_index перечитує лише змінені, додані та видалені файли.

Чи можу я тримати індекс окремо від документів лише для читання?
Так. Змонтуйте документи лише для читання, змонтуйте записувану папку в /index і встановіть GROUPDOCS_MCP_INDEX_PATH=/index.

Поглиблене вивчення