openai.ChatCompletion.create调用工具函数:ChatCompletionMessageToolCall,functions=[tool_call]
将提示词和工具函数(含工具描述)交给openai.ChatCompletion.create,由上述调用生成回复,当OpenAI的模型(OpenAI的服务端)生成回复时,它会根据工具描述来决定是否调用工具。并将这个决定返回客户端。
调用OpenAI的openai.ChatCompletion.create方法中我们知道:OpenAI为服务端(即OpenAI的API端点),应用程序为客户端。应用程序通过openai.ChatCompletion.create方法调用OpenAI的API。这个方法会发送一个HTTP请求到OpenAI的服务器,服务器会处理这个请求,生成回复,并将回复返回给应用程序。因此,生成回复是在OpenAI的服务端进行的,而不是在客户端进行的。
那么,如何调用工具函数呢?
1、将提示词和工具函数(含工具描述)交给openai.ChatCompletion.create,由上述调用生成回复,当OpenAI的模型(OpenAI的服务端)生成回复时,它会根据工具描述来决定是否调用工具。并将这个决定以及格式(函数名及参数值)返回客户端。
2、若需要调用工具,则在客户端进行的调用,并将结果返回给OpenAI的模型(OpenAI的服务端)。即:这些工具的定义和调用是在应用程序的本地环境中进行的,而不是在OpenAI的服务端进行的。
3、OpenAI的模型(OpenAI的服务端)结合工具调用的结果,生成新的回复,返回给客户端。
4、上述过程可能需要多次,因为,可能有多个工具需要调用。另外,通过异步方式可以实现在客户端并行地进行多个工具的调用。
上述OpenAI的服务端与客户端的交互过程,以及客户端调用工具的过程都被openai.ChatCompletion.create封装了,所以从应用程序角度是看不见的。
即:应用程序通过functions参数传递给OpenAI的API一个或多个工具。当模型生成回复时,它会根据这些工具的定义和参数来决定是否调用这些工具。如果需要调用工具,应用程序会执行相应的工具调用逻辑(你要写应用程序和调用点),并将结果返回给OpenAI的服务端。完成交互后,OpenAI的服务端向客户端返回最后的回复。
openai.ChatCompletion.create返回的结果response中,包含是否调用及调用的工具(函数)及参数值,即回复中的ChatCompletionMessageToolCall部分
含一个工具调用的例子:
from openai.types.chat.chat_completion_message_tool_call import (
ChatCompletionMessageToolCall,
Function,
)
# 使用这个工具调用消息
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个智能助手,请根据以下工具调用消息生成回复。"},
{"role": "user", "content": "请帮我查询北京的天气预报。"}
],
functions=[tool_call]
)
print(response.choices[0].message.content)
#这个示例展示了如何使用ChatCompletionMessageToolCall和Function类来定义和调用一个工具,并使用OpenAI的API生成回复。
# 回复中包含的工具调用消息
tool_call = ChatCompletionMessageToolCall(
function=Function(
name="weather_forecast",
description="获取指定城市的天气预报",
parameters={
"type": "object",
"properties": {
"city": {"type": "string", "description": "需要查询的城市名称"},
"date": {"type": "string", "description": "需要查询的日期,格式为YYYY-MM-DD"}
},
"required": ["city"]
}
),
arguments={"city": "北京", "date": "2023-10-01"}
)
有了ChatCompletionMessageToolCall后,你在应用程序中就可以调用了:
tool_call = response.choices[0].message.tool_calls[0]
tool_name = tool_call.function.name
tool_input = json.loads(tool_call['function']['arguments'])
#调用你的函数
tool_response = tool_name(**tool_input))
含多个工具调用的例子:
# 导入必要的类
from openai.types.chat.chat_completion_message_tool_call import (
ChatCompletionMessageToolCall,
Function,
)
# 创建工具调用消息1:获取天气预报
tool_call1 = ChatCompletionMessageToolCall(
function=Function(
name="weather_forecast",
description="获取指定城市的天气预报",
parameters={
"type": "object",
"properties": {
"city": {"type": "string", "description": "需要查询的城市名称"},
"date": {"type": "string", "description": "需要查询的日期,格式为YYYY-MM-DD"}
},
"required": ["city"]
}
),
arguments={"city": "北京", "date": "2023-10-01"}
)
# 创建工具调用消息2:获取股票价格
tool_call2 = ChatCompletionMessageToolCall(
function=Function(
name="stock_price",
description="获取指定股票的实时价格",
parameters={
"type": "object",
"properties": {
"symbol": {"type": "string", "description": "需要查询的股票代码"}
},
"required": ["symbol"]
}
),
arguments={"symbol": "AAPL"}
)
# 使用工具调用消息生成回复
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个智能助手,请根据以下工具调用消息生成回复。"},
{"role": "user", "content": "请帮我查询北京的天气预报和苹果公司的股票价格。"}
],
functions=[tool_call1, tool_call2]
)
print(response.choices[0].message.content)
更多推荐




所有评论(0)