【天翼AI-星辰智能体平台】| 基于Excel表搭建智能问数助手智能体开发实战
<style>pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !important; line-height: 1.6 !important; padding: 16px !important; margin: 16px 0 !important; background-color: rgba(248, 248, 248, 1) !important; border: 1px solid rgba(225, 228, 232, 1) !important; border-radius: 6px !important; tab-size: 4 !important; -moz-tab-size: 4 !important; max-width: 100% !important; box-sizing: border-box !important }code { font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow-wrap: normal !important; display: inline !important; background: rgba(0, 0, 0, 0) !important; border: none !important; padding: 0 !important; margin: 0 !important; line-height: inherit !important }
pre code { background: rgba(0, 0, 0, 0) !important; border: 0 !important; border-radius: 0 !important; display: block !important; line-height: 1.6 !important; margin: 0 !important; max-width: none !important; overflow: visible !important; padding: 0 !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; color: inherit !important }
.token.comment, .token.prolog, .token.doctype, .token.cdata { color: rgba(112, 128, 144, 1) !important; font-style: italic !important }
.token.punctuation { color: rgba(153, 153, 153, 1) !important }
.token.atrule, .token.attr-value, .token.keyword { color: rgba(0, 119, 170, 1) !important; font-weight: bold !important }
.token.function, .token.class-name { color: rgba(221, 74, 104, 1) !important; font-weight: bold !important }
.token.selector, .token.attr-name, .token.string, .token.char, .token.builtin, .token.inserted { color: rgba(102, 153, 0, 1) !important }
.token.property, .token.tag, .token.boolean, .token.number, .token.constant, .token.symbol, .token.deleted { color: rgba(153, 0, 85, 1) !important }
.cnblogs-markdown pre, .cnblogs-post-body pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; background-color: rgba(248, 248, 248, 1) !important; border: 1px solid rgba(225, 228, 232, 1) !important; border-radius: 6px !important; padding: 16px !important; margin: 16px 0 !important }
pre, pre, pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important }</style>
<div class="markdown_views prism-tomorrow-night-eighties" id="content_views"><svg style="display: none" xmlns="http://www.w3.org/2000/svg"><path d="M5,0 0,2.5 5,5z" id="raphael-marker-block" stroke-linecap="round" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path></svg><p></p><div class="toc"><h4>目录</h4><ul><li>一.写在前面</li><li>二.搭建流程</li><li><ul><li>2.1 总体工作流展示</li><li>2.2 外部工作流搭建流程</li><li><ul><li>2.2.1 方案一—pandas + 规则解析 + 字段RAG 混合问数</li><li>2.2.2 方案二—Text2SQL方案</li></ul></li><li>2.3 表格展示构建实现</li><li>2.4 图表展示构建实现</li><li>2.5 其它环节</li></ul></li><li>三.写在最后</li></ul></div><p></p><center><img alt="权限管理" src="https://img-blog.csdnimg.cn/299da6849a844e6881a91ce15d16239c.gif#pic_center"></center><h2>一.写在前面</h2><p>今天,狮子使用中国电信的智能体平台——星辰智能体平台,搭建一个基于Excel表格问数的工作流,给了两张表(一张用户个人画像表(大概120多个字段),一张订单表(大概四个个字段)),一共两万条数据,现在要做根据自然语言问数,需要返回的数据形式有多种:分别是表格、柱状图、饼图、折线图这几种。<br> 看了一下这个平台,因为神态酷似dify,但是确实插件比较少,给的数据源数据量较大,所以决定采用外部实现一个智能体用于处理数据和提供接口,在平台http接口的形式调用,在平台内实现图表和表格生成(尽力了,真不知道在平台怎么处理这个数据源)。<br> 现在狮子来回忆一波捏这个工作流的步骤,并且分享一下在平台上实现图表的教程!!!</p><h2>二.搭建流程</h2><h3>2.1 总体工作流展示</h3><p><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/2cf06b361c7b4920b6578f30a89ff8db.png"></p><h3>2.2 外部工作流搭建流程</h3><p>这个外部工作流的作用是查询数据源,并且返回用户需要的数据!数据源格式如下:<br><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/58e853c2d4b7411abf21bd705487068d.png"><br> 实现该流程的方案有两种。</p><h4>2.2.1 方案一—pandas + 规则解析 + 字段RAG 混合问数</h4><p>第一种方案就是利用pandas解析Excel表格的便捷性,将问题中的筛选条件提取出来标准化,再去Rag数据库那里检索最相关的字段说明,将检索结果与统计摘要拼成prompt交给大模型生成简短关联分析,同时通过pandas根据字段筛选出相应的数据,通过接口返回。具体流程如下:<br><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/46fdd7b0ef8f4a139b387dc88becca5d.png"></p><blockquote><p>ps:<br> 狮子选择该种方法实现问数,因为时间有点急,数据库处理很麻烦。</p></blockquote><h4>2.2.2 方案二—Text2SQL方案</h4><p>方案二则是将Excel的数据导入到数据库(可以选择SQLite)中,然后构建Rag向量库。用户输入问题后,先去知识库筛选对应的表信息,再封装成Prompt提交给大模型,让大模型帮忙生成对应的SQL,具体实现可以参考以下流程图:<br><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/36469690ebfe44d4a0455b41e016266d.png"></p><blockquote><p>ps:<br> 这里后续还会有具体的文章来说明!</p></blockquote><h3>2.3 表格展示构建实现</h3><p>如果用户的问题是返回对应的列表时,则需要展示时使用表格的方式呈现,这个其实很好实现,因为智能体平台一般都支持Markdow语法的数据展示,所以直接将得到的数据通过大模型转化为表格的语法,输出则是表格的形式。这个我们通过规定的提示词给大模型则可以实现,提示词如下:</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code class="prism language-bash"><span class="token number">1</span>. 接收<span class="token punctuation">{</span><span class="token punctuation">{</span>output<span class="token comment">#}}内容并检查其是否为空。</span>
<span class="token number">2</span>. 如果输入内容为空,输出“未查询到结果请调整查询话术”。
<span class="token number">3</span>. 如果输入内容不为空,将提取的<span class="token punctuation">{</span><span class="token punctuation">{</span>output<span class="token comment">#}}整理成表格,同时汇总数量。简洁输出</span></code></pre>
<p><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/8113b7feb3734ba88f62aeb640abc4f7.png"></p><h3>2.4 图表展示构建实现</h3><blockquote><p>ps:<br> 这一步之所以能实现,完全是因为平台支持Echarts的md格式,当平台的前端界面识别到这个由三个反引号包裹、并标记为<code>echarts</code>的代码块时,便会自动将其渲染为交互式图表</p></blockquote><p>图表展示这块,我们肯定使用熟悉的Echarts组件库,官网地址如下:https://echarts.apache.org/examples/zh/index.html,在官网我们可以看到其实每种图都有一个代码模板的,比如折线图:</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code class="prism language-javascript"><span class="token punctuation">{</span>
<span class="token string">"title"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"text"</span><span class="token operator">:</span> <span class="token string">"{{ CHART_TITLE | default('Chart') }}"</span><span class="token punctuation">,</span>
<span class="token string">"left"</span><span class="token operator">:</span> <span class="token string">"center"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"tooltip"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"trigger"</span><span class="token operator">:</span> <span class="token string">"axis"</span><span class="token punctuation">,</span>
<span class="token string">"axisPointer"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token operator">:</span> <span class="token string">"cross"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"formatter"</span><span class="token operator">:</span> <span class="token string">"{b} : {c}"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"xAxis"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token operator">:</span> <span class="token string">"category"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> data<span class="token punctuation">.</span>labels <span class="token operator">|</span> tojson <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"boundaryGap"</span><span class="token operator">:</span> <span class="token boolean">false</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"yAxis"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token operator">:</span> <span class="token string">"value"</span><span class="token punctuation">,</span>
<span class="token string">"name"</span><span class="token operator">:</span> <span class="token string">"{{ Y_AXIS_NAME | default('Y') }}"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"series"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span>
<span class="token string">"name"</span><span class="token operator">:</span> <span class="token string">"{{ SERIES_NAME | default('Series') }}"</span><span class="token punctuation">,</span>
<span class="token string">"type"</span><span class="token operator">:</span> <span class="token string">"line"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> data<span class="token punctuation">.</span>values <span class="token operator">|</span> tojson <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"smooth"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
<span class="token string">"lineStyle"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"color"</span><span class="token operator">:</span> <span class="token string">"rgba(54, 162, 235, 1)"</span><span class="token punctuation">,</span>
<span class="token string">"width"</span><span class="token operator">:</span> <span class="token number">2</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"itemStyle"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"color"</span><span class="token operator">:</span> <span class="token string">"rgba(54, 162, 235, 0.8)"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"areaStyle"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token string">"color"</span><span class="token operator">:</span> <span class="token string">"rgba(54, 162, 235, 0.1)"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span></code></pre>
<p>我们每次只要将不同的数据填充进来,就能都得到不同数据的折线图,但是我们通过接口传过来的数据是json字符串,那应该如何将这个数据填充进Echarts模板呢?<br> 这时候可以使用到大模型来帮我们完成,需要编写一段提示词,将json的数据对象提取出来交给大模型,大模型就会根据提示词将数据给我们格式化为Echarts代码。提示词如下:</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code class="prism language-powershell">你是一个专业的ECharts数据可视化专家。根据用户提供的数据,使用提供给您的模板,生成标准的折线图ECharts配置。
用户数据:<span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token comment">#1765639035525.chart_data#}}</span>
提供给您的模板:
<span class="token string">"
# 折线图模板
适用场景:展示数据随时间的变化趋势
模板代码:
```json
{
"</span>title<span class="token string">": {
"</span>text<span class="token string">": "</span><span class="token punctuation">{</span><span class="token punctuation">{</span> CHART_TITLE <span class="token punctuation">|</span> default<span class="token punctuation">(</span><span class="token string">'Chart'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token string">",
"</span>left<span class="token string">": "</span>center<span class="token string">"
},
"</span>tooltip<span class="token string">": {
"</span>trigger<span class="token string">": "</span>axis<span class="token string">",
"</span>axisPointer<span class="token string">": {
"</span><span class="token function">type</span><span class="token string">": "</span>cross<span class="token string">"
},
"</span>formatter<span class="token string">": "</span><span class="token punctuation">{</span>b<span class="token punctuation">}</span> : <span class="token punctuation">{</span>c<span class="token punctuation">}</span><span class="token string">"
},
"</span>xAxis<span class="token string">": {
"</span><span class="token function">type</span><span class="token string">": "</span>category<span class="token string">",
"</span><span class="token keyword">data</span><span class="token string">": {{ data.labels | tojson }},
"</span>boundaryGap<span class="token string">": false
},
"</span>yAxis<span class="token string">": {
"</span><span class="token function">type</span><span class="token string">": "</span>value<span class="token string">",
"</span>name<span class="token string">": "</span><span class="token punctuation">{</span><span class="token punctuation">{</span> Y_AXIS_NAME <span class="token punctuation">|</span> default<span class="token punctuation">(</span><span class="token string">'Y'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token string">"
},
"</span>series<span class="token string">": [{
"</span>name<span class="token string">": "</span><span class="token punctuation">{</span><span class="token punctuation">{</span> SERIES_NAME <span class="token punctuation">|</span> default<span class="token punctuation">(</span><span class="token string">'Series'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token string">",
"</span><span class="token function">type</span><span class="token string">": "</span>line<span class="token string">",
"</span><span class="token keyword">data</span><span class="token string">": {{ data.values | tojson }},
"</span>smooth<span class="token string">": true,
"</span>lineStyle<span class="token string">": {
"</span>color<span class="token string">": "</span>rgba<span class="token punctuation">(</span>54<span class="token punctuation">,</span> 162<span class="token punctuation">,</span> 235<span class="token punctuation">,</span> 1<span class="token punctuation">)</span><span class="token string">",
"</span>width<span class="token string">": 2
},
"</span>itemStyle<span class="token string">": {
"</span>color<span class="token string">": "</span>rgba<span class="token punctuation">(</span>54<span class="token punctuation">,</span> 162<span class="token punctuation">,</span> 235<span class="token punctuation">,</span> 0<span class="token punctuation">.</span>8<span class="token punctuation">)</span><span class="token string">"
},
"</span>areaStyle<span class="token string">": {
"</span>color<span class="token string">": "</span>rgba<span class="token punctuation">(</span>54<span class="token punctuation">,</span> 162<span class="token punctuation">,</span> 235<span class="token punctuation">,</span> 0<span class="token punctuation">.</span>1<span class="token punctuation">)</span><span class="token string">"
}
}]
}
## 关键点说明:
- 数据输入结构
- 使用 data.labels 和 data.values 两组数据来驱动 X 轴时间数据和折线的数值。
- data.labels 与 data.values 的长度应一致,确保一一对应。
- 默认值与容错
- CHART_TITLE 使用 default('Chart'),如果未提供就显示“Chart”。
- Y_AXIS_NAME 使用 default('Y'),SERIES_NAME 使用 default('Series')。
- 数据通过 tojson 安全渲染,避免 JSON 转义问题。
- 单/多线扩展
- 该模板当前设计为单系列折线图;若未来需要多系列,可以在 series 中添加更多对象,并把数据结构调整为多组 data.values(或提供一个 series_list)。
- 显示与样式
- smooth 设置为 true,呈现平滑曲线。
- areaStyle 提供区域填充,颜色为浅蓝色调,便于对比趋势。
- xAxis 的 boundaryGap 设置为 false,便于时间序列数据紧贴边界显示。
- 语言一致性
- 演示中的占位符名为英文,默认文本也尽量使用英文;实际显示文本可按需要由数据源提供英文或翻译后文本。
"</span>
请严格按以下步骤操作:
1<span class="token punctuation">.</span> 从检索结果中选择最匹配的图表模板
2<span class="token punctuation">.</span> 将用户数据按ECharts标准格式填入占位符
3<span class="token punctuation">.</span> 输出完整且可直接使用的ECharts option配置
输出要求:
<span class="token operator">-</span> 必须输出标准的ECharts option JSON格式
<span class="token operator">-</span> 所有占位符<span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">}</span>必须被实际数据替换
<span class="token operator">-</span> 确保JSON语法完全正确,可直接用于echarts<span class="token punctuation">.</span>setOption<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">-</span> 数据格式严格遵循ECharts规范:
<span class="token operator">*</span> 字符串用双引号包围
<span class="token operator">*</span> 数组格式正确:<span class="token punctuation">[</span><span class="token string">"item1"</span><span class="token punctuation">,</span> <span class="token string">"item2"</span><span class="token punctuation">]</span>
<span class="token operator">*</span> 数值不加引号:<span class="token punctuation">[</span>100<span class="token punctuation">,</span> 200<span class="token punctuation">,</span> 300<span class="token punctuation">]</span>
<span class="token operator">-</span> 图表标题简洁明了,符合数据内容
输出格式示例:
echarts
<span class="token punctuation">{</span>
<span class="token string">"title"</span>: <span class="token punctuation">{</span>
<span class="token string">"text"</span>: <span class="token string">"Monthly Sales Data"</span><span class="token punctuation">,</span>
<span class="token string">"left"</span>: <span class="token string">"center"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"tooltip"</span>: <span class="token punctuation">{</span>
<span class="token string">"trigger"</span>: <span class="token string">"axis"</span><span class="token punctuation">,</span>
<span class="token string">"axisPointer"</span>: <span class="token punctuation">{</span>
<span class="token string">"type"</span>: <span class="token string">"cross"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"formatter"</span>: <span class="token string">"{b} : {c}"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"xAxis"</span>: <span class="token punctuation">{</span>
<span class="token string">"type"</span>: <span class="token string">"category"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span>: <span class="token punctuation">[</span><span class="token string">"January"</span><span class="token punctuation">,</span> <span class="token string">"February"</span><span class="token punctuation">,</span> <span class="token string">"March"</span><span class="token punctuation">,</span> <span class="token string">"April"</span><span class="token punctuation">,</span> <span class="token string">"May"</span><span class="token punctuation">,</span> <span class="token string">"June"</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">"boundaryGap"</span>: false
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"yAxis"</span>: <span class="token punctuation">{</span>
<span class="token string">"type"</span>: <span class="token string">"value"</span><span class="token punctuation">,</span>
<span class="token string">"name"</span>: <span class="token string">"Sales Amount"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"series"</span>: <span class="token punctuation">[</span><span class="token punctuation">{</span>
<span class="token string">"name"</span>: <span class="token string">"Sales"</span><span class="token punctuation">,</span>
<span class="token string">"type"</span>: <span class="token string">"line"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span>: <span class="token punctuation">[</span>120<span class="token punctuation">,</span> 200<span class="token punctuation">,</span> 150<span class="token punctuation">,</span> 300<span class="token punctuation">,</span> 250<span class="token punctuation">,</span> 400<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">"smooth"</span>: true<span class="token punctuation">,</span>
<span class="token string">"lineStyle"</span>: <span class="token punctuation">{</span>
<span class="token string">"color"</span>: <span class="token string">"rgba(54, 162, 235, 1)"</span><span class="token punctuation">,</span>
<span class="token string">"width"</span>: 2
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"itemStyle"</span>: <span class="token punctuation">{</span>
<span class="token string">"color"</span>: <span class="token string">"rgba(54, 162, 235, 0.8)"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"areaStyle"</span>: <span class="token punctuation">{</span>
<span class="token string">"color"</span>: <span class="token string">"rgba(54, 162, 235, 0.1)"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>
注意:输出的JSON必须能够直接复制粘贴到ECharts中使用,不允许有任何语法错误。</code></pre>
<p>这样就可以将我们的数据转换成Echarts的格式了,但是到这里还不行,我们还需要将大模型生成的代码整理成md格式的代码,这里就直接使用代码来处理了,具体代码示例如下:</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code class="prism language-python"><span class="token keyword">import</span> json
<span class="token keyword">def</span> <span class="token function">main</span><span class="token punctuation">(</span>option<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token comment"># 如果没有传入 option,给一个默认版本(中文文本示例)</span>
<span class="token keyword">if</span> option <span class="token keyword">is</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
option <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">"title"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"text"</span><span class="token punctuation">:</span> <span class="token string">"BMI Distribution"</span><span class="token punctuation">,</span>
<span class="token string">"left"</span><span class="token punctuation">:</span> <span class="token string">"center"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"grid"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"left"</span><span class="token punctuation">:</span> <span class="token string">"8%"</span><span class="token punctuation">,</span>
<span class="token string">"right"</span><span class="token punctuation">:</span> <span class="token string">"4%"</span><span class="token punctuation">,</span>
<span class="token string">"bottom"</span><span class="token punctuation">:</span> <span class="token string">"6%"</span><span class="token punctuation">,</span>
<span class="token string">"containLabel"</span><span class="token punctuation">:</span> <span class="token boolean">True</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"tooltip"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"trigger"</span><span class="token punctuation">:</span> <span class="token string">"axis"</span><span class="token punctuation">,</span>
<span class="token string">"axisPointer"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"line"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"formatter"</span><span class="token punctuation">:</span> <span class="token string">"{b} : {c}"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"xAxis"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"category"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">"BMI>=24"</span><span class="token punctuation">,</span> <span class="token string">"BMI<=20"</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"yAxis"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"value"</span><span class="token punctuation">,</span>
<span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Count"</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token string">"series"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span>
<span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Population"</span><span class="token punctuation">,</span>
<span class="token string">"type"</span><span class="token punctuation">:</span> <span class="token string">"bar"</span><span class="token punctuation">,</span>
<span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token number">3294</span><span class="token punctuation">,</span> <span class="token number">1985</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">"barWidth"</span><span class="token punctuation">:</span> <span class="token string">"20%"</span><span class="token punctuation">,</span>
<span class="token string">"barMaxWidth"</span><span class="token punctuation">:</span> <span class="token number">40</span><span class="token punctuation">,</span>
<span class="token string">"itemStyle"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token string">"color"</span><span class="token punctuation">:</span> <span class="token string">"rgba(255, 99, 132, 0.8)"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">]</span>
<span class="token punctuation">}</span>
<span class="token comment"># 如果 option 是字符串,尝试解析为字典</span>
<span class="token keyword">if</span> <span class="token builtin">isinstance</span><span class="token punctuation">(</span>option<span class="token punctuation">,</span> <span class="token builtin">str</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">try</span><span class="token punctuation">:</span>
option <span class="token operator">=</span> json<span class="token punctuation">.</span>loads<span class="token punctuation">(</span>option<span class="token punctuation">)</span>
<span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">"error"</span><span class="token punctuation">:</span> <span class="token string-interpolation"><span class="token string">f"Invalid JSON string: </span><span class="token interpolation"><span class="token punctuation">{</span>e<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">}</span>
<span class="token comment"># 现在 option 应该是一个字典</span>
<span class="token keyword">try</span><span class="token punctuation">:</span>
option_json <span class="token operator">=</span> json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span>option<span class="token punctuation">,</span> indent<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">,</span> ensure_ascii<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span>
output <span class="token operator">=</span> <span class="token string">"```echarts\n"</span> <span class="token operator">+</span> option_json <span class="token operator">+</span> <span class="token string">"\n```"</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">"result"</span><span class="token punctuation">:</span> output<span class="token punctuation">}</span>
<span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">"error"</span><span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">}</span></code></pre>
<p>效果展示:<br><img alt="在这里插入图片描述" src="https://i-blog.csdnimg.cn/direct/9ab3fc76f5824439a2fb1dc152337864.png"></p><blockquote><p>ps:<br> 有人会问,为什么不用大模型直接生成md格式的Echarts代码?<br> 这里也是可以这么做的,但是我觉得让大模型专心处理一件事情就好了,怕出错!</p></blockquote><p>另外,其它类型的表也是按上面一样的方法,只是把折线图的模板换成其它类型,这一步可以通过AI完成。</p><h3>2.5 其它环节</h3><p>主要环节搭建已经完成,其它环节就是对数据的一些处理,无非就是新增一些节点来处理数据,我这里搭建的很匆忙,有很多节点处理得不好,其实有很多步都是可以优化的,总体还是显得有些冗余。</p><h2>三.写在最后</h2><p>从Excel数据到最终的交互图表,这个项目完整地实践了如何将一个复杂的业务需求,拆解、封装成一个个可控的技术模块,并通过智能体平台进行高效组装。</p><hr><p><img alt="在这里插入图片描述" src="https://img-blog.csdnimg.cn/59e6298ecc134fbeb947b1b24ecfd48a.gif#pic_center"></p><h3><center>
其它优质专栏推荐
</center></h3><blockquote><p>《Java核心系列(修炼内功,无上心法)》: <strong>主要是JDK源码的核心讲解,几乎每篇文章都过万字,让你详细掌握每一个知识点!</strong></p></blockquote><blockquote><p> 《springBoot 源码剥析核心系列》:<strong>一些场景的Springboot源码剥析以及常用Springboot相关知识点解读</strong></p></blockquote><p><strong>欢迎加入狮子的社区</strong>:『Lion-编程进阶之路』,日常收录优质好文</p><p><strong>更多文章可持续关注上方的博客,2025咱们顶峰相见!</strong></p></div><br><br>
来源:https://www.cnblogs.com/ljbguanli/p/19491650
頁:
[1]