Claude Tool Use 使用指南:让大模型为你“拎工具箱干活”

24 阅读4分钟

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 应用到自己的项目中,不妨从一个简单函数开始试试——比如当前时间、计算器、汇率转换器,然后逐步扩展你的“智能工具箱”。