“Make me the regional sales report from sales.csv” est une requête à laquelle un modèle de langage répondra volontiers en tapant un tableau Markdown, en arrondissant un ou deux nombres en cours de route, et en décrivant un graphique qu’il ne peut pas dessiner. Avec GroupDocs.Assembly.Mcp fonctionnant localement (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor ou Copilot remettent le fichier de données au moteur à la place : votre modèle Word ou PowerPoint contient le tableau, les totaux et un vrai graphique, et le serveur les remplit à partir du CSV ou du classeur sans que les chiffres ne passent jamais par le modèle :

Créez le rapport de ventes régional à partir de sales.xlsx avec sales-report.docx au format PDF, et la diapositive du graphique avec sales-chart.pptx.

La version étape par étape avec configuration et dépannage se trouve dans la documentation : Comment créer un rapport avec des tableaux et des graphiques à partir d’un CSV ou d’un classeur avec un agent IA.

Pourquoi les chiffres devraient-ils éviter le modèle ?

Parce qu’un modèle est un générateur de texte, et qu’un rapport est de l’arithmétique plus de la mise en page. Lorsqu’un agent lit un CSV et rédige le rapport lui‑même, chaque valeur est retapée par prédiction du prochain token. La plupart sont correctes. Celle qui ne l’est pas reste invisible jusqu’à ce que quelqu’un la vérifie par rapport à la source, ce qui est exactement le travail que le rapport était censé économiser. Les graphiques sont encore pires : le modèle peut en décrire un, ou émettre du code pour en créer un, mais le graphique de votre présentation trimestrielle est un objet dans un fichier PowerPoint, stylisé par quelqu’un du marketing.

Il faut donc répartir le travail selon les points forts de chaque côté. Le modèle détermine l’apparence du rapport. Le moteur lit le fichier et effectue les calculs. L’agent choisit le modèle et les données, et vous indique le résultat.

Ce que l’agent transmet, et ce que le moteur voit

Voici la répartition dans un tableau :

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

Avant de générer, l’agent peut examiner le fichier de données. Pour notre classeur, le serveur a signalé un tableau avec trois colonnes :

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

Le rapport sous forme de tableau

Le modèle Word possède une ligne de tableau avec <<foreach [r in sales]>> dans sa première cellule et <</foreach>> dans la dernière, plus deux lignes en dessous : <<[sales.Sum(r => r.Revenue)]>> et <<[sales.OrderByDescending(r => r.Revenue).First().Region]>>. Un appel :

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

Le rapport comporte quatre lignes (North 182 000, South 146 500, East 98 250, West 211 900), « Total revenue : 638 650 EUR » et « Best region : West ». Le serveur a nommé les données sales parce que c’est ce que le modèle parcourt ; personne n’a eu besoin de le préciser. Le même modèle avec sales.csv a donné les mêmes totaux ; pour le CSV, hasHeaders et csvDelimiter couvrent les fichiers sans ligne d’en‑tête ou avec des points‑virgules.

Le graphique

Un graphique dans un modèle GroupDocs.Assembly est un graphique ordinaire avec des balises à deux endroits. Le titre du graphique lit Revenue by region<<foreach [r in sales]>><<x [r.Region]>> : boucle sur les lignes, une catégorie par région. Le nom de la série lit Revenue<<y [r.Revenue]>> : une valeur par ligne. Les données factices à l’intérieur du graphique ne servent qu’à ce que le concepteur puisse les voir.

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

Nous avons ouvert le résultat : un graphique en colonnes intitulé Revenue by region, catégories North, South, East et West, valeurs 182 000, 146 500, 98 250 et 211 900, les balises supprimées et le style du modèle intact. Les mêmes balises fonctionnent dans les graphiques Word et Excel.

Pourquoi ne pas demander à l’agent une image du graphique ?

Vous pouvez le faire, et pour une réponse ponctuelle dans le chat c’est acceptable. Pour un rapport, cela pose trois problèmes : l’image est une photo, donc personne ne peut cliquer dessus pour vérifier une valeur ; son style est celui du code de traçage par défaut, pas votre charte graphique ; et les nombres qui y figurent sont passés par le modèle. Un graphique de modèle est un objet graphique natif, rempli à partir du fichier, stylisé une fois par le propriétaire du modèle.

Limites honnêtes

  • Les balises de tableau et de graphique doivent déjà être présentes dans le modèle ; l’agent ne les conçoit pas. get_template_fields montre quelles données le modèle lit.
  • Mode d’évaluation : chaque sortie commence par « Evaluation Only. Created with GroupDocs.Assembly 26.7… », et les classeurs enregistrés gagnent une feuille de calcul supplémentaire.
  • Une liste vide dans les données n’a aucun type de colonne, donc l’arithmétique échoue, même avec allowMissingMembers. Vérifiez que le filtre demandé renvoie des lignes.
  • Les modèles de présentation sous Linux nécessitent libgdiplus lorsqu’ils sont exécutés via dnx ; l’image Docker l’inclut.
  • Dates dans les fichiers de données : conservez‑les en tant que dates ou ISO complet avec heure, et formatez‑les dans le modèle.

FAQ

Un agent IA peut‑il créer un graphique à partir de mon CSV sans le télécharger ?
Oui. Le serveur fonctionne localement, lit le CSV ou le classeur depuis votre dossier de stockage et écrit le rapport à cet endroit ; les nombres passent du fichier au document sans transiter par le modèle.

Quels fichiers de données le modèle peut‑il lire ?
JSON, XML, CSV et TSV, ainsi qu’un tableau à l’intérieur d’un classeur, d’un document Word ou PowerPoint ; dataTable sélectionne le tableau lorsqu’il y en a plusieurs.

Le rapport peut‑il être un fichier Excel au lieu d’un PDF ?
Oui, utilisez un modèle XLSX ; les balises sont placées dans les cellules de la feuille. En mode d’évaluation, le classeur enregistré gagne une feuille supplémentaire.

Approfondir