Požádejte AI agenta, aby „napsal smlouvu o poskytování služeb pro Contoso“, a on to udělá svými vlastními slovy, s vlastními nadpisy a s částkou, kterou si spočítá v hlavě. To je špatné rozdělení práce. S lokálně běžícím GroupDocs.Assembly.Mcp (dnx GroupDocs.Assembly.Mcp --yes) Claude Desktop, Cursor nebo Copilot zeptají vaši Word šablonu, jaká pole potřebuje, vyplní je z vašich poznámek a engine vykreslí smlouvu, tabulku i výpočty, aniž by model zasahoval do rozvržení:

Vytvořte smlouvu o poskytování služeb pro tuto objednávku pomocí contract-template.docx a uložte ji jako PDF: Contoso Pharma, Keizersgracht 210 Amsterdam, kontakt Dr. Lena Brandt; 12 měsíců spravovaného hostingu za 4 800 EUR, 12 měsíců podpory za 1 200 EUR, jedno úvodní školení za 3 500 EUR; 5 % sleva.

Krok‑za‑krokem verze s konfigurací a řešením problémů je v dokumentaci: Jak generovat dokumenty ze šablon pomocí AI agentů s MCP.

Proč by model neměl psát dokument?

Protože vygenerovaný dokument selhává způsoby, které jsou těžko postřehnutelné. Rozvržení se odchyluje od právně schváleného. Klauzule je parafrázována tak, že zní dobře, ale znamená něco jiného. Celková částka vznikne z predikce dalšího tokenu místo násobení. A každé spuštění je trochu jiné, takže revize z minulého měsíce vám nic neřekne o kontraktu v tomto měsíci.

Šablona to obrací. Právní oddělení vlastní contract-template.docx s jeho nadpisy, blokem podpisu a značkami <<[customer.Name]>>. Práce modelu se zmenšuje na část, ve které je dobrý: číst e‑mail nebo sadu poznámek a převést je na strukturované hodnoty. Engine udělá zbytek, vždy stejným způsobem.

Jak agent ví, co má vyplnit?

Zeptá se šablony. get_template_fields přečte značky bez spuštění engine a vrátí názvy, které šablona používá, všechna pole, která čte, a JSON kostru k vyplnění. Toto server vrátil pro naši šablonu smlouvy:

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

Tato kostra je smlouvou mezi modelem a dokumentem. Agent ji vyplní z textu objednávky a předá zpět jako dataJson.

Co se stane, když agent zapomene pole?

Řekne se mu to přesně. V našem testu první pokus agenta vynechal e‑mailovou adresu zákazníka. Server odmítl a pojmenoval mezery:

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

Model píšící volný text by řádku tiše vynechal. Zde může agent požádat vás o adresu, nebo s vámi rozhodnout, že pole může zůstat prázdné.

Celá výměna

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

S přidaným e‑mailem druhé volání uspělo:

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

Dokument obsahuje třířádkovou tabulku poplatků vytvořenou pomocí <<foreach>> v řádku tabulky, částky vypočítané šablonou (<<[item.Quantity * item.UnitPrice]>>), celkovou částku 75500 EUR z items.Sum(...) a řádek „A discount of 5 percent applies.“, který existuje jen proto, že <<if>> značka našla v datech slevu. Model nic z toho nepočítal.

Je to lepší než hostovaná služba šablon?

Jedná se o jiný kompromis. Hostované služby šablon přijmou vaši šablonu a data přes HTTPS, vykreslí je ve svém cloudu a účtují za dokument nebo za kredit. Zde šablona, data i výstup zůstávají ve složce na vašem počítači; engine je GroupDocs.Assembly běžící v‑processu a nic neposlouchá na portu. To, co putuje k vašemu poskytovateli modelu, je text objednávky, který vložíte, a kostra, kterou agent vyplní, ne vykreslená smlouva. Architektura je popsána v příspěvku o on‑premise AI document processing.

Upřímná omezení

  • Režim hodnocení: každý vygenerovaný dokument začíná řádkem „Evaluation Only. Created with GroupDocs.Assembly 26.7…“, uložené sešity získají extra list a e‑mailové šablony uchovávají jen tělo v prostém textu. Licenční soubor nebo měřené klíče odstraní všechno tři.
  • Syntaxe šablony je <<[name]>>. Zástupné znaky {{name}} zůstávají jako text; get_template_fields to uvádí.
  • Šablony jsou důvěryhodný vstup: značky pro obrázky a dokumenty načtou jakoukoli cestu nebo URL, kterou jejich výraz vrátí. Připojte jeden adresář pro server.
  • Data: zapisujte je jako 2026-11-12T00:00:00 a formátujte v šabloně (<<[contract.Date]:"d MMMM yyyy">>). Pouze datum "2026-11-12" se v našem testu na stroji UTC+2 vytiskne jako 11 listopadu.
  • Agent je zdrojem dat. Požádejte ho, aby před vykreslením vypsal hodnoty, které extrahoval, a zkontrolujte je.

FAQ

Může AI agent vyplnit mou Word šablonu bez nahrávání?
Ano. Server běží lokálně přes stdio a čte šablonu ze složky, kterou nastavíte; výstup je zapsán vedle ní.

Jaké formáty může šablona mít?
Word, Excel, PowerPoint, Markdown, HTML, textové a e‑mailové šablony; každou lze uložit do vlastního formátu nebo do PDF a dalších. get_supported_formats je vypíše podle šablony.

Co když šablonu udržuje někdo jiný?
To je právě smysl. Kdo vlastní šablonu, mění klauzule a rozvržení; agent nadále vyplňuje stejnou kostru a get_template_fields mu při dalším dotazu ukáže jakékoli nové pole.

Jděte hlouběji