大型语言模型 (LLM) 与一般的会话 UI 一样,可以有效地以会话自然语言的形式接收高度非结构化的数据。
这些非结构化数据随后被结构化、处理并随后以自然语言输出的形式再次非结构化。
OpenAI 函数调用以 API 的形式为机器消费构建输出,与以非结构化自然语言形式的人类消费相对
通过 API 调用,您可以向gpt-3.5-turbo-0613
和提供函数gpt-4–0613
,并让模型智能地生成一个包含参数的 JSON 对象,然后您可以使用这些参数在您的代码中调用该函数。
Chat Completion API 不直接调用函数;相反,它会生成一个 JSON 文档,您可以在代码中使用该文档。
在此处阅读有关 OpenAI 函数调用的更多信息。
使用 OpenAI 函数调用,重点是 JSON 输出。
下面是函数调用的实际例子:
在此示例中,编译了一封电子邮件,其中定义了几个字段,需要从自然语言输入中填充这些字段。
如果 JSON 文档定义不正确,OpenAI 模型将引发错误。因此,在定义需要填充的 JSON 结构方面存在一定程度的刚性。
pip 安装 openai导入
o s
导入openai
导入请求
导入json
openai.api_key = "xxxxxxxxxxxxxxxxxx"
url = "https://api.openai.com/v1/chat/completions"
payload = json.dumps({
"model" : "gpt -4-0613" ,
"messages" : [
{
"role" : "user" ,
"content" : "给 HumanFirst AI 的 Cobus 发一封电子邮件,请他提供销售预测电子表格。安排明天中午 12 点发送邮件。 "
}
],
"函数":[
{
“名称”: "send_email" ,
"description" : "发送电子邮件的模板。" ,
“参数”:{
“类型”:“对象”,
“属性”:{
“to_address”:{
“类型”:“字符串”,
“描述”:“电子邮件地址”
},
“正文”:{
“ type" : "string" ,
"description" : "邮件正文"
},
"
:“必须发送电子邮件的日期。”
},
"time" : {
"type" : "string" ,
"description" : "邮件必须发送的时间。"
}
} }
}
]
}
)
headers = {
'Content-Type' : 'application/json' ,
'Authorization' : 'Basic xxxxxxxxxxxx'
}
response = requests.request( "POST" , url, headers=headers, data=payload )
打印(response.text)
模型的响应:
{
“id” : “chatcmpl-7RjMh7I0rVmCJkTCk4wvHDSNg8uQQ” ,
“对象” : “chat.completion” ,
“创建” : 1686843595 ,
“模型” : “gpt-4-0613” ,
“选择” : [
{
“索引” : 0 ,
“消息” : {
“角色” : “助理” ,
“内容” : 空,
“function_call” : {
“名称” : “send_email” ,
“参数” : "{\n \"to_address\": \"Cobus@HumanFirst.ai\",\n \"body\": \"你好 Cobus,\\n\\n你能提供销售预测电子表格吗?\\n\\n最好的问候\",\n \"date\": \"tomorrow\",\n \"time\": \"12 noon\"\n}" } }
,
" finish_reason
" : " function_call"
}
] ,
"usage" : {
"prompt_tokens" : 118 ,
"completion_tokens" : 65 ,
"total_tokens" : 183
}
}
但是,有一些注意事项:
以编程方式,聊天机器人/会话 UI 必须知道 LLM 的输出必须是 JSON 格式。因此,必须有某种分类或意图识别来检测输出类型应该是 JSON。
必须存在并定义一个预定义模板,以输入完成 LLM。如示例中所示,JSON 模板指导 LLM 如何填充值。
更重要的是,如示例中所示,必须明确定义应填充的参数。失败会导致以下错误:“We could not parse the JSON body of your request. (HINT: This likely means you aren’t using your HTTP library correctly. The OpenAI API expects a JSON payload, but what was sent was not valid JSON. If you have trouble figuring out how to fix this, please contact us through our help center at help.openai.com.)”