Function Calling
了解如何使用函数调用将大型语言模型连接到外部工具。
介绍
使用 API 时,您可以定义模型可以选择调用的函数,从而生成具有必要参数的 JSON 对象。Chat Completions API 本身不执行这些函数;相反,它会输出 JSON,然后您可以使用该 JSON 在代码中调用该函数。
最新模型(gpt-4o、gpt-4-turbo 和 gpt-3.5-turbo)旨在根据输入检测何时应调用函数,并生成与函数签名紧密匹配的 JSON。但是,此功能存在潜在风险。我们强烈建议您在执行可能影响实际操作的操作(例如,发送电子邮件、在线发帖、进行购买)之前实施用户确认步骤。
本指南重点介绍使用 Chat Completions API 进行函数调用。
常见用例
通过函数调用,您可以可靠地从模型中获取结构化数据。例如,您可以:
创建通过调用外部 API 回答问题的助手
示例函数:
send_email(to: string, body: string),get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
将自然语言转换为 API 调用
转换示例: "谁是我的头号顾客?" to
get_customers(min_revenue: int, created_before: string, limit: int), 然后调用您的内部 API
从文本中提取结构化数据
示例函数:
extract_data(name: string, birthday: string),sql_query(query: string)
函数调用的基本步骤顺序
调用模型 使用用户查询和
functions参数中定义的一组函数来进行调用模型。模型响应: 模型可以选择调用一个或多个函数。如果是这样,它将输出一个符合您的自定义架构的字符串化 JSON 对象(注意:模型可能会产生幻觉参数)。
解析 JSON: 在您的代码中,将字符串解析为 JSON,并使用提供的参数(如果存在)调用函数。
再次调用模型: 将函数响应作为新消息附加,并让模型将结果汇总回给用户。
支持的型号
gpt-4o-2024-05-13gpt-4-turbogpt-4-turbo-2024-04-09gpt-4-turbo-previewgpt-4-0125-previewgpt-4-1106-previewgpt-4gpt-4-0613gpt-3.5-turbogpt-3.5-turbo-0125gpt-3.5-turbo-1106gpt-3.5-turbo-0613
例子
import os
import json
import openai
client = openai.OpenAI(
base_url="https://api2.vtstg233.cc/v1",
api_key='我的令牌密钥sk-xxxxx',
)
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定位置的当前天气情况",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "省和市,例如广东省,广州市"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
}
}
}
}
]
messages = [
{"role": "system", "content": "你是一个能够访问外部功能并提供帮助的助手。这些功能调用的回应将会被追加到这个对话中。请根据这些功能调用的信息提供回应。"},
{"role": "user", "content": "广州,清远市目前的温度是多少?"}
]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))
最后更新于