Каждый новый чат начинается с агента, который забыл ваши документы. Он может перечитать их, затрачивая время и контекст, или обратиться к чему‑то, что помнит. 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)
Три практических способа автоматизировать обновление:
- В инструкциях агента. Строка в
CLAUDE.mdилиAGENTS.md: «вызватьupdate_indexдля индекса этого проекта перед ответом, если файлы могли измениться», заставит агента выполнить это в начале сеанса. - По расписанию. Любая автоматизация, поддерживающая MCP, может вызывать
update_indexкаждую ночь; когда изменений мало, вызов проходит быстро. - После массовой копии. Один вызов подхватывает каждый добавленный файл.
Индексы также переживают обновления: индексы, построенные 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.
Углубиться
- Документация, канонический гайд: Как поддерживать актуальность индекса документов при изменении файлов
- Центр документации: GroupDocs.Search MCP Server
- Начните здесь: Нужна ли вам векторная база данных, чтобы задавать вопросы о папке с документами?
- Связано: grep не может читать PDF: дайте вашему кодирующему агенту индекс документов
- Связано: Почему AI‑агент не должен читать 300 контрактов, чтобы ответить на один вопрос
- Связано: Обоснованные ответы из ваших файлов: цитируйте отрывок, а не память модели
- Связано: Поиск по архиву электронной почты с AI‑агентом: PST, MSG, EML и вложения внутри
- О локальном развертывании и модели безопасности: 3 архитектуры для AI‑обработки документов, и та, что держит файлы внутри вашей сети
- Выпуск движка: GroupDocs.Search for .NET 26.10 – основные моменты релиза октября 2026
- Вопросы: Форум GroupDocs Search
- Исходный код: GroupDocs.Search.Mcp на GitHub