“Which of our contracts carry a termination penalty?” nghe như một công việc dành cho AI agent, và đúng vậy, nhưng không phải bằng cách đọc các hợp đồng. Một agent mở mọi tệp để trả lời sẽ tiêu tốn ngữ cảnh vào 297 tài liệu không liên quan và vẫn phải tin rằng nó đã nhận thấy điều khoản trong ba tài liệu còn lại. Với GroupDocs.Search.Mcp chạy cục bộ trong Docker, Claude Desktop, Cursor hoặc Copilot, thư mục được lập chỉ mục một lần, hỏi chỉ mục các hợp đồng phù hợp, và chỉ đọc các điều khoản:
Các hợp đồng nào của tôi đề cập đến khoản phạt chấm dứt? Trích dẫn điều khoản cho mỗi hợp đồng.
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 đặt câu hỏi qua một thư mục hợp đồng với một AI agent.
Điều gì sai khi agent đọc mọi thứ?
Ba điều, theo thứ tự nguy hiểm tăng dần. Nó chậm và tốn kém: mỗi hợp đồng đều đi qua cửa sổ ngữ cảnh, mỗi khi bạn hỏi. Nó hết chỗ: sau vài chục tài liệu dài, những tài liệu đầu tiên rơi ra khỏi cửa sổ hoặc bị tóm tắt, và một bản tóm tắt là nơi một điều khoản có thể bị mất. Và nó thất bại một cách im lặng: “Tôi tìm thấy hai hợp đồng có khoản phạt chấm dứt” nghe giống nhau dù agent đã kiểm tra 300 hợp đồng hay chỉ lướt qua 40. Không có gì trong câu trả lời cho bạn biết cái nào.
Một chỉ mục loại bỏ vấn đề đầu tiên và bộc lộ vấn đề thứ ba. Câu hỏi “các tệp nào chứa những từ này” có câu trả lời chính xác, và công cụ tìm kiếm trả về kết quả kèm số lượng bạn có thể kiểm tra.
Quy trình đúng trông như thế nào?
Lập chỉ mục một lần, tìm kiếm, rồi đọc các kết quả phù hợp. Đây là những gì máy chủ trả về trong thử nghiệm của chúng tôi, với năm hợp đồng tổng hợp: hai có điều khoản phạt, và một NDA đề cập cả hai từ nhưng loại trừ phạt.
-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexed 'contracts' into index 'contracts': 5 document(s) added,
5 in the index.
-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
"hint": "Unquoted words separated by spaces do not match. Search the
phrase as \"termination penalty\", or combine the words with
AND / OR, e.g. termination AND penalty." }
-> search {"query":"termination AND penalty","indexName":"contracts"}
<- documentsFound 3: acme-master-services-agreement.pdf,
globex-consulting-agreement.docx, initech-nda.docx
-> get_text_fragments {"query":"\"termination penalty\"",...}
<- === contracts/acme-master-services-agreement.pdf ===
…a termination penalty of three monthly fees applies, payable
within 30…
=== contracts/globex-consulting-agreement.docx ===
…Early termination penalty: the Client pays 50 percent of the fees…
Ba kết quả dạy chúng ta gì?
Truy vấn đầu tiên bị bỏ lỡ, và máy chủ đã giải thích lý do. Trong GroupDocs.Search, các từ cách nhau bằng dấu cách mà không có dấu ngoặc kép sẽ không khớp như một cụm từ. Thay vì trả về số không trống, máy chủ đính kèm một hint giải thích cách sửa, và các agent sẽ tự điều chỉnh trong lần gọi tiếp theo. Đây là lỗi phổ biến nhất khi lần đầu, và nó được xử lý ngay trong phản hồi.
AND tìm được ba, cụm từ tìm được hai. AND được đánh giá theo từng tài liệu. NDA của Initech chứa cả hai từ trong câu “There is no fee and no penalty associated with termination of this NDA”. Một mô hình chỉ đọc kết quả tìm kiếm sẽ tính nó; khi đọc đoạn văn, nó báo cáo NDA riêng biệt như một hợp đồng rõ ràng loại trừ phạt. Sự khác biệt này là giá trị của cuộc gọi thứ ba.
Định dạng không quan trọng. Các kết quả đến từ một PDF và một DOCX, và một hợp đồng TXT cũng nằm trong cùng chỉ mục. Engine lập chỉ mục 82 định dạng, vì vậy một thư mục đã phát triển trong mười năm với các công cụ khác nhau vẫn trả lời được một truy vấn duy nhất.
Các cuộc gọi, theo thứ tự
user agent Search MCP server
| "Which contracts mention a termination penalty?" |
|---------------->| |
| |-- add_to_index (once) ------------------>|
| |-- search {"query":"termination AND |
| | penalty"} -------------------->|
| |<- 3 files --------------------------------|
| |-- get_text_fragments {"query": |
| | "\"termination penalty\""} ----------->|
| |<- the two clauses, with context ----------|
|<- "Acme: 3 monthly fees (12.3). Globex: 50% of remaining |
| fees. Initech NDA: explicitly no penalty." |
Sau lần lập chỉ mục đầu tiên, mỗi câu hỏi mới tốn hai cuộc gọi bất kể có bao nhiêu hợp đồng. “Which contracts have a force majeure clause?” là "force majeure". “Which leases renew automatically?” là renewal OR renews, và đoạn văn nói “renews automatically for 12 months unless notice is given”. Một điều khoản về thời gian thông báo là terminat? AND notice, trong đó ? đại diện cho một ký tự và khớp với terminate.
Nơi con người vẫn tham gia vòng lặp
Đây không phải là việc rà soát hợp đồng, và không nên giả vờ là vậy. Chỉ mục tìm và trích dẫn văn bản; agent tóm tắt những gì nó đã trích dẫn. Hai thói quen giữ cho nó trung thực: Yêu cầu trích dẫn cùng với mỗi khẳng định, để một bản tóm tắt sai hiện ra ngay bên cạnh câu mà nó đã hiểu sai. Và yêu cầu cả những trường hợp gần đúng, “liệt kê các hợp đồng đề cập các từ mà không có điều khoản”, vì đó là nơi phán đoán của người đọc quan trọng nhất.
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, và mọi phản hồi đều nói như vậy. Gọi
get_license_statustrước khi chạy thực tế, vì câu trả lời bị giới hạn có thể trông như hoàn chỉnh. - Các hợp đồng được quét mà không có lớp văn bản chỉ được lập chỉ mục dựa trên thuộc tính tệp; không có OCR.
- Tìm kiếm toàn văn khớp từ: một agent phải sử dụng từ vựng của hợp đồng, hoặc thử các biến thể.
- Việc xóa một tệp khỏi thư mục đã lập chỉ mục không được hỗ trợ; hãy xóa toàn thư mục và thêm lại những gì bạn muốn.
Câu hỏi thường gặp
AI agent có thể tìm kiếm toàn bộ hợp đồng của tôi mà không tải lên không?
Có. Chỉ mục được xây dựng và tìm kiếm trong một container trên máy của bạn; chỉ các điều khoản mà agent trích dẫn mới tới mô hình.
Nó có thể xử lý bao nhiêu hợp đồng?
Có giấy phép, tùy vào dung lượng đĩa và bộ nhớ của bạn; chỉ mục được xây dựng một lần và cập nhật dần. Chế độ đánh giá dừng ở 100 tài liệu mỗi chỉ mục.
Tại sao tìm kiếm hai từ của tôi không trả về kết quả?
Các từ không có dấu ngoặc kép sẽ không khớp như một cụm từ. Hãy đặt trong dấu ngoặc kép, "termination penalty", hoặc nối các từ bằng AND; hint của máy chủ cũng nói như vậy.
Đi sâu hơn
- Tài liệu, hướng dẫn chuẩn: Cách đặt câu hỏi qua một thư mục hợp đồng với một AI agent
- Trung tâm tài liệu: GroupDocs.Search MCP Server
- Bắt đầu tại đây: Bạn có cần cơ sở dữ liệu vector để đặt câu hỏi về một thư mục tài liệu không?
- Liên quan: Câu trả lời có căn cứ từ tệp của bạn: trích dẫn đoạn văn, không phải bộ nhớ của mô hình
- Liên quan: grep không đọc được PDF: cung cấp cho agent lập trình của bạn một chỉ mục tài liệu
- Liên quan: Tìm kiếm lưu trữ email của bạn với AI agent: PST, MSG, EML và các tệp đính kèm bên trong
- Liên quan: Bộ nhớ dự án cho AI agents: một chỉ mục cho mỗi dự án, luôn cập nhật
- Kiến trúc on-premise và mô hình bảo mật: 3 kiến trúc cho xử lý tài liệu AI, và kiến trúc giữ tệp trong mạng nội bộ của bạn
- Câu hỏi: Diễn đàn GroupDocs Search
- Nguồn: GroupDocs.Search.Mcp trên GitHub