Skip to content

工具调用

支持 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\"}"
      }
    }
  ]
}

客户端处理流程:

  1. 读取 tool_calls
  2. 执行对应业务函数(例如真的去查订单数据库)。
  3. 把工具结果以 tool 消息追加回 messages
  4. 再发起一次 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.5gpt-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 的工具结果,遗漏会让上下文丢失。
  • 工具描述要简明:模型靠 descriptionparameters 描述来选工具,写得越清楚误调用越少。
  • 不要在 parameters 里塞业务密钥/内部 ID,会随请求出网。