Skip to content

案例:Anthropic 的 Tool Use Content Blocks

Anthropic 和 OpenAI 最大的工程差异之一,就是工具调用结果经常出现在 content blocks 里,而不是统一的 message.tool_calls

你要抓住的核心

对于 Anthropic,常见解析思路是:

  1. 遍历 content blocks
  2. 找出所有 tool_use
  3. 逐个执行
  4. tool_result 回填成新的消息块
  5. 再次请求模型

伪代码结构

python
response = client.messages.create(...)

for block in response.content:
    if block.type == "tool_use":
        tool_name = block.name
        tool_input = block.input
        result = run_tool(tool_name, tool_input)
        tool_results.append({
            "type": "tool_result",
            "tool_use_id": block.id,
            "content": json.dumps(result, ensure_ascii=False)
        })

followup = client.messages.create(
    model=model,
    tools=tools,
    messages=[
        *history,
        {"role": "assistant", "content": response.content},
        {"role": "user", "content": tool_results}
    ]
)

常见误区

  • 把 Anthropic 当成 OpenAI 一样只找 tool_calls
  • 没保留原始 content blocks
  • tool_result 对应不到正确 tool_use_id

聚焦 OpenClaw、tool_calls、function calling 与 agent 实战。