OpenAI更新:API新增新函数调用能力

从ChatGPT推出至今短短几个月,OpenAI在 GPT-3.5 Turbo、GPT-4 等这些模型的基础上更新了众多新功能。 6 月 13 日,OpenAI再度重磅更新,发布了函数调用及其他 API 更新。

1 更新内容

1)在 Chat Completions API 中提供函数调用能力

(2)更新更易控制的gpt-4和gpt-3.5-turbo版本

(3)新的 16k上下文版本 gpt-3.5-turbo(与标准的4k版本相比)

(4)embeddings嵌入模型价格降低了75%

(5)gpt-3.5-turbo输入token价格降低 25%

(6)宣布 gpt-3.5-turbo-0301和gpt-4-0314型号的弃用计划

(2)~(5)都是关于成本和计费的问题,(6)是老版本模型将不再继续提供服务。对于开发者而言,最重要的更新就是(1)Chat Completions API能够提供函数调用能力。该功能能让模型在需要的时候调用外部函数并生成对应的JSON对象作为输出。这让开发人员能够更准确地利用GPT的API理解用户意图、获取结构化数据,实现从自然语言到外部函数调用的转换。说白了就是: GPT 的 API 现在可以根据开发者给出的函数描述,理解开发者的函数输入、输出的格式要求。把用户的自然语言转化成函数的输入参数。然后本地的执行脚本根据着这个参数执行对应函数,得到一个结果再还给GPT的API, GPT 的API最后会根据这个结果,以自然语言的形式回答用户的问题下面是GPT 的API进行函数调用的官方(OpenAI.com)示例。

2 GPT 的API进行函数调用流程

用户询问天气:What’s the weather like in Boston right now?

第一步:通过OpenAI API调用带有函数和用户输入的模型

①开发者给GPT一个用于查询天气的函数get_current_weather,该函数需要的参数是location

②用户问GPT:今天Boston天气怎么样?

GPT 理解用户的需求是查询天气,参数是Boston

将函数和参数返回给执行脚本, 'function_call': {'name': 'get_current_weather', 'arguments': '{"location": "Boston"}

返回示例:

注:如果在②中,用户没有提问“今天Boston天气怎么样”,而是问“今天天气怎么样”,GPT不知道用户所要查询的地理位置,便会进一步提问用户“请提供你的位置或者告诉我你想查询哪个城市的天气”。当用户明确给出城市名之后,GPT执行③。

第二步:根据模型返回的响应来调用第三方 API

⑤脚本自动执行get_current_weather函数(通过某个API查天气),查询参数为Boston ,返回天气结果{ "temperature": 22, "unit": "celsius", "description": "Sunny" }

 返回示例:

第三步:将第三方 API 的返回结果发送给模型并进行总结

GPT将返回的结果转换为自然语言回答用户:Boston目前天气晴朗,气温22摄氏度。

返回示例:

以上过程并不是开发者、GPT 双方的交互,而是开发者、GPT、用户的三方交互,GPT是介于开发者和用户之间的“翻译官”,该过程解决三问题:

第一,从自然语言中理解用户意图,匹配函数功能,以选择合适的函数;

第二,从自然语言中抽取函数所需的参数并按规定格式提交给开发者(函数执行脚本);

第三,把开发者(函数执行脚本)执行函数返回的数据(一般是 JSON)以自然语言的形式返回给用户。

下图为GPT的API调用函数的逻辑。其中右侧蓝色部分对于用户来书是“无感”的,用户实际体验到的只有自然语言提问、自然语言回答。

注:GPTAPI本身不具备函数调用能力,它返回的结果仅是函数名以及参数值。函数调用是通过开发者自己编写的执行脚本来完成。其功能是根据GPTAPI返回的“应该用哪个函数(函数名)”以及“传入参数”自动执行对应函数。第三方接口可以没有,主要看本地函数里有没有第三方接口的调用需求。

再次通过一幅流程图描述GPT的AIP调用外部函数的过程:

3 GPT API和GPT插件的异同

之前OpenAI开放的插件功能也能实现外部功能的调用,当用户在与ChatGPT对话时,提及到某些功能,会自动调用外部插件。这个过程只能在ChatGPT界面上进行交互,提高的是ChatGPT的能力。而本期主讲的GPT的API是在本地进行交互,借助GPT的语义理解能力为我们自己的函数服务,提高的是本地函数的能力

4 总结

GPT的API可以根据开发者给出的函数描述,理解函数的输入和输出的格式要求,把用户的自然语言转化成本地/第三方函数的输入参数,开发者执行完函数后将结果返还给GPT的API,GPT根据这个结果回答用户问题。这种调用能力可以调用外部封装工具,去处理复杂问题。这一能力能够解决用户和函数之间面临的诸多问题,对GIS开发人员也有一下启示

(1)用户在解决问题的时候,并不知道具体应该调用哪个函数、使用哪个方法。也无法将自己的需求以函数需要的形式描述出来,这就导致用户有需求但不知道用什么函数解决,函数能够解决但不能被调用。现在GPT的API充当了用户和函数之间的“翻译官”,懂用户且懂函数。

(2)函数和方法需要固定且规范的数据格式,但往往从用户的自然语言中提取出函数需要的数据和格式是比较复杂的工作。但GPT的API可以充当这个桥梁,将自然语言与函数无缝衔接。以往数据库查询的时候需要写查询语句,但借助GPT的API只需要用语言描述要查询的信息即可。以SQL查询面积和人口为例:SELECT area, population FROM region WHERE area>14 AND population>2000; à 查询面积大于14万平方公里且人口大于2000万的地区。

(3)回答问题可靠性更高。对于已经被开发者写进函数的功能会返回经过精确逻辑计算的结果,而不会“一本正经的胡说八道”。比如针对GPT-3.5无法准确进行数学计算而言,开发者可以本地写一个计算脚本,这样就能够解决GPT-3.5计算不准确的问题。

但是,通过该方法调用函数也会有一些局限性

(1)目前OpenAI对于账号及API额度的限制越来越严格,想申请账号并获得API额度对于国内用户来说比较困难,且调用API需全程开启vpn,时效性和稳定性难以保证。

(2)虽然API调用价格降低、一次性输入/输出的最大token数增加,但本地调用API需要将上文中第一步的函数描述以及第三步的函数调用结果都传输给API,再将返回结果传回本地,这将占用大量token。对于本地函数少的情况尚可使用该方法,但若要在几百个函数内选择要执行的函数,对于API的额度的需求极大。

(3)其他轻量级模型(LLaMA、Aplaca、Chat-GLM等)甚至大部分国产厂商的大语言模型语义理解能力可能暂时达不到GPT-3.5、GPT-4.0的水平,因此准确理解用户意图或将成为借助其他语言模型的API实现本地函数调用的挑战。

参考资料:

https://openai.com/blog/function-calling-and-other-api-updates

https://blog.csdn.net/fyfugoyfa/article/details/131216745

https://www.zhihu.com/question/606520916

https://www.zhihu.com/people/loveQt

技术交流/科研合作/客座实习/联合培养请投递:[email protected]标题

 「未来GIS实验室」作为超图研究院上游科研机构,致力于洞见未来GIS行业发展方向,验证前沿技术落地可行性,以及快速转化最新研究成果到关键产品。部门注重科研和创新功底,团队气氛自由融洽,科研氛围相对浓厚,每个人都有机会深耕自己感兴趣的前沿方向。

猜你喜欢

转载自blog.csdn.net/futuregislab/article/details/131377798
今日推荐