1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > GPT-4:06月13日OpenAI重大更新的简介(新增函数调用/模型更新/上下文长度扩大4

GPT-4:06月13日OpenAI重大更新的简介(新增函数调用/模型更新/上下文长度扩大4

时间:2023-04-12 03:33:31

相关推荐

GPT-4:06月13日OpenAI重大更新的简介(新增函数调用/模型更新/上下文长度扩大4

GPT-4:06月13日OpenAI重大更新的简介(新增函数调用/模型更新/上下文长度扩大4倍/使用成本降低)、基于OpenAl的Python SDK实现函数调用应用案例之详细攻略

导读:06月13日OpenAI宣布了一些更新,包括更多可控的API模型、函数调用能力、更长的上下文和更低的价格。

目录

函数调用和其他API更新

更新内容简介

函数调用

1、函数调用使开发者能够更可靠地从模型中获取结构化数据

T1、通过调用外部工具(例如ChatGPT插件)创建能够回答问题的聊天机器人

T2、将自然语言转换为API调用或数据库查询

T3、从文本中提取结构化数据

2、函数调用三步骤示例

现在波士顿的天气如何?

模型更新与价格调整

1、新模型

2、模型弃用

3、价格降低

基于OpenAl的Python SDK使用函数调用应用案例

1、基础案例

LLMs之GPT-4:基于OpenAl新增函数调用功能的简介、两种方法(原生SDK和LangChain框架)实现之详细攻略

2、进阶案例

(1)、通过自定义函数来计算函数x**2在[1,5]的积分的开平方,来教会GPT-3.5做对这个问题

函数调用和其他API更新

更新内容简介

我们今年早些时候发布了gpt-3.5-turbo和gpt-4,并且在短短几个月内,我们看到开发者在这些模型之上构建了令人难以置信的应用程序。

今天,我们将跟进一些令人兴奋的更新:

函数调用

1、函数调用使开发者能够更可靠地从模型中获取结构化数据

开发者现在可以向gpt-4-0613和gpt-3.5-turbo-0613描述函数,并让模型智能地选择输出一个包含调用这些函数的参数的JSON对象。这是一种更可靠地将GPT的能力与外部工具和API连接起来的新方法。

这些模型经过了微调,既可以检测到何时需要调用函数(取决于用户的输入),也可以响应符合函数签名的JSON。函数调用使开发者能够更可靠地从模型中获取结构化数据。例如,开发者可以:

T1、通过调用外部工具(例如ChatGPT插件)创建能够回答问题的聊天机器人

将类似“发送电子邮件给Anya,看看她是否想在下周五喝咖啡”这样的查询转换为类似于send_email(to: string, body: string)的函数调用,或者将“波士顿的天气如何?”转换为get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')。

T2、将自然语言转换为API调用或数据库查询

将“本月我最重要的十个客户是谁?”转换为类似于get_customers_by_revenue(start_date: string, end_date: string, limit: int)的内部API调用,或者将“上个月Acme公司下了多少订单?”转换为使用sql_query(query: string)的SQL查询。

T3、从文本中提取结构化数据

定义一个名为extract_people_data(people: [{name: string, birthday: string, location: string}])的函数,以提取在维基百科文章中提到的所有人物。

这些用例通过我们的/v1/chat/completions端点中的新API参数functions和function_call得以实现,开发者可以通过JSON模式向模型描述函数,并可选择要求它调用特定的函数。请参阅我们的开发者文档并添加evals,以便在发现函数调用可以改进的情况下开始使用。

2、函数调用三步骤示例

现在波士顿的天气如何?

自ChatGPT插件的Alpha版本发布以来,我们在使工具和语言模型安全合作方面积累了很多经验。然而,仍然存在一些开放的研究问题。例如,概念验证漏洞演示了如何使用来自工具输出的不受信任的数据指示模型执行意外操作。我们正在努力减轻这些和其他风险。开发者可以通过仅使用来自受信任工具的信息以及在执行具有现实影响的操作(如发送电子邮件、在线发布或购买)之前包含用户确认步骤来保护其应用程序。

模型更新与价格调整

1、新模型

2、模型弃用

3、价格降低

我们持续提高系统效率,并将这些节省成本传递给开发者,从今天开始生效。

基于OpenAl的Python SDK使用函数调用应用案例

1、基础案例

LLMs之GPT-4:基于OpenAl新增函数调用功能的简介、两种方法(原生SDK和LangChain框架)实现之详细攻略

https://yunyaniu./article/details/131326060

2、进阶案例

(1)、通过自定义函数来计算函数x**2在[1,5]的积分的开平方,来教会GPT-3.5做对这个问题

知乎的段小草提供了一个很好的案例:通过自定义函数来计算函数x**2在[1,5]的积分的开平方,来教会GPT-3.5做对这个问题

文章链接

OpenAI 重磅更新,API 添加新函数调用能力,能处理更长上下文,价格又降了 75%,有哪些影响? - 知乎

# 第一步,定义GPT API和自然语言描述的问题

# 函数f(x)=x^2在区间[0,5]上的定积分的开平方是多少?"

# 第二步,实现这个计算,我们先定义积分和开方的函数

# 字符串转为被积函数

# 进行数值积分

# 计算 9 的平方根

# 第三步,需要描述这两个函数,作为 GPT API functions参数

# 第四步,进行 API chat completion 的调用即可

# 增加相应的多轮对话和函数执行判断

为了回答「函数f(x)=x^2在区间[0,5]上的定积分的开平方是多少?」

GPT 一共进行了三步

第一步,判断需要调用积分函数,提供参数为 x**2, 0 , 5。(本地执行积分结果 41.67)

第二步,判断需要调用开方函数,提供参数为 41.67。(本地执行结果为 6.455)

第三步,回答原问题。

'''知乎的段小草提供了一个很好的案例:通过自定义函数来计算函数x**2在[1,5]的积分的开平方,来教会GPT-3.5做对这个问题文章链接:/question/606520916/answer/3073018455'''# 第一步,定义GPT API和自然语言描述的问题import osimport requestsimport openaiopenai.api_key = os.getenv("OPENAI_API_KEY")COMPLETION_MODEL = "gpt-3.5-turbo-0613"QUESTION = ("函数f(x)=x^2在区间[0,5]上的定积分的开平方是多少?")messages = [{"role": "user", "content": QUESTION},]def chat_completion_request(messages, functions=None, model=COMPLETION_MODEL):headers = {"Content-Type": "application/json","Authorization": "Bearer " + openai.api_key,}json_data = {"model": model, "messages": messages}if functions is not None:json_data.update({"functions": functions})try:response = requests.post("/v1/chat/completions",headers=headers,json=json_data,)return responseexcept Exception as e:print("Unable to generate ChatCompletion response")print(f"Exception: {e}")return e# 第二步,实现这个计算,我们先定义积分和开方的函数from scipy import integrateimport math# 字符串转为被积函数def str2fx(formula_str):return eval('lambda x: ' + formula_str)# 进行数值积分def cauculate_quad(formula_str, a, b):integral, error = integrate.quad(str2fx(formula_str), a, b)return integral# 计算 9 的平方根def cauculate_sqrt(x):return math.sqrt(x)# 第三步,需要描述这两个函数,作为 GPT API functions参数functions_desc = [{"name": "cauculate_quad","description": "计算函数的积分","parameters": {"type": "object","properties": {"formula_str": {"type": "string","description": "一个数学函数的表达式. For example, x**2",},"a": {"type": "number","description": "积分区间的左端点. For example, 1.0",},"b": {"type": "number","description": "积分区间的右端点. For example, 5.0",},},"required": ["formula_str", "a", "b"],},},{"name": "cauculate_sqrt","description": "计算一个数值的开平方","parameters": {"type": "object","properties": {"x": {"type": "number","description": "被开方数. For example, 2.0",},},"required": ["x"],},},]# 第四步,进行 API chat completion 的调用即可# 增加相应的多轮对话和函数执行判断import jsonwhile True:chat_response = chat_completion_request(messages, functions=functions_desc)response = chat_response.json()print(response)if response['choices'][0]["finish_reason"] == "stop":print(response['choices'][0]["message"]["content"])breakelif response['choices'][0]["finish_reason"] == "function_call":fn_name = response['choices'][0]["message"]["function_call"]["name"]arguments = response['choices'][0]["message"]["function_call"]["arguments"]arguments_json = json.loads(arguments)function = locals()[fn_name]result = function(**arguments_json)messages.append({"role": "assistant","content": None,"function_call": {"name": fn_name,"arguments": arguments,},})messages.append({"role": "function","name": fn_name,"content": f'{{"result": {str(result)} }}'})chat_response = chat_completion_request(messages, functions=functions_desc)'''为了回答「函数f(x)=x^2在区间[0,5]上的定积分的开平方是多少?」GPT 一共进行了三步第一步,判断需要调用积分函数,提供参数为 x**2, 0 , 5。(本地执行积分结果 41.67)第二步,判断需要调用开方函数,提供参数为 41.67。(本地执行结果为 6.455)第三步,回答原问题。输出结果{'id': 'chatcmpl-7RMi4hIimsD4hwKv4kEYI2H6BUVAD', 'object': 'pletion', 'created': 1686756508, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': None, 'function_call': {'name': 'cauculate_quad', 'arguments': '{\n"formula_str": "x**2",\n"a": 0,\n"b": 5\n}'}}, 'finish_reason': 'function_call'}], 'usage': {'prompt_tokens': 189, 'completion_tokens': 30, 'total_tokens': 219}}{'id': 'chatcmpl-7RMi7rdugXYxrzsREblPvQ74LVbQq', 'object': 'pletion', 'created': 1686756511, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': None, 'function_call': {'name': 'cauculate_sqrt', 'arguments': '{\n"x": 41.66666666666667\n}'}}, 'finish_reason': 'function_call'}], 'usage': {'prompt_tokens': 241, 'completion_tokens': 21, 'total_tokens': 262}}{'id': 'chatcmpl-7RMiAFPk8JNNeu9rBPl2wTdxNSBnn', 'object': 'pletion', 'created': 1686756514, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '函数f(x)=x^2在区间[0,5]上的定积分的开平方是约等于6.455。'}, 'finish_reason': 'stop'}], 'usage': {'prompt_tokens': 284, 'completion_tokens': 34, 'total_tokens': 318}}函数f(x)=x^2在区间[0,5]上的定积分的开平方是约等于6.455。'''

{'id': 'chatcmpl-7RMi4hIimsD4hwKv4kEYI2H6BUVAD', 'object': 'pletion', 'created': 1686756508, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': None, 'function_call': {'name': 'cauculate_quad', 'arguments': '{\n"formula_str": "x**2",\n"a": 0,\n"b": 5\n}'}}, 'finish_reason': 'function_call'}], 'usage': {'prompt_tokens': 189, 'completion_tokens': 30, 'total_tokens': 219}}{'id': 'chatcmpl-7RMi7rdugXYxrzsREblPvQ74LVbQq', 'object': 'pletion', 'created': 1686756511, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': None, 'function_call': {'name': 'cauculate_sqrt', 'arguments': '{\n"x": 41.66666666666667\n}'}}, 'finish_reason': 'function_call'}], 'usage': {'prompt_tokens': 241, 'completion_tokens': 21, 'total_tokens': 262}}{'id': 'chatcmpl-7RMiAFPk8JNNeu9rBPl2wTdxNSBnn', 'object': 'pletion', 'created': 1686756514, 'model': 'gpt-3.5-turbo-0613', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '函数f(x)=x^2在区间[0,5]上的定积分的开平方是约等于6.455。'}, 'finish_reason': 'stop'}], 'usage': {'prompt_tokens': 284, 'completion_tokens': 34, 'total_tokens': 318}}函数f(x)=x^2在区间[0,5]上的定积分的开平方是约等于6.455。'''

GPT-4:06月13日OpenAI重大更新的简介(新增函数调用/模型更新/上下文长度扩大4倍/使用成本降低) 基于OpenAl的Python SDK实现函数调用应用案例之详细攻略

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。