2023-07-03 17:03:01 来源:博客园
摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
(资料图片)
在《大火的ChatGPT与SpreadJS结合会有哪些意想不到的效果》一文中提到ChatGPT插件的一个明显的问题,那就是“返回的结果格式可能插件也无法进行分析使用,从而是使得后续的操作无法继续执行”。造成这个问题原因与ChatGPT的技术原理有一定的关系。
模型预言的限制:ChatGPT是基于语言模型的,其性能受模型训练和数据集的限制。对于复杂的问题可能并不能准确返回结果,同时返回的结果格式可能插件也无法分析使用。
但随着6月13日发布Chat Completions API 的function calling能力,这个问题得到了很好的解决。此次更新带来了新的模型,更大的内容,更低的价格,而Function calling更是带来了革命性的互动方式。
通过Function calling,OpenAI model可以根据你对系统中functions的描述来生成外部系统可以直接使用的结构化的JSON参数,这样GPT就可以更好的和外部系统结合。
以前文中“建议的数据透视表”为例,对于提供的表格数据,text-davinci-003 model会返回建议的文本内容:
"text": "\n\n行:销售人员\n列:品牌\n值:销售额\n\n通过这样设置可以分析出每个销售人员销售的不同品牌的总销售额。"
虽然有换行等符号可以解析所需要的行列值,但是稳定性十分不确定,程序很难直接使用。
通过使用Function calling,数据透视表的建立就会变得非常简单。还是以OpenAI官方提供的nodejs支持为例。
在对话中加入functions描述
1. let messages = [2. {"role": "user", "content": "最后的JSON数据第一行是数据字段,创建有分析意义的数据透视表\\n" + JSON.stringify(data)}3. ]4. let functions = [{5. "name": "pivot_talbe_analyze",6. "description": "对数据创建数据透视表,返回数据透视表结果",7. "parameters": {8. "type": "object",9. "properties": {10. "rowFieldName": {11. "type": "string",12. "description": "行字段名称"13. },14. "columnFieldName": {15. "type": "string",16. "description": "列段名称"17. },18. "dataFieldName": {19. "type": "string",20. "description": "值字段名称"21. },22. },23. },24. "required": ["rowFieldName", "dataFieldName"]25. }]26. 27. var response = openai.createChatCompletion({28. "model": "gpt-3.5-turbo-0613",29. "messages": messages,30. "functions": functions,31. "functions_call": {"name": "pivot_talbe_analyze"}32. });
一次对话可以有多个function描述,每个function描述包含名称,描述,方法参数(描述规则是JSON Schema),以及那些parameter是必选的。
对于选择区域创建数据透视表,需要提供行、列、值三个维度的字段名称,因此需要rowFieldName、columnFieldName和dataFieldName三个paramenter。
另外,可以通过function_call设置选择function的模式,当functions字段不为空时默认为“auto”,示例中指定了function pivot_talbe_analyze。
完成调用直接返回了function name 和parameters中的三个参数:
{name: "pivot_talbe_analyze", arguments: "{\\n "rowFieldName": "销售人员",\\n "columnFieldName": "品牌",\\n "dataFieldName": "销售额"\\n}"}
使用GPT返回结果并创建透视表通过返回的function name 和parameters可以直接调用系统中的对应方法创建的透视表了。
let args = JSON.parse(completion.data.choices[0].message.function_call.arguments)let pivotTable = sheet.pivotTables.add("PivotTable", "Table1", 2, 7, GC.Spread.Pivot.PivotTableLayoutType.outline, GC.Spread.Pivot.PivotTableThemes.medium2);pivotTable.add(args.rowFieldName, args.rowFieldName, GC.Spread.Pivot.PivotTableFieldType.rowField);if(args.columnFieldName)pivotTable.add(args.columnFieldName, args.columnFieldName, GC.Spread.Pivot.PivotTableFieldType.columnField);pivotTable.add(args.dataFieldName, "求和项:" + args.dataFieldName, GC.Spread.Pivot.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);
获取SpreadJS透视表结果如下:
let ptRange = pivotTable.getRange().content;let ptData = sheet.getArray(ptRange.row, ptRange.col, ptRange.rowCount, ptRange.colCount);1. 给GPT反馈公式调用结果messages.push(completion.data.choices[0].message)messages.push({"role": "function", "name": "pivot_talbe_analyze", "content": JSON.stringify({pivotTable: ptData})})response = openai.createChatCompletion({"model": "gpt-3.5-turbo-0613","messages": messages,"functions": functions,function_call: "none"});response.then(function(completion){let desc = completion.data.choices[0].message.content;GC.Spread.Sheets.Designer.showMessageBox(desc, "分析结果", GC.Spread.Sheets.Designer.MessageBoxIcon.info)});
将历史和获取到的透视表信息添加到messages中,这里message rule多了function类型,content就是调用function的返回结果。
调用时function_call设置none,不要使用function calling, GPT根据上下文返回了如下信息:
{role: "assistant", content: "以下是创建的数据透视表:\n\n\`\`\`\n[\n ["求和项:销售额", "品牌", null, null…\n]\n\`\`\`\n\n该数据透视表按照销售人员和品牌对销售额进行了汇总,可以更方便地进行数据分析和比较。"}
接下来可以发送新的请求让GPT对数据做进一步的分析处理,当然对于一些系统操作,我们做到步骤2就可以了。
总结一下,通过Function calling,自身系统和openai model互动更加简便,耦合的更加紧密,系统通过互动的方式向ChatGPT model发起请求,model可以智能选择需要调用的系统function,进一步提升了系统的创造性。
不过还是需要提醒,对于调用系统数据更新删除的方法,还是要做好确认再去执行。
扩展链接:
随笔-当ChatGPT遇见SpreadJS
POI打开Excel文件遇到out of memory的解决实践
标签:
- 微信突然大更,用新系统的有福了 _短讯
- 啧,二维码居然还能这么玩?
- “他们逼我说台湾是中国的,不然就不救我!”一石激起千层浪|环球百事通
- 世界速读:识别食油中掺入了桐油 如何识别食油中掺入了桐油
- 大班育儿宝典知识 幼儿园大班育儿宝典知识汇总) 今日热讯
知识
- 微动态丨正向市场和反向市场(正向市场)
- 焦点消息!谍影重重1精彩片段_谍影重重1剧情详细解析
- 全球看点:江西一化工厂发生硅油着火引发火情 目前无人员伤亡
- 死亡五大!勇士队签约格林埋下隐患,后续将交易来唐斯打造三连冠|今日精选
- nahco3和na2co3溶解度-nahco3
人物
- 酷狗概念版怎么领取免费会员
- 世界今日报丨瑞银:下调普拉达目标价至68港元,维持买入评级
- 全国反欺诈宣传日:投资理财稳赚不赔?
- 治疗手麻的药物有哪些图片_治疗手麻的药物有哪些 当前快播
- 冲动的惩罚吉他谱前奏(冲动的惩罚吉他谱)-天天快资讯
- 【全球播资讯】智能复兴号有哪些车次_哪些车次是复兴号
- 高清珍藏ed2k懂得(珍藏ed2k你懂的)|关注
- 最资讯丨仰望U8上市时间提前:8月上市 9月交付第一批!
- 职工意外伤害险赔偿范围是什么?怎么理赔?-世界看点
- 镀铬价格(镀铬价格)_天天关注
- 当前通讯!欠安逸花一万逾期一年怎么办?会被起诉吗?-世界速看料
- 姜至鹏:球队发挥出了能做到的所有东西,还是很欣慰的_环球快播
- 想送鞋得知道ta的鞋码,12星座标准鞋码,准到觉得可怕!
- 当前时讯:汨罗安排部署农口线当前重点工作
- 太白湖新区召开社会心理服务体系建设工作推进会|天天聚看点
- 沈阳市沈河区惠工街道办事处_关于沈阳市沈河区惠工街道办事处简述
- 新还珠格格选秀节目叫什么_新还珠格格参加过哪些综艺节目_天天快播
- 夺冠意难平 谢震业赛后送“金句”
- 【聚看点】民生信托近期被执行4080万,因营业信托纠纷遭民生财富状告法院要求赔4.7亿
- 什么是三相电压 什么是三相电 每日看点
- 如何用电子章盖骑缝 可以教我怎么在电子文档上盖骑缝章吗谢谢
- 今日精选:马歇尔恩伯顿扬声器评测
- 周末下雨问候语 周末下雨问候语图片
- 每日精选:超十亿参数的生成式AI模型实现在Android手机上运行
- 小微经济呈现八大新亮点
- 【环球快播报】腿总是酸疼是怎么回事呢_腿总是酸疼是怎么回事
- 当前热点-更换超出保修期的iPhone电池现在更加昂贵
- 西安通知:每人每天25元!
- 冷门产品有哪些产品类别_冷门产品有哪些
- 廊坊银行:取消发行“23廊坊银行CD187”
- 留学“断供”后 她在异国他乡送外卖
- 吐槽涨价更贵不买?苹果不在乎:主卖iPhone 15 Pro系列 备货占比高
- 如果你喜欢《最终幻想16》:你可以试试这8款游戏
- 涨停雷达:ST板块异动 ST深天触及涨停
- 快播:2023年浙江万里学院志愿填报指南(浙江省内)
- 【播资讯】好吃的高压锅焖羊肉怎么做如何做好吃?
- 【快播报】怎样科学使用家里的血压计?怎样使用电子血压计?
- 20寸登机箱加背包能上飞机吗(20寸登机箱)
- 当前视点!石家庄市谈固街道瑞城北区社区 开展“人人讲安全,个个会应急”消防安全知识讲座及应急逃生演练活动
- 【财经分析】高利率环境下巴西银行业展现韧性|聚焦
- 当前热门:国泰君安:主题投资是更有效的投资策略
- 南昌市2023年第一季度GDP预测:1827亿元,你相信吗?
- 学医潮上热搜!你可能不信,医学专业比你想象的更火 世界微头条
- 动态:再度联手!巴萨发布海报:京多安与莱万时隔九年再成队友
- “女子泳装照简历”热传,涉事机主回应:应是被人恶搞,律师:当事人可起诉或报警
- 环球新资讯:万痛筋骨贴的价格_万痛筋骨贴价格
- 柴沟镇西戈家庄志愿服务队_关于柴沟镇西戈家庄志愿服务队概略
- 扎鲁特旗救助一只国家二级保护动物雕鸮|焦点热文
- 经常咳嗽怎么办,中医教你如何预防?
- 抚顺特钢获6家机构调研:公司主要核心产品为“三高一特”,其中高温合金、超高强度钢订单相对一直比较充足(附调研问答)
精彩阅读
- 世界快资讯:网络不稳定怎么修复手机_网络不稳定怎么修复
- 每日速递:匈牙利最杰出的风景画家之一
- 其他应付款属于什么科目借贷方向_其他应付款属于什么科目
- 瑞典一游乐园发生过山车事故 致1人死亡9人受伤-天天实时
- 每日快讯!盒马鲜生最快11月完成分拆上市?官方回应:不予置评
- 新华时评丨筑墙挡景不如还景于民
- 星火成炬 | 点亮乡村多彩生活
- 如何清除闭口? 重点聚焦
- 西充开展高考志愿填报公益指导活动 世界滚动
- 每日快播:孩子青春期叛逆怎么办 不用管他_孩子青春期叛逆怎么办
- 每日消息!记者:国米今天将敲定免签小图拉姆协议,预计交易本周三完成
- 比亚迪在临朐成立汽车销售新公司 全球观点
- 中国石化油价查询_中国石化油价-天天讯息
- 热文:节约集约用地 严守耕地红线——宁陕县自然资源局开展第33个全国土地日主题的宣传活动
- 热化了!A股这一板块逆势暴涨!“高考状元概念股”也火了;创业板指一度翻红!
- BBA的护城河,受到威胁了? 环球视讯
- 德润快速路月底部分路段开通,莱荣高铁下月开始联调联试-环球速看
- 陕西检察机关严惩各类毒品犯罪 2022年以来共批捕640件974人-环球热消息
- 世界动态:常德爱思特医疗美容价格是多少?费用详情及口碑评价请查收!
- 陵水5071名考生参加中考_环球观点
- 妈妈情绪好 孩子能量足
- 制氧机的工作原理 空气制氧机的工作原理
- 全球快讯:体育休闲热潮激发消费活力
- 回校填报高考志愿 车却坏在高速上
- 隆安县交通运输局积极开展“龙舟水”险情处置工作
- 全球热消息:采摘野生保护植物?女子在四川巴朗山晒照引热议
- 【新要闻】杭州富春江水库今年首次泄洪
- 太惨了!国字号男足青年军连续18年无缘世界大赛 全球新消息
- 日本高滨核电站1号机组预计将于7月重新启动|天天短讯
- 【世界时快讯】圆顶形智能扬声器更适合放置在桌面上提供稳定性和一流的声音
- PICO联手A-SOUL打造“夏日漫游VR歌会”,重塑虚拟演唱会新玩法 当前资讯
- 东莞男篮主场大比分取胜,陈国豪称“争取拿到第九冠”
- 北京电子科技职业学院工会举办教职工扑克牌“双升”比赛 世界速讯
- 贵州安盘高速公路进入全面开工建设阶段
- 百科知识 美纹纸胶带怎么用
- 浙江两轮核酸检测结果均为阴性 无新增本土阳性感染者
- 新疆阿克苏地区库车市发生4.1级地震 震源深度18千米
- 抵返哈尔滨人员须持48小时内核酸检测阴性证明
- 浙大紫金港校区已解封 有7337人有序离开该校区
- 2021年广东省第七届风筝锦标赛落幕
- 黑龙江讷河市启动全员核酸检测 目前讷河市全员核酸检测结果均为阴性
- 【同心粤港澳 携手大湾区】南头古城,搭建深港澳三地文化创意活动交流平台
- 重庆入河排污口整治工作推进至全市26个区县
- 四川省第二批政法队伍教育整顿:立案审查调查省级政法机关干警58人
- 长三角区域生态环境部门“云签约”长江大保护倡议书
- 古老长城重焕新生机
- 藏不住了!你同事里有许多“武林高手”……
- 浙江杭州2例无症状感染者系感染德尔塔变异株
- 喜马拉雅的深情和誓言
- 浪漫之城打造山海城一体新地标