先做个广告:如需代注册ChatGPT或充值 GPT4.0会员(plus),请添加站长微信:gptchongzhi
导语|本文将重点介绍 AI 与数据分析结合的应用,通过实际案例与相关技巧,描述 ChatGPT 如何助力数据分析,帮助读者更好地理解并掌握这一领域的创新实践。
推荐使用GPT中文版,国内可直接访问:https://ai.gpt86.top
本文作者:krryguo,腾讯 IEG前端开发工程师
AI数据分析
,通过实际案例与相关技巧,描述ChatGPT
如何助力数据分析。介绍
SQL分析
:分析平台自身的使用情况,如图表配置化平台,输入一句话可分析用户配置图表相关的数据个性化分析
:平台上支持上传数据,可提供数据信息(非必填),以此自定义分析用户自己上传的数据
演示
注:视频中上传和 AI 分析的数据均是假数据,仅供测试。
演示SQL分析过程,输入想分析的内容,点击分析,输出数据图表和分析结论。
演示个性化分析,上传两个文件案例:单维度数据分析、多维度数据分析,可追加描述内容辅助 ChatGPT 进行分析。
流程
SQL分析
:用户描述想分析的内容,后台连接 DB,附带表结构信息让 AI 输出SQL
语句,校验是SELECT
类型的 SQL,其他操作如 UPDATE/DELETE
绝不能通过!!校验通过后执行 SQL 返回结果数据。个性化分析
:用户上传文件,如有需要可以简单描述这是什么数据、字段意义或作用辅助分析。前端解析用户上传的文件,再传给 GPT 分析数据,后续步骤与上面一致。第一个 user prompt:限定
SELECT SQL
,这里告诉它:不要用SELECT *
来查询全部列,且仅回复一条 SELECT SQL 语句。至少查询两列:数据项、数据值,且不能直接查询如mediumtext/longtext
这样的长类型字段,可以用count/substring
等函数查询这些长类型列。system prompt 是表结构信息,如有难以理解的字段可以告诉 GPT 字段的意义,有多个表可分开描述。
需校验 GPT 生成的 SQL,不通过直接返回提示:抱歉,不支持此类请求。通过再执行 SQL 查询数据。
数据分析的 user prompt:提示数据分析,限定返回的 JSON 格式:
conclusion
、keyMap
、title
。keyMap
的作用:数据 key 的映射,获取结果数据对应的维度、数据项、数据值的 key 值,用于映射数据渲染图表。由于支持多维数据,单维度数据的 keyMap 没有维度项,就存在让 GPT 返回两种结构的情况。这里我采取 分开定义单维度数据和多维度数据的 prompt,根据结果数据tableData
的维度,用条件运算符选择对应的 prompt,再传递给 GPT。结果数据
tableData
是跟随接口一起返回到前端,已经通过 SQL 查询的数据,不能让 GPT 又生成一次,否则非常耗时。
接口
生成 SQL 校验并执行
/api/getGPTSQLQuery
根据结果数据分析出结论
/api/getGPTAnalyze
封装了前面两个接口调用
/api/getGPTSQLAnalyze
方式二个性化分析只调用第二个接口实现;
后续若只需要返回 SQL 也可以只调用第一个接口。
getGPTSQLAnalyze
返回示意图ChatGPT
两次回答内容问题与技巧
公用逻辑
有两个方面,一是因为
system prompt
已经承载了表结构信息;二是 user prompt
遵循力度更高。尝试多次,还是让 user prompt 承载具体返回格式更为精确,这一操作在后端进行,防止用户通过开发者工具查看参数。最好不要给让 GPT 存在两种返回格式的 prompt。例如:“如果数据是单维度,你就返回 {xxx},如果数据是多维度,你就返回 {xxx}”。这类存在
两种结果导向
的 prompt,我尝试了多次,大约有 50% 的几率 GPT 会犯傻(明明是单维度,却返回多维度格式,反之多维度却返回单维度格式)ChatGPT
,尽量让这个 prompt 只存在 一种结果导向
。SQL 分析的接口或个性化分析解析的数据文件所获得的
tableData
,其格式与渲染表格的格式一样:对象数组。让 GPT 判断出对象的 key 值映射:keyMap
,得知 维度、数据项、数据值的 key,就可以拿到并处理成图表所需的 series
、xAxis
。SQL 分析
UPDATE/DELETE
等恶意操作,那就完了。所以一定要再次校验 AI 生成是否是安全的 SELECT SQL 语句,非查询类 SQL 坚决不通过!!提示不支持此类请求。token
消耗过多。其实最好还是告诉 GPT 只允许查询哪几个字段,或者用哪几个 SQL 函数,尽量让 GPT 生成可控。个性化分析
token
消耗过多。辅助 AI 分析
。如果都是易理解语义化的字段名,可以无需描述,GPT 也能识别。遇到一些多维度数据,GPT 可能会误将其他字段作为维度分析,为了准确性可以输入:“以xxx(字段名)为维度分析”;还可以输入:“这是xxx数据” 更好帮助 AI 分析。
Function calling
gpt-4-0613
和 gpt-3.5-turbo-0613
描述函数,并让模型智能地选择输出一个包含调用这些函数所需参数的 JSON 对象。这是一种更可靠地将 GPT 的能力与外部工具和 API 连接起来的新方法。this.app.mysql.select(table, condition)
,根据 GPT 返回的函数名、参数(字段和 where)来查询数据,更为安全。this.app.mysql.query(sql)
,GPT 的函数调用改为:getSqlQuery(sql: string)
,函数名 getSqlQuery,参数:sql,更为灵活。函数查询
或 SQL 查询
,值得一试!SQL 分析示例
注:以下 SQL 分析的数据均是在数据库中伪造的数据,仅供测试。
个性化分析示例
总结和展望