每次新的聊天都會從一個忘記了您文件的代理開始。它可以重新閱讀這些文件,代價是時間和上下文,或者它可以查詢能夠記住的東西。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)"以讓容器能寫入索引。
常見問題
代理會在會話之間記住我的文件嗎?
有持久化索引時,會的:索引保留在磁碟上,下一個會話會直接搜尋它,而不需要重新讀取任何文件。
當文件變更時,我需要重新建立索引嗎?
不需要。update_index 只會重新讀取已變更、已新增和已刪除的文件。
我可以將索引與唯讀文件分開嗎?
可以。將文件以唯讀方式掛載,將可寫入的資料夾掛載到 /index,並設定 GROUPDOCS_MCP_INDEX_PATH=/index。
深入了解
- 文件說明,標準操作指南: How to keep a document index current as files change
- 文件中心: GroupDocs.Search MCP Server
- 從這裡開始: Do you need a vector database to ask questions about a folder of documents?
- 相關: grep can’t read PDF: give your coding agent a document index
- 相關: Why an AI agent should not read 300 contracts to answer one question
- 相關: Grounded answers from your files: quote the passage, not the model’s memory
- 相關: Search your email archive with an AI agent: PST, MSG, EML and the attachments inside
- 本地部署與安全模型: 3 architectures for AI document processing, and the one that keeps files inside your network
- 引擎發布: GroupDocs.Search for .NET 26.10 – October 2026 Release Highlights
- 問題討論: GroupDocs Search forum
- 原始碼: GroupDocs.Search.Mcp on GitHub