“Make me the regional sales report from sales.csv” là một yêu cầu mà mô hình ngôn ngữ sẽ vui vẻ trả lời bằng cách gõ một bảng Markdown, làm tròn một hoặc hai số trong quá trình, và mô tả một biểu đồ mà nó không thể vẽ. Khi GroupDocs.Assembly.Mcp chạy cục bộ (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor hoặc Copilot sẽ chuyển tệp dữ liệu cho engine thay vì: mẫu Word hoặc PowerPoint của bạn chứa bảng, tổng số và một biểu đồ thực, và máy chủ sẽ điền chúng từ CSV hoặc bảng tính mà không có bất kỳ số nào đi qua mô hình:

Xây dựng báo cáo bán hàng khu vực từ sales.xlsx với sales-report.docx thành PDF, và slide biểu đồ với sales-chart.pptx.

Phiên bản từng bước với cấu hình và khắc phục sự cố có trong tài liệu: Cách xây dựng báo cáo với bảng và biểu đồ từ tệp CSV hoặc bảng tính bằng một AI agent.

Tại sao số liệu lại phải bỏ qua mô hình?

Bởi vì mô hình là một trình tạo văn bản, còn báo cáo là phép tính cộng trừ cộng thêm bố cục. Khi một agent đọc CSV và tự viết báo cáo, mọi giá trị đều được gõ lại bằng dự đoán token tiếp theo. Hầu hết đều đúng. Giá trị sai sẽ không hiện ra cho tới khi ai đó kiểm tra với nguồn, chính là công việc mà báo cáo dự định tiết kiệm. Biểu đồ còn tệ hơn: mô hình có thể mô tả một biểu đồ, hoặc tạo mã cho một biểu đồ, nhưng biểu đồ trong bản trình bày quý của bạn là một đối tượng trong tệp PowerPoint, được thiết kế bởi người trong bộ phận marketing.

Vì vậy hãy chia công việc dựa trên điểm mạnh của mỗi bên. Mẫu quyết định báo cáo sẽ trông như thế nào. Engine đọc tệp và thực hiện tính toán. Agent chọn mẫu và dữ liệu, và cho bạn biết kết quả.

Những gì agent truyền, và những gì engine nhìn thấy

Dưới đây là sự phân chia trong một bảng:

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

Trước khi tạo, agent có thể xem tệp dữ liệu. Đối với bảng tính của chúng tôi, máy chủ báo cáo một bảng có ba cột:

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

Báo cáo dạng bảng

Mẫu Word có một hàng bảng với <<foreach [r in sales]>> trong ô đầu tiên và <</foreach>> trong ô cuối cùng, cộng hai dòng phía dưới: <<[sales.Sum(r => r.Revenue)]>> và <<[sales.OrderByDescending(r => r.Revenue).First().Region]>>. Một lời gọi:

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

Báo cáo có bốn hàng (North 182000, South 146500, East 98250, West 211900), “Total revenue: 638650 EUR” và “Best region: West”. Máy chủ đặt tên dữ liệu là sales vì đó là tên mà mẫu lặp lại; không ai cần phải nói như vậy. Cùng một mẫu với sales.csv cho ra cùng tổng số; đối với CSV, hasHeaders và csvDelimiter hỗ trợ các tệp không có hàng tiêu đề hoặc có dấu chấm phẩy.

Biểu đồ

Một biểu đồ trong mẫu GroupDocs.Assembly là một biểu đồ thông thường với các thẻ ở hai vị trí. Tiêu đề biểu đồ là Revenue by region<<foreach [r in sales]>><<x [r.Region]>>: lặp qua các hàng, mỗi khu vực một danh mục. Tên chuỗi là Revenue<<y [r.Revenue]>>: một giá trị cho mỗi hàng. Dữ liệu placeholder bên trong biểu đồ chỉ để nhà thiết kế có thể nhìn thấy.

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

Chúng tôi mở kết quả: một biểu đồ cột có tiêu đề Revenue by region, các danh mục North, South, East và West, giá trị 182000, 146500, 98250 và 211900, các thẻ đã biến mất và kiểu dáng của mẫu vẫn nguyên vẹn. Các thẻ tương tự cũng hoạt động trong biểu đồ Word và Excel.

Tại sao không yêu cầu agent tạo hình ảnh biểu đồ?

Bạn có thể làm, và đối với một câu trả lời một lần trong chat thì điều đó ổn. Đối với báo cáo, nó gặp ba vấn đề: hình ảnh là một bức tranh, nên không ai có thể nhấp vào và kiểm tra giá trị; phong cách của nó là mặc định của mã vẽ, không phải phong cách nội bộ của bạn; và các số trên đó đã đi qua mô hình. Một biểu đồ mẫu là một đối tượng biểu đồ gốc, được điền từ tệp, được định dạng một lần bởi người sở hữu mẫu.

Giới hạn trung thực

  • Các thẻ bảng và biểu đồ phải đã có trong mẫu; agent không thiết kế chúng. get_template_fields cho biết mẫu đọc dữ liệu nào.
  • Chế độ đánh giá: mọi đầu ra bắt đầu bằng “Evaluation Only. Created with GroupDocs.Assembly 26.7…”, và các workbook đã lưu sẽ có thêm một worksheet.
  • Một danh sách trống trong dữ liệu không có kiểu cột, vì vậy các phép tính số học trên nó sẽ thất bại, ngay cả khi dùng allowMissingMembers. Kiểm tra bộ lọc bạn yêu cầu có trả về các hàng hay không.
  • Các mẫu trình chiếu trên Linux cần libgdiplus khi chạy qua dnx; Docker image đã bao gồm nó.
  • Ngày trong tệp dữ liệu: giữ chúng dưới dạng ngày hoặc ISO đầy đủ có thời gian, và định dạng chúng trong mẫu.

Câu hỏi thường gặp

AI agent có thể tạo biểu đồ từ CSV của tôi mà không tải lên không?
Có. Máy chủ chạy cục bộ, đọc CSV hoặc bảng tính từ thư mục lưu trữ của bạn và ghi báo cáo ở đó; các số đi thẳng từ tệp vào tài liệu mà không qua mô hình.

Mẫu có thể đọc những loại tệp dữ liệu nào?
JSON, XML, CSV và TSV, và một bảng bên trong bảng tính, tài liệu Word hoặc PowerPoint; dataTable chọn bảng khi có nhiều bảng.

Báo cáo có thể là tệp Excel thay vì PDF không?
Có, dùng mẫu XLSX; các thẻ sẽ đặt vào các ô worksheet. Trong chế độ đánh giá, workbook đã lưu sẽ có thêm một worksheet.

Đi sâu hơn