Poproś agenta AI, aby „napisał umowę serwisową dla Contoso”, a on zrobi to własnymi słowami, własnymi nagłówkami i z sumą wyliczoną w głowie. To niewłaściwy podział pracy. Z uruchomionym lokalnie GroupDocs.Assembly.Mcp (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor lub Copilot pytają Twój szablon Word, które pola są potrzebne, wypełniają je na podstawie Twoich notatek, a silnik renderuje umowę, tabelę i obliczenia, bez ingerencji modelu w układ:
Utwórz umowę serwisową dla tego zamówienia używając contract-template.docx i zapisz ją jako PDF: Contoso Pharma, Keizersgracht 210 Amsterdam, kontakt Dr. Lena Brandt; 12 miesięcy zarządzanego hostingu za 4 800 EUR, 12 miesięcy wsparcia za 1 200 EUR, jedno warsztaty wdrożeniowe za 3 500 EUR; 5 procent zniżki.
Wersja krok po kroku z konfiguracją i rozwiązywaniem problemów znajduje się w dokumentacji: Jak generować dokumenty z szablonów przy użyciu agentów AI z MCP.
Dlaczego model nie powinien pisać dokumentu?
Ponieważ wygenerowany dokument może zawierać błędy trudne do zauważenia. Układ odchodzi od zatwierdzonego prawnie. Klauzula zostaje sparafrazowana w sposób brzmiący dobrze, ale znaczący coś innego. Suma powstaje w wyniku prognozowania kolejnego tokenu zamiast mnożenia. I każdy przebieg jest nieco inny, więc przegląd z zeszłego miesiąca nie mówi nic o umowie z tego miesiąca.
Szablon odwraca tę sytuację. Dział prawny posiada contract-template.docx, z jego nagłówkami, blokiem podpisu i tagami <<[customer.Name]>>. Zadanie modelu ogranicza się do tego, w czym jest dobry: czytania e‑maila lub zestawu notatek i przekształcania ich w wartości strukturalne. Silnik robi resztę, za każdym razem w ten sam sposób.
Jak agent wie, co wypełnić?
Pytanie kierowane jest do szablonu. get_template_fields odczytuje tagi bez uruchamiania silnika i zwraca nazwy używane w szablonie, każde pole, które odczytuje, oraz szkielet JSON do wypełnienia. Oto, co serwer zwrócił dla naszego szablonu umowy:
-> 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 } ] } }
Ten szkielet jest umową między modelem a dokumentem. Agent wypełnia go na podstawie tekstu zamówienia i odsyła jako dataJson.
Co się dzieje, gdy agent zapomni pole?
Zostaje to dokładnie zgłoszone. W naszym teście pierwsza próba agenta pominęła adres e‑mail klienta. Serwer odmówił i wskazał brak:
-> 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 generujący wolny tekst po cichu pominąłby tę linię. Tutaj agent może poprosić Cię o adres lub wspólnie z Tobą zdecydować, że pole może pozostać puste.
Cała wymiana
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
Po dodaniu e‑maila, drugie wywołanie zakończyło się sukcesem:
-> 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 zawiera trzywierszową tabelę opłat zbudowaną przy użyciu <<foreach>> w wierszu tabeli, kwoty obliczone w szablonie (<<[item.Quantity * item.UnitPrice]>>), sumę 75500 EUR pochodzącą z items.Sum(...) oraz linijkę „Obowiązuje 5 procent zniżki.”, która istnieje tylko dlatego, że tag <<if>> wykrył zniżkę w danych. Model nie obliczył nic z tego.
Czy to lepsze niż usługa szablonów hostowana?
To inny rodzaj wymiany. Usługi szablonów hostowane pobierają Twój szablon i dane przez HTTPS, renderują w chmurze i pobierają opłatę za dokument lub za kredyt. Tutaj szablon, dane i wynik pozostają w folderze na Twoim komputerze; silnik to GroupDocs.Assembly działający w procesie, i nic nie nasłuchuje na porcie. To, co trafia do dostawcy modelu, to tekst zamówienia, który wklejasz, oraz szkielet wypełniony przez agenta, a nie wyrenderowana umowa. Architektura jest opisana w poście rodzinnym o przetwarzaniu dokumentów AI on-premise.
Szczere ograniczenia
- Tryb ewaluacji: każdy wygenerowany dokument zaczyna się od linii „Evaluation Only. Created with GroupDocs.Assembly 26.7…”, zapisane skoroszyty zyskują dodatkowy arkusz, a szablony e‑mail zachowują tylko treść w formacie tekstowym. Plik licencyjny lub klucze rozliczane zużyciem usuwają wszystkie trzy elementy.
- Składnia szablonu to
<<[name]>>. Zastępniki{{name}}pozostają jako tekst;get_template_fieldstak informuje. - Szablony są zaufanym wejściem: tagi obrazu i dokumentu ładują dowolną ścieżkę lub URL zwrócony przez ich wyrażenie. Zamontuj jeden folder dla serwera.
- Daty: zapisz je jako
2026-11-12T00:00:00i formatuj w szablonie (<<[contract.Date]:"d MMMM yyyy">>). Data jedynie"2026-11-12"została wydrukowana jako 11 listopada na maszynie UTC+2 w naszym teście. - Agent jest źródłem danych. Poproś go o listę wartości, które wyodrębnił przed renderowaniem, i je przejrzyj.
FAQ
Czy agent AI może wypełnić mój szablon Word bez jego przesyłania?
Tak. Serwer działa lokalnie przez stdio i odczytuje szablon z folderu, który skonfigurujesz; wynik jest zapisywany obok niego.
Jakie formaty może mieć szablon?
Word, Excel, PowerPoint, Markdown, HTML, tekstowe i e‑mailowe szablony; każdy może być zapisany w swoim formacie lub jako PDF i inne. get_supported_formats wymienia je dla każdego szablonu.
Co jeśli szablon jest utrzymywany przez kogoś innego?
To jest sedno. Kto posiada szablon, zmienia klauzule i układ; agent nadal wypełnia ten sam szkielet, a get_template_fields pokaże mu każde nowe pole przy następnym zapytaniu.
Zagłęb się
- Dokumentacja, kanoniczny przewodnik: Jak generować dokumenty z szablonów przy użyciu agentów AI z MCP
- Z e‑maila lub notatek do dokumentu: Jak przekształcić notatki lub e‑mail w gotowy dokument przy pomocy agenta AI
- Centrum dokumentacji: GroupDocs.Assembly MCP Server
- Powiązane: Sto spersonalizowanych PDF‑ów z jednego polecenia: scalanie korespondencji z agentem AI
- Powiązane: Czego potrzebuje ten szablon? Zapytaj go.
- Powiązane: Wykres pochodzi z szablonu, liczby z danych
- Powiązane: Twoje repozytorium już zawiera dane; niech agent stworzy PDF
- Co nowego w silniku: GroupDocs.Assembly for .NET 26.7
- Model on-premise i bezpieczeństwo: 3 architektury przetwarzania dokumentów AI i ta, która trzyma pliki w Twojej sieci
- Pytania: Forum GroupDocs Assembly
- Źródło: GroupDocs.Assembly.Mcp na GitHub · Pakiet NuGet