功能指南

工具调用

文档最后更新于 2026年10月16日 02:29

三种请求格式下的工具声明、调用中断原因与结果回传字段,以及一轮完整的「发请求 → 执行 → 回传」流程。

工具调用按各协议的原生格式透传:Anthropic 格式用 tools + input_schema,OpenAI 格式用 tools + function.parameters,Responses API 用 tools + 顶层 name / parameters。流程都是三步:带工具发请求 → 客户端执行工具 → 把结果回传给模型。

OpenAI 格式工具经平台转换到 Claude 协议线路时,平台会自动整理 input_schema:删除不被接受的键(如 $schema、strict、examples、default)、过滤不存在于 properties 的 required、把顶层 oneOf / anyOf / allOf 合并为单一对象 schema(嵌套层保留;合并后上游不再强制「只能填其中一组参数」,由模型按描述选择);工具名含点 / 空格 / 中文时上游收到合法名,返回给你的仍是原名。上游仍拒绝该 schema 时,平台会在同一线路用更严格的整理方式自动再试一次。客户端无需改。

请求体示例

带工具的推理请求

Anthropic 格式:

json
{
  "model": "claude-sonnet-5",
  "max_tokens": 256,
  "tools": [
    {
      "name": "get_weather",
      "description": "查询城市天气",
      "input_schema": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] }
    }
  ],
  "messages": [{ "role": "user", "content": "北京现在天气怎么样?" }]
}

模型决定调用时,stop_reason 为 tool_use,content 里有 type 为 tool_use 的块,含 id、name 与 input。

OpenAI 格式:

json
{
  "model": "gpt-5.6-sol",
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "查询城市天气",
        "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] }
      }
    }
  ],
  "messages": [{ "role": "user", "content": "北京现在天气怎么样?" }]
}

模型决定调用时,finish_reason 为 tool_calls,调用在 choices[0].message.tool_calls[],参数是 JSON 字符串 function.arguments。

客户端执行工具

从响应中取出工具名与参数,由客户端程序执行(如查询天气、查询数据库),得到结果。

回传工具结果

将模型的工具调用消息与执行结果一并追加到对话后再次请求。Anthropic 格式在 user 消息里放 tool_result 块(tool_use_id 对应上一步的 id);OpenAI 格式追加 role 为 tool 的消息(tool_call_id 对应 tool_calls[].id)。模型据此生成最终回复,stop_reason 回到 end_turn(OpenAI 为 stop)。

最佳实践

  • ·写清 description 与参数 schema,模型据此决定何时调用以及如何填写参数
  • ·循环处理:响应仍为工具调用时,执行并回传结果,直到停止原因不再是 tool_use / tool_calls
  • ·工具结果尽量精简,长结果会计入后续请求的输入 token

共 30 篇文档。文中出现的模型名与价格以模型广场的实时数据为准。