Попросіть AI‑агента «написати договір про обслуговування для Contoso», і він зробить це своїми словами, зі своїми заголовками та підрахує суму в голові. Це неправильний розподіл праці.
За допомогою локально запущеного GroupDocs.Assembly.Mcp (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor або Copilot запитують ваш шаблон Word, які поля потрібні, заповнюють їх з ваших нотаток, і движок генерує контракт, таблицю та арифметику, не втручаючись у макет:
Створіть договір про обслуговування для цього замовлення, використовуючи contract-template.docx, і збережіть його у форматі PDF: Contoso Pharma, Keizersgracht 210 Amsterdam, контакт Dr. Lena Brandt; 12 місяців керованого хостингу за 4 800 EUR, 12 місяців підтримки за 1 200 EUR, один воркшоп з впровадження за 3 500 EUR; знижка 5 відсотків.
Покрокова версія з налаштуваннями та усуненням проблем знаходиться в документації: Як генерувати документи з шаблонів за допомогою AI‑агентів з використанням MCP.
Чому модель не повинна писати документ?
Тому що згенерований документ містить помилки, які важко помітити. Макет відхиляється від затвердженого юридичним відділом. Пункт перефразовується у щось, що звучить добре, але означає інше. Сума отримується за допомогою передбачення наступного токену, а не множення. І кожен запуск трохи відрізняється, тому огляд минулого місяця нічого не каже про контракт цього місяця.
Шаблон змінює це. Юридичний відділ володіє contract-template.docx зі своїми заголовками, блоком підпису та тегами <<[customer.Name]>>. Завдання моделі зводиться до того, у чому вона сильна: читати електронний лист або набір нотаток і перетворювати їх у структуровані значення. Движок робить решту, завжди однаково.
Як агент знає, що заповнювати?
Він запитує шаблон. get_template_fields читає теги без запуску движка і повертає імена, які використовує шаблон, кожне поле, яке він читає, та скелет JSON для заповнення. Ось що сервер повернув для нашого шаблону контракту:
-> 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 } ] } }
Цей скелет — це договір між моделлю та документом. Агент заповнює його з тексту замовлення і передає назад як dataJson.
Що трапляється, коли агент пропускає поле?
Його точно повідомляють. У нашому тесті перша спроба агента пропустила електронну адресу клієнта. Сервер відхилив запит і вказав на прогалину:
-> 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.
Модель, що писала б вільний текст, тихо залишила б цей рядок порожнім. Тут агент може запитати вас про адресу або разом з вами вирішити, що поле може залишитися порожнім.
Повний обмін
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
Після додавання електронної пошти другий виклик успішно завершився:
-> 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
Документ містить трирядкову таблицю зборів, створену за допомогою <<foreach>> у рядку таблиці, суми обчислені шаблоном (<<[item.Quantity * item.UnitPrice]>>), загальна сума 75500 EUR з items.Sum(...) і рядок «Застосовується знижка 5 відсотків», який існує лише тому, що тег <<if>> знайшов знижку в даних. Модель нічого не обчислювала.
Чи це краще, ніж сервіс шаблонів у хмарі?
Це інша торгівля. Сервіси шаблонів у хмарі беруть ваш шаблон і дані через HTTPS, рендерять їх у своїй хмарі та стягують плату за документ або за кредит. Тут шаблон, дані та результат залишаються у папці на вашому комп’ютері; движок — це GroupDocs.Assembly, що працює в процесі, і нічого не слухає на порту. Те, що надходить до вашого постачальника моделі, — це текст замовлення, який ви вставляєте, і скелет, який заповнює агент, а не готовий контракт. Архітектура описана у пості сімейства про обробка AI‑документів на місці.
Чесні обмеження
- Режим оцінки: кожен згенерований документ починається рядком «Evaluation Only. Created with GroupDocs.Assembly 26.7…», збережені робочі книги отримують додатковий лист, а шаблони електронних листів залишають лише їхнє просте текстове тіло. Файл ліцензії або лічильні ключі видаляють усі три.
- Синтаксис шаблону —
<<[name]>>. Заповнювачі{{name}}залишаються як текст;get_template_fieldsповідомляє про це. - Шаблони — це довірений вхід: теги зображень та документів завантажують будь‑який шлях або URL, який повертає їх вираз. Підключіть одну папку для сервера.
- Дати: записуйте їх у форматі
2026-11-12T00:00:00і форматувати у шаблоні (<<[contract.Date]:"d MMMM yyyy">>). Дата лише"2026-11-12"виводиться як 11 листопада на машині UTC+2 у нашому тесті. - Агент є джерелом даних. Попросіть його перерахувати значення, які він витягнув, перед рендерингом, і перегляньте їх.
Питання та відповіді
Чи може AI‑агент заповнити мій шаблон Word без його завантаження?
Так. Сервер працює локально через stdio і читає шаблон з папки, яку ви налаштували; результат записується поруч.
Які формати можуть бути у шаблону?
Word, Excel, PowerPoint, Markdown, HTML, текстові та шаблони електронних листів; кожен можна зберегти у власному форматі або у PDF та інші. get_supported_formats перераховує їх для кожного шаблону.
Що робити, якщо шаблон підтримує інша особа?
У цьому і суть. Той, хто володіє шаблоном, змінює пункти та макет; агент продовжує заповнювати той самий скелет, і get_template_fields показує йому будь‑яке нове поле під час наступного запиту.
Поглиблене вивчення
- Документація, канонічний посібник: Як генерувати документи з шаблонів за допомогою AI‑агентів з використанням MCP
- З електронного листа або нотаток у документ: Як перетворити нотатки або електронний лист у готовий документ за допомогою AI‑агента
- Центр документації: Сервер GroupDocs.Assembly MCP
- Пов’язано: Сотня персоналізованих PDF з одного запиту: злиття пошти за допомогою AI‑агента
- Пов’язано: Що потрібно цьому шаблону? Запитайте.
- Пов’язано: Діаграма береться з шаблону, числа — з даних
- Пов’язано: Ваш репозиторій вже містить дані; нехай агент створить PDF
- Що нового в движку: Що нового в движку: GroupDocs.Assembly для .NET 26.7
- На місці та модель безпеки: 3 архітектури обробки AI‑документів, і та, що зберігає файли у вашій мережі
- Питання: Форум GroupDocs Assembly
- Джерело: GroupDocs.Assembly.Mcp на GitHub · пакет NuGet