使用 Coze 分析财报并生成图表的实现过程如下:
用户上传excel后,在工作流中可以拿到excel连接,然后写一个插件通过url下载当前excel,再读取excel里的数据。开始我打算把解析出来的excel数据以单元格的形式存到bot数据库,然后使用大模型根据单元格数据和用户提问生成答案,但是经过多次实验,发现大模型的计算能力特别差,经常出现计算错的情况。比如一张学生成绩表,用户想求某个学科的平均数,大模型可以把当前学科所有分数精准的提取出来,最后一步计算的时候,经常会出现错误。然后就试了一下另外一套方案,把excel转换为数据表,然后使用大模型把用户问题转换为sql,发现这样做生成的sql准确率非常高,基本都能得到想要的结果。coze里不能动态创建表,所以我自己写了一个服务,在动作流里调用这个服务,根据excel的url动态创建表,同时把excel数据插入到表中,最后把服务返回的动态表名存到coze数据库中,这一步是为了后续用户提问问题时,根据表名动态执行sql,拿到数据。最后再根据数据库表字段信息,使用大模型为用户生成3个推荐报表,报表信息中包含标题、描述、查询sql。这里防止一次查询出来的数据过多,传给大模型时候崩溃,所以限制数据100条。拿到sql后,使用插件动态执行sql查询数据,再根据标题和数据使用大模型转换为绘制echarts图表的参数。绘制图表,官方有一个插件,但是这个插件生成的图表图表有点模糊,我自己就写了一个插件,生成的图表图片就清晰度比较高,echarts绘制图表时可以设置缩放,我给图片放大了三倍,清晰度就变高了很多。
查看大图那里把多张图片合成一张,本来打算使用图像流做的,但是图像流不支持合成图片,只支持叠加图片,所以我还是自己写了一个插件,支持把多张图片合并成一张大图。图表生成成功之后,需要把图表连接存到数据库中,为后面查看报表做准备。下面是coze中存放图表信息的数据库做这个工作流的时候有2个细节,和大家分享一下大模型有时候生成的sql会出错,当我去执行错误sql的时候可以拿到错误信息,把报错信息和sql一起传给大模型,让大模型修复后重新执行,这样可以保证sql都是可以正常执行的。大模型生成json有时候不是标准的,也可以使用上面这个方案让大模型帮忙修复。
先从数据库中查询前面存放的图表连接,然后再调用合并图片的插件,把几张图表合并成一张大图。[heading3]删除图表[content]根据用户输入的标题从数据库中删除当前图表[heading3]添加图表[content]这个其实和前面的解析excel数据生成报表流程差不多,只是前面是根据大模型生成3个,这个是用户已经输入了标题,只需要根据标题生成查询sql就行了,后面步骤是一样的。