当前位置: 首页 > news >正文

让 Agent 用自然语言生成 echarts 图表

结论先放:想让用户用一句话"画个上半年销量柱状图"就出图,最稳的路子:别让模型直接吐图片,让它生成一段 echarts 的 option 配置 JSON,前端拿去渲染。我这么干之后,出图准、可交互、还能改。下面是实操。

思路

模型不擅长直接画图,但很擅长写结构化的 JSON。echarts 的图表本质就是一个 option 对象。所以链路是:

  1. 用户说"画个柱状图,横轴月份纵轴销量"

  2. 后端先把对应的数据查出来

  3. 把数据 + 用户意图喂给模型,让它吐一段 echarts option

  4. 前端myChart.setOption(option)渲染

模型只管生成配置,数据由代码可靠地准备好,各管一段。

关键:别让模型同时编数据

我犯过的最大错误,是把"查数据"和"生成图表"揉给模型一起干。结果模型为了图表好看,把销量数字给我编圆润了——明明真实数据是 3271,它生成的 option 里写了个 3000。

改法:数据必须由代码查好,作为既定事实喂给模型,模型只负责把数据填进 option 结构里,一个数字都不许动。prompt 里我专门强调了这句:

以下是已查询好的真实数据,请严格使用,不得修改任何数值: { "月份": ["1月","2月","3月","4月","5月","6月"], "销量": [3271, 2980, 4102, 3855, 5021, 4760] } 请生成 echarts 柱状图的 option 配置,JSON 格式, xAxis 用月份,yAxis 用销量,只输出 JSON,不要解释。

模型回我的就是一段能直接 setOption 的配置:

{ "xAxis": { "type": "category", "data": ["1月","2月","3月","4月","5月","6月"] }, "yAxis": { "type": "value" }, "series": [{ "type": "bar", "data": [3271, 2980, 4102, 3855, 5021, 4760] }] }

落地

我是在一个能拖低代码工作流的平台上搭的:第一个节点查数据,第二个节点让模型生成 option,出口把这段 JSON 返给前端。前端那边固定一个渲染容器,拿到 JSON 就 setOption。换图表类型(柱状改折线)也简单,改下 prompt 里那句类型描述就行,模型自己会调整 series.type。

两个踩过的坑

坑一:模型爱画蛇添足。不加约束的话,它会自作主张加一堆 title、legend、tooltip 的花活,有时还把字段名拼错导致渲染报错。我在 prompt 里写死"只输出我要的 xAxis/yAxis/series 三块,其余别加",出错率才降下来。

坑二:JSON 里混进解释文字。模型偶尔会在 JSON 前后带一句"好的,这是您要的配置",前端 JSON.parse 直接崩。我的处理是用正则把第一个{到最后一个}抠出来再 parse,加了这道兜底就稳了。

收尾

这套跑顺之后,运营自己用大白话就能让 Agent 出图,不用再找前端排期。遗憾是复杂图表(双轴、堆叠、混合类型)模型生成的 option 还不够稳,大概七八成能一次画对,剩下的得人工修配置。简单的柱状、折线、饼图基本免修。

模型那层我直接用讯飞星辰的大模型 API,现成服务调用,没自建算力,把心思都放在打磨这套"数据归代码、配置归模型"的分工上了。

http://www.jsqmd.com/news/1071568/

相关文章:

  • 【课程设计/毕业设计】基于django的智能控糖食物管理系统的设计与实现【附源码、数据库、万字文档】
  • Flink状态后端:HashMap与RocksDB
  • 【Rust Lint 精讲:从 deny 到 forbid,一文搞定代码硬约束】
  • 【无人机路径规划】基于深度强化学习的多无人机移动边缘计算路径规划附matlab复现
  • 零基础入门 Codex:从聊天机器人到真正能执行任务的 AI Agent
  • Python+VSCode 网安开发环境双平台搭建实训讲义
  • AI编程一年后,我还记得怎么手写代码吗?答案让我沉默了
  • 学生视角下的技术探索:扫雷、Gitee、Qoder与微信小程序初体验总结
  • AI新时代下的图床管理方案-Cloudflare图床+MCP+Skills方案指南
  • 2026年TOP5广西花生油品牌:传统压榨工艺哪家强?
  • 单表五亿数据的查询优化 | Mysql、StarRocks
  • 最新mpay码支付系统源码+监听app完美可用改版
  • openclaw不存在?Ubuntu 22.04下安全替代方案指南
  • Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模
  • VB6.0下载安装教程(附安装包)2026最新版(Visual Basic 6.0中文企业版)
  • 区间预测 | Matlab实现OOA-BP-KDE核密度估计多置信区间多变量回归区间预测
  • 【免费数据】2012和2020年中国1km分辨率POI密度栅格数据
  • 人工智能和大数据专业,填报时怎么区分取舍
  • 前端状态持久化
  • 按照这个方法真的领到了8元,超简单,实打实的,可点奶茶外卖.千问无门槛优惠券 大数据推给有需要的人,下载千问,输入口令:千问新用户专属876028,就可以领取啦
  • MATLAB稳健性设计:从不确定性量化到可变性优化实战
  • 大数据、计算机科学、软件工程三者该如何择校
  • 公考时政常识|公务员备考时政|每月时政热点汇总
  • 列车-轨道-桥梁交互仿真研究附Matlab代码
  • 华为MetaERP SAP FI-AA vs Oracle EBS FA:资产期间关闭可逆 / 不可逆 —— 设计哲学 + 底层实现逻辑完整对比一、核心现象先明确边界SAP FI-AA(资产会计)
  • 安全的即时通讯软件原理与设计的调研报告
  • 基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究附Matlab代码
  • Rust的匹配中的编译器技术
  • VSCode 插件推荐:让你编码效率翻倍
  • Agent常见面试题目