搭载ChatGPT之后的表格插件又有哪些新的改变——Function calling增强
摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
在《大火的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,进一步提升了系统的创造性。
不过还是需要提醒,对于调用系统数据更新删除的方法,还是要做好确认再去执行。
扩展链接:
POI打开Excel文件遇到out of memory的解决实践
搭载ChatGPT之后的表格插件又有哪些新的改变——Function calling增强的更多相关文章
- JQuery表格插件DataTables 当前页合计功能
公司项目表格插件使用的是DataTables,最近添加表合计功能,发现百度统一都是如图类型的代码,不知道是配置问题还是怎么了,在我的页面下根本不能用 var addd=0; $(document).r ...
- [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. ...
- Dynatable – 基于 HTML5 & jQuery 的交互表格插件
Dynatable 一款有趣的,语义化,交互式的表格插件,使用 jQuery,HTML5 和 JSON 实现.Dynatable 的目的是提供一种简单的.可扩展的 API,能够轻松的浏览和操作大规模的 ...
- datatables 前端表格插件 增删改查功能
官方网站:http://datatables.club/example/<!-- DataTables CSS -->css引入的<link rel="stylesheet ...
- 25款顶级的jQuery表格插件
jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...
- 自己写的表格插件autotable
自己写的表格插件autotable 作者:田想兵,个人网址:http://www.lovewebgames.com 这个表格插件所完成的功能是:ajax请求数据,然后动态绑定到指定表格下,格式化,分页 ...
- 15 个最佳的 jQuery 表格插件
现如今,网站开发设计的需求会要求自动适应所有移动设备,即响应式网站: 在开发网站时必须考虑对平板设备融合 fluid(流)和自适应性特点. 大多数网站设计要靠margins, guides, rows ...
- 推荐几款jQuery表格插件
平时项目中,会碰到很多表格元素,这里推荐几款jQuery表格插件. Stackable.js 通常在小屏幕上,表格的表形形式不大好,因为用户会缩放平移,或者就是表格太小,导致数据不可见.Stackab ...
- 好用的自适应表格插件-bootstrap table (支持固定表头)
最近工作中找到了一款十分好用的表格插件,不但支持分页,样式,搜索,事件等等表格插件常有的功能外,最主要的就是他自带的冻结表头功能,让开发制作表格十分容易,不过网上大多都是英文文档,第一次使用会比较麻烦 ...
- jQuery 表格插件25
jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...
随机推荐
- pyhon之编译成exe
1安装pyinstaller pip install pyinstaller 2 编译 pyinstaller -F -w game.py (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框 ...
- [操作系统]记一次未尽的三星 Galaxy A6s(SM-G6200)刷机过程
给女王大人刷机,第一次刷机,很遗憾,遇到了三星的"锁三键"问题,没有搞成.记录一下这个过程所涉猎的一些刷机基本知识,不妨当作一次学习过程. 1 刷机过程 Step1 查看手机基本信 ...
- 补五月五号java基础知识点
1.容器类:容器类是java以类库的形式供有用户开发程序时可直接使用的各种数据结构.2.java容器框架中有两个名称分别为Collection和Set的接口,为防止名称的冲突,本书将Collectio ...
- mysql数据库的登录脚本
######################## ku脚本: 可以使用以下ku脚本,它可以根据提供的参数登录到MySQL数据库: #!/bin/bash # Check for correct num ...
- Redis性能瓶颈揭秘:如何优化大key问题?
1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降.内存不足.数据不均衡以及主从同步延迟等问题. 到底多大的数据 ...
- HMS Core 6.10.0版本发布公告
分析服务 ◆ 事件分析下新增商品订阅分析报告,帮助开发者了解应用内用户付费订阅概况,评估订阅付费价值: ◆ 营销分析.用户质量.转化分析以及过滤器中,新增广告系列/广告任务通过ID进行搜索的功能,通过 ...
- SpringBoot 自动扫描第三方包及spring.factories失效的问题
为什么会找不到 Spring 依赖注入 就是要让spring找到要注入的类 并且识别到了 @Component.@Service 等注解. 1. 当在开发的第三方包里写明了 @Component.@S ...
- 2021-07-05:股票问题2。给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖
2021-07-05:股票问题2.给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖 ...
- Maven安装、阿里云镜像配置、Idea中创建Maven项目、Tomcat的部署
我为什么要学这个技术? 为了更快创建web开发项目和jar包 在javaweb开发中,需要使用大量的jar包,我们手动去导入: 如何能够让一个东西自动帮我导入和配置这个jar包 因此,Maven诞生了 ...
- 华为Atlas 200I DK A2开箱!
摘要:Atlas 200I DK A2是Atlas 200DK之后的一款产品,从2022年一直酝酿至今,终于在2023年5月6日-7日昇腾AI开发者峰会2023正式发布. 本文分享自华为云社区< ...