工具调用
支持 OpenAI 标准的 tools / tool_calls 协议。
请求示例
bash
curl https://api.aiqizhilian.tech/v1/chat/completions \
-H "Authorization: Bearer <你的 API Key>" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "user",
"content": "查询订单 A1001 的状态。"
}
],
"max_tokens": 256,
"tools": [
{
"type": "function",
"function": {
"name": "get_order_status",
"description": "查询订单状态",
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "订单号"
}
},
"required": ["order_id"]
}
}
}
]
}'响应:模型决定调用工具
如果模型决定调用工具,响应中的 message 会包含 tool_calls:
json
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_xxx",
"type": "function",
"function": {
"name": "get_order_status",
"arguments": "{\"order_id\":\"A1001\"}"
}
}
]
}客户端处理流程:
- 读取
tool_calls。 - 执行对应业务函数(例如真的去查订单数据库)。
- 把工具结果以
tool消息追加回messages。 - 再发起一次 Chat Completions 请求,让模型基于工具结果生成最终回复。
第 3 步的工具结果消息:
json
{
"role": "tool",
"tool_call_id": "call_xxx",
"content": "{\"status\":\"shipped\"}"
}tool_choice 兼容矩阵
支持强制 tool_choice
以下模型可以传入形如 "tool_choice": {"type": "function", "function": {"name": "get_order_status"}} 强制调用指定工具:
gpt-5.5、gpt-5.4- Claude 系列:
claude-opus-4-7/claude-opus-4-6/claude-sonnet-4-6/claude-haiku-4-5-20251001 kimi-k2.6
不建议强制 tool_choice
以下模型不建议强制 tool_choice 指定函数,请改为只传 tools 让模型自动决定:
- Gemini 系列:
gemini-3.1-pro-preview/gemini-3-flash-preview/gemini-2.5-flash glm-5.1- Qwen 系列:
qwen3.7-max/qwen3.6-max-preview/qwen3.6-plus - DeepSeek 系列:
deepseek-v4-pro/deepseek-v4-flash MiniMax-M2.7
实践建议
- 默认只传
tools,把决策权交给模型;强制tool_choice仅在确实知道必须走某工具时使用。 arguments是字符串形式的 JSON,不是对象;解析前JSON.parse/json.loads。- 多轮工具调用时,每次
tool_calls都要按顺序回填对应tool_call_id的工具结果,遗漏会让上下文丢失。 - 工具描述要简明:模型靠
description和parameters描述来选工具,写得越清楚误调用越少。 - 不要在
parameters里塞业务密钥/内部 ID,会随请求出网。