Minta agen AI untuk “menulis perjanjian layanan untuk Contoso” dan ia akan, dengan kata‑kata‑nya sendiri, dengan judul‑judulnya sendiri, dan dengan total yang dihitung dalam kepalanya. Itu adalah pembagian kerja yang salah. Dengan GroupDocs.Assembly.Mcp berjalan secara lokal (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor, atau Copilot menanyakan template Word Anda bidang apa yang dibutuhkan, mengisinya dari catatan Anda, dan mesin merender kontrak, tabel, dan perhitungan termasuk, tanpa model menyentuh tata letak:

Buat perjanjian layanan untuk pesanan ini menggunakan contract-template.docx dan simpan sebagai PDF: Contoso Pharma, Keizersgracht 210 Amsterdam, kontak Dr. Lena Brandt; 12 bulan hosting terkelola dengan biaya 4.800 EUR, 12 bulan dukungan dengan biaya 1.200 EUR, satu lokakarya onboarding dengan biaya 3.500 EUR; diskon 5 persen.

Versi langkah demi langkah dengan konfigurasi dan pemecahan masalah ada di dokumentasi: Cara menghasilkan dokumen dari templat dengan agen AI menggunakan MCP.

Mengapa model tidak boleh menulis dokumen?

Karena dokumen yang dihasilkan gagal dengan cara yang sulit dilihat. Tata letak menyimpang dari yang disetujui secara hukum. Sebuah klausul diparafrasekan menjadi sesuatu yang terdengar baik tetapi berarti hal lain. Total muncul dari prediksi token berikutnya alih‑alih perkalian. Dan setiap proses sedikit berbeda, sehingga tinjauan bulan lalu tidak memberi informasi apa pun tentang kontrak bulan ini.

Sebuah templat membalikkan hal itu. Bagian legal memiliki contract-template.docx, dengan judul‑judulnya, blok tanda tangan, dan tag <<[customer.Name]>>. Tugas model menyusut menjadi bagian yang dikuasainya: membaca email atau sekumpulan catatan dan mengubahnya menjadi nilai terstruktur. Mesin melakukan sisanya, dengan cara yang sama setiap kali.

Bagaimana agen mengetahui apa yang harus diisi?

Ia menanyakan templat. get_template_fields membaca tag tanpa menjalankan mesin dan mengembalikan nama‑nama yang digunakan templat, setiap bidang yang dibacanya, serta kerangka JSON untuk diisi. Inilah yang dikembalikan server untuk templat kontrak kami:

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

Kerangka itu adalah kontrak antara model dan dokumen. Agen mengisinya dari teks pesanan dan mengirimkannya kembali sebagai dataJson.

Apa yang terjadi ketika agen lupa mengisi sebuah bidang?

Ia diberi tahu secara tepat. Dalam pengujian kami, percobaan pertama agen tidak menyertakan alamat email pelanggan. Server menolak dan menyebutkan kekosongan tersebut:

-> 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 yang menulis teks bebas mungkin akan diam‑diam menghilangkan baris tersebut. Di sini agen dapat menanyakan alamat kepada Anda, atau memutuskan bersama Anda bahwa bidang tersebut dapat dibiarkan kosong.

Seluruh pertukaran

pengguna        agen                         server Assembly MCP
 | "Buat kontrak untuk pesanan ini: ..."                     |
 |-------------->|                                         |
 |               |-- get_template_fields {"template":       |
 |               |     "contract-template.docx"} ------------>|
 |               |<- dataSkeleton: contract, customer, items --|
 |               |   (mengisi kerangka dari teks pesanan)   |
 |               |-- assemble_document {"dataJson":"{...}", |
 |               |     "format":"pdf"} ---------------------->|
 |               |<- Disimpan ke: .../contract-template_      |
 |               |   assembled.pdf ---------------------------|
 |<- "Kontrak siap: 3 item, total 75500 EUR, diskon 5%."     |
   tata letak, tabel, dan perhitungan berasal dari templat

Dengan email ditambahkan, panggilan kedua berhasil:

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

Dokumen berisi tabel biaya tiga baris yang dibangun oleh <<foreach>> dalam baris tabel, jumlah yang dihitung oleh templat (<<[item.Quantity * item.UnitPrice]>>), total 75500 EUR dari items.Sum(...), dan baris “Diskon 5 persen berlaku.”, yang ada hanya karena tag <<if>> menemukan diskon dalam data. Model tidak menghitung apapun.

Apakah ini lebih baik daripada layanan templat yang dihosting?

Ini adalah pertukaran yang berbeda. Layanan templat yang dihosting mengambil templat dan data Anda melalui HTTPS, merender di cloud mereka, dan mengenakan biaya per dokumen atau per kredit. Di sini templat, data, dan output tetap berada di folder pada mesin Anda; mesin adalah GroupDocs.Assembly yang berjalan dalam proses, dan tidak ada yang mendengarkan pada port. Apa yang dikirim ke penyedia model Anda adalah teks pesanan yang Anda tempel dan kerangka yang diisi agen, bukan kontrak yang dirender. Arsitekturnya ada dalam posting keluarga di pemrosesan dokumen AI di tempat.

Batasan jujur

  • Mode evaluasi: setiap dokumen yang dihasilkan dimulai dengan baris “Evaluation Only. Created with GroupDocs.Assembly 26.7…”, buku kerja yang disimpan mendapatkan lembar kerja tambahan, dan templat email hanya menyimpan isi teks polosnya. File lisensi atau kunci bermeter menghapus ketiganya.
  • Sintaks templat adalah <<[name]>>. placeholder {{name}} dibiarkan sebagai teks; get_template_fields menyatakan hal itu.
  • Templat adalah input yang dipercaya: tag gambar dan dokumen memuat jalur atau URL apa pun yang dikembalikan oleh ekspresinya. Pasang satu folder untuk server.
  • Tanggal: tulis sebagai 2026-11-12T00:00:00 dan format dalam templat (<<[contract.Date]:"d MMMM yyyy">>). Tanggal saja "2026-11-12" dicetak sebagai 11 November pada mesin UTC+2 dalam pengujian kami.
  • Agen adalah sumber data. Minta ia untuk mencantumkan nilai‑nilai yang diekstraknya sebelum merender, dan tinjau mereka.

FAQ

Bisakah agen AI mengisi templat Word saya tanpa mengunggahnya?
Ya. Server berjalan secara lokal melalui stdio dan membaca templat dari folder yang Anda konfigurasikan; output ditulis di sampingnya.

Format apa saja yang dapat menjadi templat?
Word, Excel, PowerPoint, Markdown, HTML, teks, dan templat email; masing‑masing dapat disimpan ke formatnya sendiri atau ke PDF dan lainnya. get_supported_formats mencantumkannya per templat.

Bagaimana jika templat dipelihara oleh orang lain?
Itulah intinya. Siapa pun yang memiliki templat mengubah klausul dan tata letak; agen terus mengisi kerangka yang sama, dan get_template_fields menampilkan setiap bidang baru saat ia menanyakannya lagi.

Selami lebih dalam