- 你描述好可用的函数(它们的 schema),带上
tools=发出一个普通请求。 - 模型返回的不是文字,而是一个
tool_calls数组——调用什么、传什么参数。 - 你自己运行函数,然后发出第二次请求,把模型的回复和函数结果都追加进历史。
- 模型返回最终文字。
完整 Python 示例
用经典的get_weather(city) 举例。真实场景里它会去调天气服务;这里返回一个占位结果,让流程更清晰。
常见坑
模型可能一次请求多个调用
模型可能一次请求多个调用
一次回复里的
message.tool_calls 是一个数组,可能包含不止一个调用——比如同时查两个城市的天气。
用循环遍历它,为每一个 tool_call 都追加一条带自己 tool_call_id 的 role="tool" 消息。
只要有一个调用没回结果,下一次请求就会报错。先放模型回复,再放函数结果
先放模型回复,再放函数结果
messages 里的顺序是严格的:先追加模型自己的回复(带 tool_calls 的那个 message 对象),
然后才追加带结果的 role="tool" 消息。如果在没有前置助手回复的情况下直接发结果,
API 会因历史不一致而报错。参数是字符串,不是对象
参数是字符串,不是对象
tool_call.function.arguments 是一个 JSON 字符串,不是现成的字典。使用前必须
用 json.loads(...) 解析。直接对字符串按键取值会报错。