Claude Tool Use 使用指南:让大模型为你“拎工具箱干活”
大家好!今天我们要聊的是 Claude 中一个非常实用的高级能力:Tool Use(工具使用)。如果你之前听说过“Function Call(函数调用)”,那你可能已经了解一点这个功能,但 Tool Use 是 Function Call 的升级版,它的边界更广、功能更强,思维也更灵活。
本指南将带你一步步理解什么是 Tool Use,为什么需要它,以及如何高效地实现自己的工具调用流程。
一、什么是 Tool Use?
Claude 的 Tool Use,是一种允许大模型调用你本地定义的函数的机制。早期它被叫做 Function Call(函数调用),但“函数”听起来像代码世界的一小块。而“工具”这个概念则更形象:就像一个工具箱,里面可以放各种实际可以执行的功能,比如查询天气、调取数据库、计算公式、生成图像……
Claude 本身不会执行这些函数,它的职责是判断是否需要使用某个工具,并根据用户的输入给出调用哪个工具、用什么参数的建议。具体的执行,还是由你本地代码来完成。
二、Tool Use 工作流程概览
我们可以把整个 Tool Use 流程理解为五个步骤:
1. 编写本地工具函数(真实可执行)
def get_stock_price(symbol: str) -> str:
# 示例函数:查询股票价格(真实项目中可以替换为 API 请求)
fake_prices = {"AAPL": 170.56, "TSLA": 187.13}
price = fake_prices.get(symbol.upper())
return f"{symbol.upper()} 当前价格为 ${price}" if price else "找不到该股票代码"
2. 描述这个函数(函数的 JSON Schema)
tools = [
{
"name": "get_stock_price",
"description": "查询金融资产实时价格",
"input_schema": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "标准化的资产代码"
}
},
"required": ["symbol"]
}
}
]
3. 创建消息(Create Messages)
你需要使用 Claude 的 SDK 启动一次对话,将用户输入和 tools 一起发送给 Claude。
from anthropic import Anthropic
client = Anthropic(api_key="your-api-key") # 替换为你的 API Key
messages = [
{"role": "user", "content": "请帮我查一下 AAPL 的当前股价"}
]
4. Claude 分析 Prompt 并判断是否调用函数
你使用 messages.create()
并传入 tools
,Claude 会自动判断是否调用函数,并给出函数名称和参数。
response = client.messages.create(
model="claude-3-sonnet-20240229",
max_tokens=1024,
tools=tools,
messages=messages,
tool_choice="auto" # 也可以是 'any' 或指定某个函数
)
然后你可以读取 Claude 的回复判断是否需要执行:
tool_calls = response.tool_calls
if tool_calls:
for tool_call in tool_calls:
if tool_call.name == "get_stock_price":
args = tool_call.input
result = get_stock_price(**args)
# 将结果传回 Claude 继续处理
response = client.messages.create(
model="claude-3-sonnet-20240229",
max_tokens=1024,
messages=[
*messages,
{"role": "assistant", "tool_calls": [tool_call]},
{"role": "user", "content": result}
]
)
print(response.content[0].text)
三、函数描述格式详解(Tools 参数)
tools
是一个数组,数组中的每一项是一个 JSON 对象,对应一个工具函数。主要包含:
name
:函数名称,符合格式要求description
:功能描述parameters
:参数结构,使用 JSON Schema 格式
见上文代码示例。
四、为什么不直接传函数代码给 Claude?
Claude 本身 不执行代码,而且阅读源码不一定能准确推理其作用。通过 JSON Schema 的结构化方式,你能更明确告诉模型:函数是干什么的、怎么调用、有什么参数。这种描述方式更高效、更准确、也更可控。
五、实用建议
- 🔧 工具尽量少而精:工具太多会干扰判断
- 📦 工具箱建模思维:每个函数是一把工具,写清楚说明书
- 🧠 描述优于 prompt 技巧:结构化比语言引导更可靠
- 💰 注意 Token 消耗:每个工具描述都占 token,控制详细度
- 🧪 确保函数可用:Claude 不会执行,只能你来处理返回值
六、Tool Use 能带来哪些能力增强?
Tool Use = AI + 函数能力:
- 🚀 实时数据:天气、股价、汇率、数据库
- 🧮 数学计算:公式处理、复杂推理(大模型的计算能力一般比较弱,所以会提供计算能力的function tool)
- 📊 文本与文件处理:PDF、图像、OCR、摘要
- ⚙️ 自动化工作流:调用外部系统、生成文档、工作调度
只要你能提供函数并写好说明,Claude 就可以理解并调用。
七、总结
Claude 的 Tool Use 是一次范式升级:你不再仅靠 Prompt 去“让模型猜”,而是提供清晰的接口描述 + 真正可执行的函数。
你只需要两样东西:
✅ 一个结构化的 JSON Schema 函数描述 ✅ 一个真实可运行的函数本体
装好“工具箱”,Claude 就能根据你的自然语言请求,自动判断、选工具、给参数、完成调用,真正做到“让智能体为你干活”。
如果你希望把 Tool Use 应用到自己的项目中,不妨从一个简单函数开始试试——比如当前时间、计算器、汇率转换器,然后逐步扩展你的“智能工具箱”。