Mỗi cuộc trò chuyện mới bắt đầu với một tác nhân đã quên các tài liệu của bạn. Nó có thể đọc lại chúng, với chi phí về thời gian và ngữ cảnh, hoặc nó có thể tham khảo một thứ gì đó nhớ được. GroupDocs.Search.Mcp giữ một chỉ mục toàn văn có tên trên đĩa, cục bộ, tồn tại qua các phiên và khởi động lại container, vì vậy Claude Desktop, Cursor hoặc Copilot bắt đầu mỗi phiên với các tài liệu của dự án đã có thể tìm kiếm và làm mới chúng bằng một lời gọi khi các tệp thay đổi:

Tôi đã chỉnh sửa một số hợp đồng. Làm mới chỉ mục hợp đồng, sau đó cho tôi biết hợp đồng nào hiện đang đề cập đến phạt.

Phiên bản từng bước với cấu hình và khắc phục sự cố có trong tài liệu: Cách giữ chỉ mục tài liệu luôn cập nhật khi tệp thay đổi.

“Bộ nhớ” có nghĩa là gì đối với một tác nhân?

Trong thực tế, có hai điều: trạng thái tồn tại bên ngoài cuộc trò chuyện, và một cách rẻ tiền để giữ trạng thái đó đúng. Lịch sử trò chuyện không đáp ứng cả hai: nó kết thúc cùng phiên, và không có gì cập nhật nó khi tài liệu thay đổi. Một chỉ mục tìm kiếm phù hợp hơn cho tài liệu. Nó tồn tại trên đĩa bên cạnh chúng, trả lời “các tệp nào nói X” mà không cần tải chúng, và có thể được làm mới một cách tăng dầ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

Cách làm mới hoạt động như thế nào?

update_index so sánh chỉ mục với các tệp trên đĩa và chỉ đọc lại những gì đã thay đổi. Đây là kết quả server trả về trong thử nghiệm của chúng tôi, sau khi một hợp đồng được thêm điều khoản phạt giữa hai lần gọi:

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

Số lượng cho bạn biết những gì đã xảy ra: một tệp được đọc lại, không có gì khác bị chạm tới. Các tệp bị xóa sẽ biến mất trong cùng một lần gọi.

Tại sao lại có một chỉ mục cho mỗi dự án?

Vì các tập hợp riêng biệt xứng đáng có câu trả lời riêng. Một câu hỏi về các hợp đồng của năm nay không nên hiển thị các bản nháp của năm trước, và tài liệu của một khách hàng không nên trộn lẫn với tài liệu của khách hàng khác. Tên chỉ mục rất rẻ:

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

Mỗi chỉ mục là một thư mục dưới /data/.groupdocs-search-index, và get_index_info không có tên sẽ liệt kê tất cả chúng. Bạn hiếm khi cần create_index một cách rõ ràng, vì add_to_index sẽ tạo chỉ mục khi dùng lần đầu, nhưng việc đặt tên có chủ ý là cách biến “một chỉ mục” thành “bộ nhớ của dự án này”.

Quy tắc duy nhất về việc xóa

Engine chỉ xóa các đường dẫn đã được thêm vào, không phải các tệp riêng lẻ bên trong chúng. Server nói rõ điều này khi bạn thử:

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

Vì vậy hãy thiết kế cho trường hợp này: nếu bạn dự định bỏ một phần của tập hợp sau này, chẳng hạn một năm, một khách hàng hoặc các bản nháp, hãy đánh chỉ mục các phần đó dưới các đường dẫn riêng (contracts/2025, contracts/2026) và mỗi phần có thể được xóa riêng. Xóa một tệp trên đĩa và chạy update_index cũng sẽ loại bỏ nó.

Giữ chỉ mục luôn cập nhật mà không cần hỏi

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)

Ba cách thực tế để tự động làm mới:

  1. Trong hướng dẫn của tác nhân. Một dòng trong CLAUDE.md hoặc AGENTS.md, “gọi update_index cho chỉ mục của dự án này trước khi trả lời nếu các tệp có thể đã thay đổi”, sẽ khiến tác nhân thực hiện việc này khi bắt đầu một phiên.
  2. Theo lịch trình. Bất kỳ tự động hoá nào hỗ trợ MCP đều có thể gọi update_index hàng đêm; khi có ít thay đổi, lời gọi này nhanh.
  3. Sau khi sao chép hàng loạt. Một lời gọi sẽ bắt mọi tệp mới được thêm.

Các chỉ mục cũng tồn tại qua các bản nâng cấp: các chỉ mục được xây dựng bởi GroupDocs.Search 22.7 đến 26.8 sẽ được chuyển đổi khi dùng lần đầu, với bản sao lưu được giữ bên cạnh chúng.

Những gì tác nhân quyết định, và những gì chỉ mục thực hiện

Tác nhân quyết định Chỉ mục thực hiện
chỉ mục nào mà một câu hỏi thuộc về giữ mỗi chỉ mục được đặt tên trong thư mục riêng của nó
khi các tệp có thể đã thay đổi đọc lại chỉ các tệp đã thay đổi, được thêm và bị xóa
các từ nào để tìm kiếm, và các biến thể cần thử khớp các từ, cụm từ, phạm vi; báo cáo các thuật ngữ đã tìm thấy
bao nhiêu ngữ cảnh để trích dẫn trả về các đoạn văn với số lượng từ yêu cầu xung quanh chúng
những gì sẽ nói với bạn không có gì: nó trả về số lượng, đường dẫn và văn bản, không bao giờ là kết luận

Sự phân chia này là có chủ ý. Phán đoán vẫn ở mô hình, và các sự kiện mà nó suy luận đến đến từ một công cụ mà bạn có thể kiểm tra đầu ra.

Giới hạn trung thực

  • Trong chế độ đánh giá, một chỉ mục chứa tối đa 100 tài liệu và một tìm kiếm trả về tối đa 10. Gọi get_license_status trước khi dựa vào chỉ mục như là nguồn sự thật.
  • Chỉ mục chỉ tồn tại nếu /data (hoặc volume chỉ mục) là một thư mục host được gắn; nếu không nó sẽ biến mất cùng container.
  • Chỉ mục chứa văn bản của tài liệu: hãy bảo vệ và xử lý nó như các tài liệu.
  • Chỉ hỗ trợ Docker; trên Linux thêm --user "$(id -u):$(id -g)" để container có thể ghi chỉ mục.

Câu hỏi thường gặp

Tác nhân có nhớ các tài liệu của tôi giữa các phiên không?
Với một chỉ mục bền vững, có: chỉ mục vẫn nằm trên đĩa và phiên tiếp theo sẽ tìm kiếm nó mà không cần đọc lại bất kỳ thứ gì.

Tôi có cần xây dựng lại chỉ mục khi các tệp thay đổi không?
Không. update_index chỉ đọc lại các tệp đã thay đổi, được thêm và bị xóa.

Tôi có thể giữ chỉ mục riêng biệt khỏi các tài liệu chỉ đọc không?
Có. Gắn các tài liệu ở chế độ chỉ đọc, gắn một thư mục có thể ghi tại /index, và đặt GROUPDOCS_MCP_INDEX_PATH=/index.

Đi sâu hơn