ChatGPT API 支持函数调用功能(相当于结构化输出json)

1、前言

开始的一段时间,如果你想通过ChatGPT 的API来定制化一些工作,可能要反复的调整prompt,来使ChatGPT API接口能够返回json结构化的数据。但有时候可能又会存在一些问题。或者通过直接对返回的长字符串进行正则匹配的模式来处理,但是这种方式也是非常的糟糕,而且有一些情况下也是正则无法处理的,而且我对正则的了解仅仅限于拿来就用。

盼星星,盼月亮,OpenAI 团队终于在6月14日左右的时候,通过函数调用的方式支持了结构化的输出JSON。这样有了结构化的数据,就可以很方便的与自定义函数和业务逻辑进行整合处理。

开发者现在可以描述函数给 gpt-4-0613 和 gpt-3.5-turbo-0613两个模型,并使模型智能地选择输出一个包含调用这些函数的参数的 JSON 对象。这样就可以将 GPT 的功能与外部工具和 API 很丝滑的就联结起来了。

我没记错的话可能就是6月14日左右,当时发布函数调用后,我就用golang语言写了一个版本的demo吧,由于最近也在项目中使用到了函数调用,所以在此使用nodejs 来做一个记录。

2、实例

通过官网的ChatGPT 先来查看效果。

ChatGPT PLUS GPT-4返回

image.png

image.png

这里我还是使用GPT-4 的模型返回的数据,但是在让他处理结构化的数据整个的返回确实是没什么问题的。但是返回给我的总包含一些无效的信息,不能直接使用,当然是可以通过正则匹配进行处理的。下面我用GPT-3.5再来试试看看效果。

ChatGPT GPT-3.5返回

image.png

效果上GPT-3.5的跟GPT-4的效果是类似的。

通过ChatGPT api 3.5普通接口返回的

image.png

效果上通过普通API GPT-3.5 跟使用官网 GPT-3.5 GPT-4的效果是类似的。

通过ChatGPT api 3.5 函数调用接口返回的

image.png

通过截图可以发现,我可以直接通过arguments中的参数获取到转换后的数据

movieTitle:"复仇者联盟:无限战争",
releaseDate: "2018年4月27日",
director: "安东尼·罗素,乔·罗素"

这样我就可以直接将这三个字段 跟我原有的系统进行对接就可以了,在ChatGPT 与其他系统的对接上方便性简直达到了逆天的地步。

3、函数调用实现过程

https://platform.openai.com/docs/api-reference/completions/create 可以点击ChatGPT官网进行查看接口文档进行学习使用。

https://platform.openai.com/docs/guides/gpt/function-calling 关于函数调用的这里有一个官网的样例。

其实主要是下面两个参数的解析

image.png

function_call参数:

控制模型如何响应函数调用。“none”表示模型不调用函数,并响应最终用户。“auto”表示模型可以在最终用户或调用函数之间进行选择。如果通过指定functions中的 {"name": "my_function"} 特定函数会强制模型调用该函数。“none”是不存在函数时的默认值。如果存在函数,则“auto”是默认值。

所以通常情况下,function_call参数可以完全不进行设置,将控制权完全交给functions。而functions参数中最重要的便是parameters的描述。其实也就是对ChatGPT 返回给我们的JSON结构的描述。

https://json-schema.org/understanding-json-schema/ 这里可以学习到如何去描述JSON架构。

以下便是我上面示例的JSON架构描述

    parameters: {
        type: "object",
        properties: {
          movieTitle: {
            type: "string",
            description: "Movie Title",
          },
          releaseDate: {
            type: "string",
            description: "Release Date",
          },
          director: {
            type: "string",
            description: "Director",
          }
        },
        required: ["movieTitle", "releaseDate", "director"],
      }

至于其他的使用细节可以查看我上面的链接去学习就好了。

demo全部代码

const configuration = new Configuration({
    apiKey: process.env.OPENAIKEY,
    basePath: process.env.OPENAI_BASE_URL
  });

  const { content } = req.body as {
    content: string
  }
  let systemPrompt =`请帮我查找一部2018年到2020年之间 美国比较优秀的电影信息,包括电影名称、上市时间、导演,并使用中文来回复信息`
  console.log(content , 'name -naem')
  if(content) {
    systemPrompt = content
  }
  const chatApi = new OpenAIApi(configuration);

  const chatCompletion = await chatApi.createChatCompletion({
    model: 'gpt-3.5-turbo-16k',
    temperature: 0,
    messages: [{ role: 'user', content: `${systemPrompt}` }],
    functions: [
      {
        name: "write_moivesinfo_to_database",
        description: "Write movies into the database.",
        parameters: {
            type: "object",
            properties: {
              movieTitle: {
                type: "string",
                description: "Movie Title",
              },
              releaseDate: {
                type: "string",
                description: "Release Date",
              },
              director: {
                type: "string",
                description: "Director",
              }
            },
            required: ["movieTitle", "releaseDate", "director"],
          }
      }
    ],
  });
  console.log(chatCompletion.data.choices[0], 'chatCompletion')
  

执行结果如下图所示

image.png

再来看一个返回列表数据的

image.png

总结

image.png

image.png

ios的app大致是在2个月前发布的

image.png

效果还是非常棒的,希望能加一个列表功能,让我选,因为有一些是常用的设置,以前都是每次输入都找一个地方进行拷贝

image.png

如何编写和执行python代码并且可以处理文件上传的ChatGPT版本。尝试寻求数据分析、图像转换或编辑代码文件的帮助。注意:文件不会保留超过单个会话。

image.png

这仅仅是我尝试的一个小功能

最近两个月的更新大致就是这样的了,自己对自己做一个总结,方便回顾一下历史。当然这里还有一个问题也提一下,可能很多时候由于安全以及法律的限制,openai最近几个月的版本回复正确率可能明显或者很多人都有感觉质量下降,这应该不可避免吧,毕竟功能越强大,面临的利弊得失就会越多,相信openai会越来越好,也能平衡好质量的把控,当然最后还是更加期待多模态新功能的发布吧。最近几个月百模大战也如火如荼,越来越多的公司加入了这个赛道,期待ai更高质量的发展,也期待国内大模型真正的提高效果和质量吧。


作者:ChatGPT PLUS

来源:微信公众号:那个曾经的少年回来了

出处:https://mp.weixin.qq.com/s/17wYd48D_YGiyv2QdSg5NA

展开阅读全文

页面更新:2024-06-01

标签:罗素   函数   功能   正则   模型   接口   参数   效果   质量   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top