> 自媒体 > AI人工智能 > ChatGPT 助力数据分析:实际案例与技巧
ChatGPT 助力数据分析:实际案例与技巧
来源:破局者Breaker
2023-08-10
137
管理

#头条创作挑战赛#

导语|本文将重点介绍 AI 与数据分析结合的应用,通过实际案例与相关技巧,描述 ChatGPT 如何助力数据分析,帮助读者更好地理解并掌握这一领域的创新实践。

本文作者:krryguo,腾讯 IEG前端开发工程师

在如今 AI 爆炸的时代,涌现出各种 AIGC 能力,可能我们已是司空见惯了。

之前分析过一句话生成图表和BI看板,这一次将重点介绍AI数据分析,通过实际案例与相关技巧,描述ChatGPT 如何助力数据分析。

声明:本文涉及与 ChatGPT 交互的数据已严格脱敏。

介绍

AI 数据分析,我这里实现了两种方式,支持多维数据分析:

SQL分析:分析平台自身的使用情况,如图表配置化平台,输入一句话可分析用户配置图表相关的数据个性化分析:平台上支持上传数据,可提供数据信息(非必填),以此自定义分析用户自己上传的数据

分析完成后展示结果数据的图表和分析结论,图表支持折线图和柱状图,可随意切换。

演示

话不多说,直接上视频。

,时长01:08

注:视频中上传和 AI 分析的数据均是假数据,仅供测试。

视频展示内容:

演示SQL分析过程,输入想分析的内容,点击分析,输出数据图表和分析结论。演示个性化分析,上传两个文件案例:单维度数据分析、多维度数据分析,可追加描述内容辅助 ChatGPT 进行分析。

由于我这个是图表配置化平台,所以这里用的第一个演示内容是 “分析每种图表的使用情况”。

流程

逻辑流程图如下:

问题与技巧

对上面的流程,记录开发时一些问题和技巧,部分我采用一问一答形式说明。

公用逻辑

1、为什么在 user prompt 限定 SQL 和数据分析及其返回格式,而不用 system prompt?有两个方面,一是因为 system prompt 已经承载了表结构信息;二是 user prompt 遵循力度更高。尝试多次,还是让 user prompt 承载具体返回格式更为精确,这一操作在后端进行,防止用户通过开发者工具查看参数。

2、为什么分开定义单维度数据和多维度数据的 prompt,而不直接丢给让 GPT 判断?最好不要给让 GPT 存在两种返回格式的 prompt。例如:“如果数据是单维度,你就返回 {xxx},如果数据是多维度,你就返回 {xxx}”。这类存在 两种结果导向 的 prompt,我尝试了多次,大约有 50% 的几率 GPT 会犯傻(明明是单维度,却返回多维度格式,反之多维度却返回单维度格式)

所以最好的解决方式是在发送请求前用条件运算符区分这两个格式的 prompt,代码判断一下是单维度还是多维度数据,再决定用哪个 prompt,再传给 ChatGPT,尽量让这个 prompt 只存在 一种结果导向。

3、前端如何渲染图表?SQL 分析的接口或个性化分析解析的数据文件所获得的 tableData,其格式与渲染表格的格式一样:对象数组。让 GPT 判断出对象的 key 值映射:keyMap,得知 维度、数据项、数据值的 key,就可以拿到并处理成图表所需的 series、xAxis。

SQL 分析

1、为什么还要反复校验是不是 SELECT SQL 语句?

这里不仅仅是 AI 不完全可控的原因,还有 永远不要相信用户的输入,万一用户恶意输入一些描述,非要执行 UPDATE/DELETE 等恶意操作,那就完了。所以一定要再次校验 AI 生成是否是安全的 SELECT SQL 语句,非查询类 SQL 坚决不通过!!提示不支持此类请求。

2、为什么到 AI 分析那一步骤还要拼接上下文?

上文是有表结构信息和 SQL 语句,这些可以提供给 GPT 更好理解数据和字段的意义,分析更准确。

3、针对表结构长类型字段,不允许直接查询,防止 token 消耗过多。其实最好还是告诉 GPT 只允许查询哪几个字段,或者用哪几个 SQL 函数,尽量让 GPT 生成可控。

个性化分析

1、用户上传的数据解析后需要判断数据格式是否符合要求,超长可以限制截取前面若干项,防止 token 消耗过多。

2、在前端解析用户上传的数据,分析完可以直接用于渲染数据图表,无需再让后端再返回。

3、需要支持用户补充输入,可以简单描述这是什么数据、字段意义或作用,用于 辅助 AI 分析。如果都是易理解语义化的字段名,可以无需描述,GPT 也能识别。遇到一些多维度数据,GPT 可能会误将其他字段作为维度分析,为了准确性可以输入:“以xxx(字段名)为维度分析”;还可以输入:“这是xxx数据” 更好帮助 AI 分析。

Function calling

可以发现为了让 ChatGPT 返回符合要求的 JSON 格式,prompt 的定制就尤为重要和复杂。

好消息是,在当地时间 6 月 13 日,OpenAI 发布函数调用及其他 API 更新。现在开发人员可以向 gpt-4-0613 和 gpt-3.5-turbo-0613 描述函数,并让模型智能地选择输出一个包含调用这些函数所需参数的 JSON 对象。这是一种更可靠地将 GPT 的能力与外部工具和 API 连接起来的新方法。

传送门:Function calling and other API updates

官网有很详细的例子,这里就不再描述代码了。我用本文案例总结大致流程:

有个好处是不需要让 ChatGPT 生成 SQL 了,减少 SQL 注入的风险。本地写一个函数执行 this.app.mysql.select(table, condition),根据 GPT 返回的函数名、参数(字段和 where)来查询数据,更为安全。

但这个方法又有局限性,事先定义函数查询不如 SQL 查询来的灵活,所以这里也可以让函数改为 SQL 查询 this.app.mysql.query(sql),GPT 的函数调用改为:getSqlQuery(sql: string),函数名 getSqlQuery,参数:sql,更为灵活。

总结:让 GPT 与函数调用结合,本地控制返回 JSON 格式,prompt 的定制更为简单,AI 的输出更为可控。根据实际业务需求采用 函数查询 或 SQL 查询,值得一试!

SQL 分析示例

注:以下 SQL 分析的数据均是在数据库中伪造的数据,仅供测试。

分析每种图表的使用情况

多维度数据-柱状图

总结和展望

ChatGPT 作为一款强大的人工智能工具,在数据分析领域具有广泛的应用前景。本文所介绍的案例与使用技巧,可以看到 ChatGPT 在提高数据分析效率、降低技能门槛以及支持决策过程等方面的显著优势。不过本案例分析结果可能过于简单,真正接入业务也可定制多种分析模板,让 GPT 按相关模板格式返回,增加分析多样性。

在实际业务中通常是需要处理大量数据,除了文中提到长类型字段的限制,还要指定允许查询或解析的字段告诉 ChatGPT,结果数据要进一步校验是否符合要求,超长数据可以截取关键字段的内容丢给 GPT 总结分析。做到前后两次校验,更为可控。我们仍需结合实际需求和场景,审慎评估其适用性。

随着人工智能技术的不断进步,我们有理由相信,ChatGPT 及其他类似工具将为数据分析带来更多创新和突破,助力各行各业实现更高效、更智能的决策。

0
点赞
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与华威派无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非华威派)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@goodmaoning.com
关于作者
细雨入梦(普通会员)
点击领取今天的签到奖励!
签到排行
0
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索