“یک گزارش فروش منطقه‌ای از 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 یا صفحه‌گسترده با یک عامل هوش مصنوعی بسازیم.

چرا باید اعداد از مدل عبور نکنند؟

چون یک مدل فقط تولید متن است و یک گزارش ترکیبی از محاسبات ریاضی و چیدمان است. وقتی یک عامل 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. اطمینان حاصل کنید فیلتر درخواست‌شده ردیف‌هایی برمی‌گرداند.
  • قالب‌های ارائه در لینوکس هنگام اجرا از طریق dnx به libgdiplus نیاز دارند؛ تصویر Docker آن را شامل می‌شود.
  • تاریخ‌ها در فایل‌های داده: آن‌ها را به صورت تاریخ یا ISO کامل با زمان نگه دارید و در قالب فرمت کنید.

پرسش‌های متداول

آیا یک عامل هوش مصنوعی می‌تواند بدون بارگذاری CSV، نمودار بسازد؟
بله. سرور به‌صورت محلی اجرا می‌شود، CSV یا صفحه‌گسترده را از پوشه ذخیره‌سازی شما می‌خواند و گزارش را در همانجا می‌نویسد؛ اعداد از فایل به سند می‌روند بدون اینکه از طریق مدل عبور کنند.

قالب می‌تواند چه نوع فایل‌های داده‌ای را بخواند؟
JSON، XML، CSV و TSV، و یک جدول داخل صفحه‌گسترده، سند Word یا PowerPoint؛ dataTable جدول را وقتی چندین جدول وجود دارد، انتخاب می‌کند.

آیا می‌توان گزارش را به‌جای PDF به صورت فایل Excel دریافت کرد؟
بله، از قالب XLSX استفاده کنید؛ تگ‌ها در سلول‌های شیت کاری قرار می‌گیرند. در حالت ارزیابی کتاب‌کار ذخیره‌شده یک شیت کاری اضافه می‌گیرد.

عمیق‌تر شوید