isdkz 发表于 2023-6-14 08:46:27

openai迎来重大更新!

本帖最后由 isdkz 于 2023-6-14 17:53 编辑

openai的api迎来了重大更新{:10_298:} ,详情可以看https://openai.com/blog/function-calling-and-other-api-updates

但是英语不好,浏览器的翻译太鸡肋,于是我找上了chatgpt,让他来帮我阅读更新日志并讲给我听



这次更新主要是三点,更长的上下文,函数调用和更低的api价格

openai官方虽然没有明说,但是我尝试了最新的0613镜像惊奇地发现这次api的速度快上了不少,感觉比web端还快{:10_257:}

其中最让人眼前一亮的是函数调用功能,同样地,api文档我又找上了chatgpt来帮我阅读{:10_256:}





大致了解了function calling的使用方法之后,我决定上手实现一个小功能出来{:10_272:}

我们知道大语言模型玩的是文字游戏,所以对于数学方面它是不太擅长的,稍微复杂一点就会算错了{:10_295:}

既然有了 function calling,我们何不将chatgpt不擅长的事情交给 function 来完成呢{:10_267:}

于是我实现了一个可以将十六进制数转十进制数以及可以进行四则运算的chat

import openai
import json
import os

openai.api_key = os.environ.get('OPENAI_API_KEY')

def get_response(prompt):
    # 第一步,向模型发送用户的问题和它可以访问的函数
    response = openai.ChatCompletion.create(
      model="gpt-3.5-turbo-0613",
      messages=[{"role": "user", "content": prompt}],
      functions=[
            {
                "name": "hex2dec",
                "description": "Convert hexadecimal to decimal",
                "parameters": {
                  "type": "object",
                  "properties": {
                        "expression": {
                            "type": "string",
                            "description": "a hexadecimal expression, e.g. 0x1e, 1e",
                        },
                  },

                },
            },
            {
                "name": "arithmetic",
                "description": "Perform arithmetic operations.",
                "parameters": {
                  "type": "object",
                  "properties": {
                        "expression": {
                            "type": "string",
                            "description": "A arithmetic expression, e.g. 1x2, 1+3",
                        },
                  },

                },
            }
      ],
      function_call="auto",
    )

    message = response["choices"]["message"]
    # 第二步,检查模型是否想要调用一个函数
    if message.get("function_call"):
      function_name = message["function_call"]["name"]
      functions = {
            'hex2dec': lambda x: f'{int(x, 16)}',
            'arithmetic': lambda x: f'{eval(x)}'
      }
      # 第三步,调用函数
      # 注意:模型返回的 JSON 可能不是有效的 JSON
      function_response = functions(
            json.loads(message["function_call"]["arguments"]).get('expression', 0)
      )
      # 第四步,向模型发送函数调用和函数响应的信息
      response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=[
                {"role": "user", "content": prompt},
                message,
                {
                  "role": "function",
                  "name": function_name,
                  "content": function_response,
                },
            ],
      )
    return response["choices"]["message"]["content"]

print(get_response('985*396+(783-249)的结果是多少?'))
print(get_response('十六进制数AB2D的十进制是多少?'))







不二如是 发表于 2023-6-14 10:10:40

好像 4 要免费开放了

isdkz 发表于 2023-6-14 10:13:51

不二如是 发表于 2023-6-14 10:10
好像 4 要免费开放了

是吗?{:10_257:}

我只听说了 gpt-4 的 api 权限会开放给更多人,没听说 4 免费开放的消息

Axiujiu 发表于 2023-6-14 10:17:35

那确实是一个好消息,如果开放的话

不二如是 发表于 2023-6-14 10:20:13

isdkz 发表于 2023-6-14 10:13
是吗?

我只听说了 gpt-4 的 api 权限会开放给更多人,没听说 4 免费开放的消息

gpt-4-0613

之前版本可能会像 bing 那样给个阉割的

巅峰老甲鱼1 发表于 2023-6-14 10:34:03

不二如是 发表于 2023-6-14 10:10
好像 4 要免费开放了

期待{:10_277:}

hornwong 发表于 2023-6-14 11:14:41

good

sfqxx 发表于 2023-8-27 19:33:53

考古{:10_275:}

liuhongrun2022 发表于 2023-9-3 10:02:34

sfqxx 发表于 2023-8-27 19:33
考古

烤咕
页: [1]
查看完整版本: openai迎来重大更新!