跳到主要内容

工具使用 / 函数调用

进阶

工具使用 让 Claude 调用 定义的函数——搜索、计算器、你的数据库、任意 API——并使用其结果。它是每一个 智能体 的基础。

What you'll learn
  • 四步智能体循环是如何工作的,从工具定义到最终答案
  • 如何用 Python 定义一个工具,包含名称、描述和 JSON-Schema 输入
  • 为什么工具描述充当提示词,塑造 Claude 何时以及如何调用它们
  • 如何校验输入、将错误作为结果返回,并安全地使用服务端工具

循环

工具使用是一场对话,而非单次调用。你向 Claude 递上一份工具菜单;Claude 挑选其中一个并暂停;你执行它并回报结果;Claude 将结果融入它的答案中——按需重复。

Guided walkthrough1 of 4
  1. 你包含一个工具定义列表——每个都带有名称、描述和 JSON-Schema 输入。

定义一个工具(Python)

一个工具定义就是一个名称、一段通俗语言的描述,以及一份用于输入的 JSON-Schema。把它传入 tools,然后检查 stop_reason 来得知 Claude 何时想要行动。

get_weather 工具 + 首次调用

tools = [{
  "name": "get_weather",
  "description": "Get current weather for a city.",
  "input_schema": {
      "type": "object",
      "properties": {"city": {"type": "string"}},
      "required": ["city"],
  },
}]

msg = client.messages.create(
  model="claude-sonnet-5", max_tokens=1024,
  tools=tools,
  messages=[{"role": "user", "content": "What's the weather in Rome?"}],
)
# If msg.stop_reason == "tool_use": run the tool, then send a tool_result back.

提示

在你如何定义和处理工具上的细微选择,会在可靠性上产生巨大的差别。

  • 描述就是提示词。 清晰的工具 description 和参数文档会极大地改善 Claude 何时/如何调用它。
  • 在执行之前 校验你收到的输入——切勿盲目信任。
  • 将错误作为结果返回。 如果某个工具失败,发回一个描述该错误的 tool_result,让 Claude 能够恢复。
  • 服务端工具。 Anthropic 还提供内置工具(例如网页搜索、代码执行、计算机使用)——查阅文档了解当前可用清单。

:::warning 工具 = 行动 = 风险 能采取真实行动的工具继承了一套安全模型。请套用最小权限,并对高风险调用保持人在回路——参见 保护智能体与工具安全。 :::

工具使用词汇
按 Enter 或空格键翻转卡片。使用左右方向键在卡片之间切换。已显示术语。
1 / 4

自我检验

0/3
  1. 在 Claude 返回一个 tool_use 块之后,由谁来运行该工具?
  2. 你定义的某个工具在运行时失败了。推荐的做法是什么?
  3. 为什么清晰的工具描述如此重要?
Key takeaways
  • 工具使用是一个循环:发送工具定义,Claude 返回一个 tool_use 块并停止,你执行并返回一个 tool_result,Claude 继续直到给出答案。
  • 一个工具定义就是一个名称、一段描述和一份 JSON-Schema 输入——把它传入 tools 并检查 stop_reason == tool_use。
  • 描述就是提示词;在执行之前校验输入;将失败作为 tool_result 错误返回,让 Claude 能够恢复。
  • Anthropic 还提供服务端工具,而任何采取真实行动的工具都需要最小权限外加人在回路。

下一步