官方的翻译链接在这里,GPT函数调用,看完后,有点似懂非懂的感觉,还是需要实践。
GPT 函数调用是什么(What-Is)
一句话说明,就是为GPT提供分析所需的数据,比如例子中的某地天气,在没有 GPT不能联网的场景下,没有函数调用,GPT 只能靠猜或者瞎说(幻觉)。 或者一些不依靠推理的数据,通过函数调用告知 GPT,方便做下一步的推理,比如昨天的销量是多少。 或者固定的格式化的数据结构,你的业务系统中数据流转,数据需要保持的格式。
怎么使用 GPT 函数调用(How-To)
API中才能使用
在官方聊天界面中,这个功能无法使用的,在 API 调用使用,毕竟需要指定参数,也可以在 OpenAI Playground 中使用。
设置函数描述
在消息类型为 user 的消息中,设置函数描述,即带上参数 functions=[{函数描述1,函数描述2}]
,其中函数描述结构体:
{
"name": "function_name",
"description": "function description",
"parameters": {
"type": "object",
"properties": {
"category": {
"type": "string", "description": "类别"
},
"value": {
"type": "string", "description": "价值"
}
},
"required": ["category", "price"]
},
}
函数执行
判断是否需要执行函数,这个由 GPT 推理决定。
如果需要执行,API 的返回体中,content = null,function_name = 前面设置的方法名称。 这就告诉你,GPT 需要执行指定的函数,还给了方法执行的参数,比如这种:
{
"role": "assistant",
"content": null,
"function_call": {
"name": "function_name",
"arguments": "{\n \"category\": \"\u5976\u8336\",\n \"value\": \"6\u5143\"\n}"
}
}
这就需要使用者,调用代码中的函数,执行方法,GPT API 本身不会去执行。
if assistant_message.get("function_call"):
results = execute_function_call(assistant_message) # 执行方法
messages.append({"role": "function", "content": results, "name": assistant_message["function_call"]["name"]})
执行后续
可以将后续的结果作为参数返回给 GPT,返回给 GPT 消息需要指定参数类型为 function,比如:
messages.append(
{
"role": "function",
"name": function_name,
"content": function_response,
}
) # 用函数响应扩展对话
总结(Final)
GPT 推断出,是否需要调用函数,将需要执行的函数名称、参数,给使用者,使用者调用函数,将结果告知给 GPT。
这个依靠 GPT 的推断过程,不一定是 100% 正确,分析不准确,分析的参数错误,也是有的,比如参数需要一个纯数字,它可能告诉使用者,参数为6元,6块,60分,都是有可能的。
可能使用的场景
比如,智能分析,终端用户:“告诉我昨天的销量如何?”,GPT,调用你的数据库SQL查询后,再告诉终端用户结果。
比如,记录数据,终端用户:“xx城市xx有哪些地方可以玩”,GPT,调用你的文件读写函数,新增一条记录。 很多场景可以畅想下。