介紹
大型語言模型 (LLM) 與一般的會話 UI 一樣,可以有效地以會話自然語言的形式接收高度非結構化的資料。
這些非結構化資料随後被結構化、處理并随後以自然語言輸出的形式再次非結構化。
OpenAI 函數調用以 API 的形式為機器消費建構輸出,與以非結構化自然語言形式的人類消費相對
函數調用
通過 API 調用,您可以向gpt-3.5-turbo-0613和提供函數gpt-4–0613,并讓模型智能地生成一個包含參數的 JSON 對象,然後您可以使用這些參數在您的代碼中調用該函數。
Chat Completion API 不直接調用函數;相反,它會生成一個 JSON 文檔,您可以在代碼中使用該文檔。
在此處閱讀有關 OpenAI 函數調用的更多資訊。
使用 OpenAI 函數調用,重點是 JSON 輸出。
下面是函數調用的實際例子:
建立通過調用外部 API 回答問題的聊天機器人:
在此示例中,編譯了一封電子郵件,其中定義了幾個字段,需要從自然語言輸入中填充這些字段。
如果 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\": \"[email protected]\",\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.)”