“Зроби мені регіональний звіт про продажі з файлу sales.csv” — це запит, на який мовна модель охоче відповість, створивши таблицю в Markdown, округливши кілька чисел і описавши діаграму, яку вона не може намалювати. Коли локально запущено GroupDocs.Assembly.Mcp (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor або Copilot передають файл даних рушію: ваш шаблон Word або PowerPoint містить таблицю, підсумки та справжню діаграму, а сервер заповнює їх з CSV або електронної таблиці, не пропускаючи числа через модель:

Створити регіональний звіт про продажі з файлу sales.xlsx, використовуючи sales-report.docx як PDF, і слайд з діаграмою sales-chart.pptx.

Крок‑за‑кроком версія з налаштуваннями та усуненням проблем знаходиться в документації: Як створити звіт з таблицями та діаграмами з CSV або електронної таблиці за допомогою AI‑агента.

Чому числа мають обходити модель?

Тому що модель — це генератор тексту, а звіт — це арифметика плюс макет. Коли агент читає CSV і сам створює звіт, кожне значення вводиться шляхом передбачення наступного токену. Більшість виходить правильно. Той, який помилковий, залишається невидимим, доки хтось не перевірить його проти джерела, а саме це робота, яку звіт мав заощадити. Діаграми ще гірше: модель може їх описати або згенерувати код, але діаграма у вашій квартальній презентації — це об’єкт у файлі PowerPoint, оформлений маркетологом.

Тому розділіть роботу за тим, у чому кожна сторона сильна. Шаблон визначає, як виглядатиме звіт. Рушій читає файл і виконує підрахунки. Агент обирає шаблон і дані, і повідомляє вам результат.

Що передає агент, а що бачить рушій

Ось розподіл у вигляді таблиці:

the agent decides        the engine does            the template owns
-----------------------  -------------------------  -----------------------
which template           reads sales.xlsx/.csv      the table layout
which data file          types the columns          the chart and its style
output format (pdf)      sums, sorts, picks max     headings, fonts, logo
                         fills table rows, chart    what "total" means

Перед генерацією агент може переглянути файл даних. Для нашої електронної таблиці сервер повідомив про одну таблицю з трьома стовпцями:

-> get_document_info {"file":{"filePath":"sales.xlsx"}}
<- { "dataKind": "table",
     "data": { "tableCount": 1, "tables": [ { "number": 1,
       "columns": [ "Region", "Quarter", "Revenue" ] } ] } }

Табличний звіт

Шаблон Word містить один рядок таблиці з <<foreach [r in sales]>> у першій клітинці та <</foreach>> у останній, плюс два рядки під ним: <<[sales.Sum(r => r.Revenue)]>> і <<[sales.OrderByDescending(r => r.Revenue).First().Region]>>. Один виклик:

-> assemble_document {"template":{"filePath":"sales-report.docx"},
     "data":{"filePath":"sales.xlsx"},"format":"pdf"}
<- Assembled 'sales-report.docx' with 'sales.xlsx' (table 1 (3
   column(s): Region, Quarter, Revenue) as 'sales') as PDF
   Saved to: .../sales-report_assembled.pdf

Звіт містить чотири рядки (North 182000, South 146500, East 98250, West 211900), “Total revenue: 638650 EUR” і “Best region: West”. Сервер назвав дані sales, бо саме так шаблон їх перебирає; ніхто не мусив це вказувати. Той самий шаблон з sales.csv дав ті ж підсумки; для CSV параметри hasHeaders і csvDelimiter охоплюють файли без заголовка або з крапкою з комою.

Діаграма

Діаграма в шаблоні GroupDocs.Assembly — це звичайна діаграма з тегами у двох місцях. Заголовок діаграми читає Revenue by region<<foreach [r in sales]>><<x [r.Region]>>: перебір рядків, одна категорія на регіон. Назва серії читає Revenue<<y [r.Revenue]>>: одне значення на рядок. Заповнювальні дані всередині діаграми потрібні лише для того, щоб дизайнер їх бачив.

-> assemble_document {"template":{"filePath":"sales-chart.pptx"},
     "data":{"filePath":"sales.xlsx"}}
<- Assembled 'sales-chart.pptx' with 'sales.xlsx' (table 1 (3
   column(s): Region, Quarter, Revenue) as 'sales') as PPTX
   Saved to: .../sales-chart_assembled.pptx

Ми відкрили результат: стовпчаста діаграма під назвою Revenue by region, категорії North, South, East і West, значення 182000, 146500, 98250 і 211900, без тегів і зі збереженим оформленням шаблону. Ті ж теги працюють у діаграмах Word та Excel.

Чому не просити агента створити зображення діаграми?

Можна, і для одноразової відповіді в чаті це прийнятно. Для звіту це створює три проблеми: зображення — це картинка, тож ніхто не може клікнути в неї і перевірити значення; її стиль — це те, що за замовчуванням задає код побудови, а не ваш корпоративний стиль; і числа на ній проходять через модель. Шаблонна діаграма — це нативний об’єкт діаграми, заповнений з файлу, оформлений один раз тим, хто володіє шаблоном.

Чесні обмеження

  • Теги таблиці та діаграми мають вже бути в шаблоні; агент їх не створює. get_template_fields показує, які дані читає шаблон.
  • Режим оцінки: кожен вихід починається з “Evaluation Only. Created with GroupDocs.Assembly 26.7…”, а збережені книги отримують додатковий лист.
  • Список, який порожній у даних, не має типів стовпців, тому арифметика над ним не працює, навіть за наявності allowMissingMembers. Перевірте, чи фільтр, який ви задаєте, повертає рядки.
  • Шаблони презентацій у Linux потребують libgdiplus при запуску через dnx; Docker‑образ його містить.
  • Дати у файлах даних: залишайте їх у форматі дати або повному ISO з часом і форматте у шаблоні.

FAQ

Чи може AI‑агент створити діаграму з мого CSV без його завантаження?
Так. Сервер працює локально, читає CSV або електронну таблицю з вашої папки сховища і записує звіт туди; числа переходять безпосередньо з файлу в документ, не проходячи через модель.

Які файли даних може читати шаблон?
JSON, XML, CSV і TSV, а також таблицю всередині електронної таблиці, документа Word або PowerPoint; dataTable вибирає таблицю, коли їх кілька.

Чи може звіт бути файлом Excel замість PDF?
Так, використайте шаблон XLSX; теги розміщуються у клітинках листа. У режимі оцінки збережена книга отримує додатковий лист.

Поглиблене вивчення