Ask an AI agent to “write the service agreement for Contoso” and it will, in its own words, with its own headings, and with a total it worked out in its head. That is the wrong division of labour. With GroupDocs.Assembly.Mcp running locally (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor or Copilot asks your Word template which fields it needs, fills them from your notes, and the engine renders the contract, table and arithmetic included, without the model touching the layout:
Tạo thỏa thuận dịch vụ cho đơn hàng này bằng cách sử dụng contract-template.docx và lưu dưới dạng PDF: Contoso Pharma, Keizersgracht 210 Amsterdam, liên hệ Dr. Lena Brandt; 12 tháng hosting được quản lý với giá 4.800 EUR, 12 tháng hỗ trợ với giá 1.200 EUR, một buổi hội thảo khởi tạo với giá 3.500 EUR; chiết khấu 5 phần trăm.
The step-by-step version with config and troubleshooting is in the documentation: Cách tạo tài liệu từ mẫu bằng AI agents sử dụng MCP.
Tại sao mô hình không nên viết tài liệu?
Bởi vì một tài liệu được tạo ra có thể sai lệch theo những cách khó nhận ra. Bố cục lệch so với phiên bản pháp lý đã được phê duyệt. Một điều khoản bị diễn đạt lại thành câu nghe có vẻ ổn nhưng mang nghĩa khác. Tổng số được đưa ra dựa trên dự đoán token tiếp theo thay vì phép nhân. Và mỗi lần chạy lại hơi khác nhau, vì vậy đánh giá tháng trước không cho bạn thông tin gì về hợp đồng tháng này.
Một mẫu ngược lại. Bộ phận pháp lý sở hữu contract-template.docx, với các tiêu đề, khối chữ ký và các thẻ <<[customer.Name]>>. Công việc của mô hình chỉ còn lại phần mà nó giỏi: đọc email hoặc một tập hợp ghi chú và chuyển chúng thành các giá trị có cấu trúc. Engine sẽ thực hiện phần còn lại, luôn như nhau mỗi lần.
Làm sao agent biết cần điền gì?
Nó hỏi mẫu. get_template_fields đọc các thẻ mà không chạy engine và trả về các tên mà mẫu sử dụng, mọi trường mà nó đọc, và một khung JSON để điền. Đây là phản hồi của máy chủ cho mẫu hợp đồng của chúng tôi:
-> get_template_fields {"template":{"filePath":"contract-template.docx"}}
<- { "tagCount": 17,
"dataSourceNames": [ "contract", "customer", "items" ],
"dataSkeleton": {
"contract": { "Number": "", "Date": "", "Discount": "" },
"customer": { "Name": "", "Address": "", "Contact": "",
"Email": "" },
"items": [ { "Title": "", "Quantity": 0, "UnitPrice": 0 } ] } }
Khung skeleton đó là hợp đồng giữa mô hình và tài liệu. Agent điền nó từ văn bản đơn hàng và trả lại dưới dạng dataJson.
Điều gì xảy ra khi agent quên một trường?
Nó sẽ được thông báo một cách chính xác. Trong thử nghiệm của chúng tôi, lần đầu tiên agent đã bỏ qua địa chỉ email của khách hàng. Máy chủ từ chối và chỉ ra khoảng trống:
-> assemble_document {"template":{...},"dataJson":"{... no Email ...}"}
<- Document assembly failed for 'contract-template.docx': ...
Can not get the value of member 'Email' on type ''. The template
reads 'Email', which the data does not have. Check the spelling
(names are case-sensitive) with get_template_fields and add it to
the data. ... pass allowMissingMembers=true to output nothing for
missing members and empty lists.
Một mô hình viết văn bản tự do có thể đã lặng lẽ bỏ qua dòng này. Ở đây agent có thể hỏi bạn về địa chỉ, hoặc quyết định cùng bạn rằng trường này có thể để trống.
Toàn bộ quá trình trao đổi
user agent Assembly MCP server
| "Make the contract for this order: ..." |
|-------------->| |
| |-- get_template_fields {"template": |
| | "contract-template.docx"} ------------->|
| |<- dataSkeleton: contract, customer, items --|
| | (fills the skeleton from the order text) |
| |-- assemble_document {"dataJson":"{...}", |
| | "format":"pdf"} ----------------------->|
| |<- Saved to: .../contract-template_ |
| | assembled.pdf ----------------------------|
|<- "Contract ready: 3 items, total 75500 EUR, 5% discount." |
layout, table and arithmetic come from the template
bố cục, bảng và các phép tính đến từ mẫu
Với email đã được thêm, lần gọi thứ hai đã thành công:
-> assemble_document {"template":{"filePath":"contract-template.docx"},
"dataJson":"{...}","format":"pdf"}
<- Assembled 'contract-template.docx' with inline JSON (JSON object)
as PDF
Saved to: .../contract-template_assembled.pdf
Tài liệu chứa một bảng phí ba dòng được tạo bằng <<foreach>> trong hàng bảng, các khoản tiền được tính bởi mẫu (<<[item.Quantity * item.UnitPrice]>>), tổng cộng 75500 EUR từ items.Sum(...), và dòng “Áp dụng chiết khấu 5 phần trăm.”, chỉ xuất hiện vì thẻ <<if>> đã phát hiện chiết khấu trong dữ liệu. Mô hình không tính toán gì cả.
Điều này có tốt hơn dịch vụ mẫu được lưu trữ không?
Đó là một sự đánh đổi khác. Các dịch vụ mẫu được lưu trữ nhận mẫu và dữ liệu của bạn qua HTTPS, render trên đám mây và tính phí theo tài liệu hoặc theo credit. Ở đây mẫu, dữ liệu và kết quả vẫn nằm trong một thư mục trên máy của bạn; engine là GroupDocs.Assembly chạy trong tiến trình, và không có gì lắng nghe trên cổng. Những gì được gửi tới nhà cung cấp mô hình của bạn chỉ là văn bản đơn hàng bạn dán và khung skeleton mà agent điền, không phải hợp đồng đã render. Kiến trúc được mô tả trong bài viết gia đình về xử lý tài liệu AI tại chỗ.
Giới hạn thực tế
- Chế độ đánh giá: mỗi tài liệu được tạo sẽ bắt đầu bằng dòng “Evaluation Only. Created with GroupDocs.Assembly 26.7…”, các workbook đã lưu sẽ có thêm một worksheet, và các mẫu email chỉ giữ phần nội dung văn bản thuần. Tệp giấy phép hoặc khóa đo lường sẽ loại bỏ cả ba.
- Cú pháp mẫu là
<<[name]>>. Các placeholder{{name}}được để lại dưới dạng văn bản;get_template_fieldsthông báo như vậy. - Mẫu là đầu vào đáng tin cậy: các thẻ hình ảnh và tài liệu sẽ tải bất kỳ đường dẫn hoặc URL nào mà biểu thức của chúng trả về. Gắn một thư mục cho máy chủ.
- Ngày tháng: viết dưới dạng
2026-11-12T00:00:00và định dạng trong mẫu (<<[contract.Date]:"d MMMM yyyy">>). Một ngày chỉ"2026-11-12"sẽ được in là 11 November trên máy có múi giờ UTC+2 trong thử nghiệm của chúng tôi. - Agent là nguồn dữ liệu. Yêu cầu nó liệt kê các giá trị đã trích xuất trước khi render, và xem xét chúng.
Câu hỏi thường gặp
AI agent có thể điền mẫu Word của tôi mà không tải lên không?
Có. Máy chủ chạy cục bộ qua stdio và đọc mẫu từ thư mục bạn cấu hình; kết quả được ghi bên cạnh nó.
Mẫu có thể ở định dạng nào?
Word, Excel, PowerPoint, Markdown, HTML, văn bản và mẫu email; mỗi loại có thể được lưu thành định dạng riêng hoặc thành PDF và các định dạng khác. get_supported_formats liệt kê chúng theo mẫu.
Nếu mẫu được duy trì bởi người khác thì sao?
Đó chính là mục đích. Người sở hữu mẫu sẽ thay đổi các điều khoản và bố cục; agent vẫn điền cùng một skeleton, và get_template_fields sẽ hiển thị bất kỳ trường mới nào lần sau khi nó hỏi.
Đi sâu hơn
- Tài liệu, hướng dẫn chuẩn: Cách tạo tài liệu từ mẫu bằng AI agents sử dụng MCP
- Từ email hoặc ghi chú đến tài liệu: Cách chuyển ghi chú hoặc email thành tài liệu hoàn chỉnh với AI agent
- Trung tâm tài liệu: GroupDocs.Assembly MCP Server
- Liên quan: Một trăm PDF cá nhân hoá từ một prompt: mail merge với AI agent
- Liên quan: Mẫu này cần gì? Hỏi nó.
- Liên quan: Biểu đồ đến từ mẫu, số liệu đến từ dữ liệu
- Liên quan: Kho lưu trữ của bạn đã có dữ liệu; để agent tạo PDF
- Có gì mới trong engine: GroupDocs.Assembly for .NET 26.7
- Mô hình tại chỗ và bảo mật: 3 kiến trúc cho xử lý tài liệu AI, và kiến trúc giữ file trong mạng nội bộ của bạn
- Câu hỏi: GroupDocs Assembly forum
- Nguồn: GroupDocs.Assembly.Mcp trên GitHub · NuGet package