Claude Tool Use 教程:从工具定义到多轮调用
Claude Tool Use 教程:手把手教你用 Anthropic Claude API 实现工具调用,从工具定义、单轮调用到多轮对话中的工具使用,含完整 Python 代码示例。
这篇教程适合你吗
你已经用过 Claude API 做基础对话(可以看 Claude API 教程),现在想让 Claude 能调用外部工具。如果你熟悉 OpenAI 的 Function Calling,这篇帮你快速上手 Claude 的对应功能。
不适合:没写过 API 调用代码的读者。建议先看 OpenAI API 教程 或 Claude API 教程。 最终产物:用 Claude API 实现工具调用的完整 Python 代码。环境假设
- Python 3.8+
anthropicPython SDK- Anthropic API Key
> 合规提醒:Anthropic Claude API 是海外服务,使用时请遵守所在地法律法规和服务条款。如遇网络连接问题,可参考海外 AI 工具使用指南。
Claude Tool Use 的完整流程
定义 tools → 发送请求 → Claude 返回 tool_use 块 → 你执行工具 → 把结果发回 → Claude 生成最终回答
和 OpenAI Function Calling 逻辑一致,但 API 格式不同。
第一步:定义工具
Claude 的工具定义格式:
tools = [
{
"name": "get_weather",
"description": "查询指定城市的当前天气信息",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,例如 北京"
}
},
"required": ["city"]
}
}
]
和 OpenAI 的区别:Claude 把参数 schema 放在 input_schema 字段里,OpenAI 放在 parameters 里。
第二步:发送请求
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "北京今天天气怎么样?"}
]
)
print(response.stop_reason) # "tool_use" 表示模型要求调用工具
第三步:解析工具调用
Claude 的响应 content 是一个列表,可能包含文本块和工具调用块:
for block in response.content:
if block.type == "text":
print(f"文本: {block.text}")
elif block.type == "tool_use":
print(f"工具调用: {block.name}")
print(f"参数: {block.input}")
# block.id 是这次调用的唯一标识,后面要用
第四步:执行工具并返回结果
import json
# 构造包含工具结果的消息
tool_results = []
for block in response.content:
if block.type == "tool_use":
if block.name == "get_weather":
# 你自己的函数,执行实际逻辑
result = get_weather(block.input["city"])
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": json.dumps(result, ensure_ascii=False)
})
# 把工具结果发回给 Claude
messages = [
{"role": "user", "content": "北京今天天气怎么样?"},
{"role": "assistant", "content": response.content},
{"role": "user", "content": tool_results}
]
final_response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=messages
)
print(final_response.content[0].text)
# → "北京今天天气晴朗,气温 28°C,适合外出。"
关键点:
- 工具结果以
role: "user"的消息发送,不是role: "tool" - 每个结果必须包含
tool_use_id,对应之前调用的block.id - 消息结构是:用户消息 → 助手响应(含 tool_use) → 用户消息(含 tool_result)
多工具并行调用
Claude 可以在一次响应中请求调用多个工具:
tools = [
{"name": "get_weather", "description": "查天气", "input_schema": {...}},
{"name": "get_time", "description": "查时间", "input_schema": {...}}
]
# Claude 可能同时返回两个 tool_use 块
# 你需要分别执行,然后一起返回结果
多轮工具调用
Claude 可能在回答过程中需要多次调用工具:
def chat_with_tools(user_message: str, tools: list) -> str:
messages = [{"role": "user", "content": user_message}]
while True:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=messages
)
# 如果没有工具调用,返回最终文本
if response.stop_reason == "end_turn":
return "".join([b.text for b in response.content if b.type == "text"])
# 有工具调用,执行并继续
messages.append({"role": "assistant", "content": response.content})
tool_results = []
for block in response.content:
if block.type == "tool_use":
result = execute_tool(block.name, block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": json.dumps(result, ensure_ascii=False)
})
messages.append({"role": "user", "content": tool_results})
常见问题与排错
Claude 不调用工具
原因:工具描述不清晰,或模型认为不需要工具。 解决:在系统消息中明确「当用户问到 XX 类问题时,使用 XX 工具」。工具的 description 要写清楚「什么时候用」。工具结果格式错误
原因:tool_result 的 content 必须是字符串。
解决:用 json.dumps() 把结果序列化为字符串。如果是错误信息,用 is_error: True 标记。
进阶学习
- 不了解 Claude API?看 Claude API 教程
- 想了解 OpenAI 的工具调用?看 Function Calling 教程
- 想了解结构化输出?看 OpenAI 结构化输出教程
- 想了解工具调用的原理?看 AI 工具调用是什么
总结
- Claude Tool Use 和 OpenAI Function Calling 逻辑一致,API 格式不同
- 工具定义用
input_schema,工具调用在content块中 - 支持并行调用和多轮调用
- 工具结果通过
role: "user"的消息返回
---
本文最后更新于 2026-07-27。代码示例基于当前常见版本,请根据最新 API 文档调整。保障 API 调用稳定性
调用 OpenAI、Anthropic 等海外 API 时,网络波动可能导致请求超时或失败。稳定的网络环境有助于提升开发效率。
⚠️ 请遵守所在地的法律法规和服务条款。使用 AI API 时请遵守各平台的使用政策。
了解安全上网方案 →常见问题
相关推荐
Claude API 使用教程:从申请到调用
Claude API 怎么用?本文从申请 API Key 到 Python 调用,手把手教你使用 Anthropic 的 Claude API,含基础对话、工具调用和最佳实践。
Function Calling 教程:用工具调用搭建可执行 AI 助手
Function Calling 教程:从工具定义到多轮调用,手把手教你让大模型调用外部函数、查询数据库和执行操作,搭建真正能做事的 AI 助手。
OpenAI 结构化输出教程:让模型稳定返回 JSON
OpenAI 结构化输出教程:用 Structured Outputs 和 JSON Schema 约束大模型的返回格式,告别解析失败和格式混乱,让 AI 输出可靠地接入你的应用。
AI 工具调用是什么?Function Calling、插件和 API 怎么区分
AI 工具调用是什么?解释 Function Calling 的原理、与插件和 API 调用的区别,以及工具调用在 AI Agent 中的作用。
获取更多 AI 内容
订阅更新,第一时间获取新教程和工具推荐。