加载中
加载中

内置工具

您可以构建自己的自定义工具,但有些功能足够常见,以至于Anthropic已经预先构建好了。您不需要编写代码,不需要托管沙箱。您只需声明该工具,Anthropic就会运行它。

服务器工具:由您声明,由Anthropic运行

Anthropic提供在其基础设施上运行的服务器工具。您不需要执行这些工具——Anthropic会执行。这意味着您不需要为这些调用构建代理循环。Claude会自行调用这些工具,结果会在同一个响应中返回。

主要的服务器工具有:

  • 网络搜索(Web search) — 搜索互联网并返回带有引用的结果
  • 代码执行(Code execution) — 在沙箱中编写并运行Python
  • 网页获取(Web fetch) — 从URL检索完整内容

一个文件中的两个服务器工具

让我们在一个文件中看看其中两个重要的工具:两次messages.create调用,一次使用网络搜索,一次使用代码执行。

python
import anthropic

client = anthropic.Anthropic()

# 调用 1:web search —— Anthropic 在服务器端运行搜索
search_response = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    tools=[{"type": "web_search_20260209", "name": "web_search"}],
    messages=[
        {"role": "user", "content": "What is Anthropic's latest model release? Answer in one sentence."}
    ],
)

for block in search_response.content:
    if block.type == "server_tool_use":
        print(f"Tool call: {block.name} — {block.input}")
    elif block.type == "text":
        print(block.text)

# 调用 2:code execution —— Claude 在沙箱中编写并运行 Python
code_response = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    tools=[{"type": "code_execution_20260120", "name": "code_execution"}],
    messages=[
        {"role": "user", "content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"}
    ],
)

for block in code_response.content:
    if block.type == "server_tool_use":
        print(f"Tool call: {block.name} — {block.input}")
    elif block.type == "bash_code_execution_tool_result":
        print(f"stdout: {block.content.stdout}")
    elif block.type == "text":
        print(block.text)

需要注意两点:

  1. 这里没有代理循环。 我们不需要根据stop_reason进行切换,也不需要把工具结果推送回去。Anthropic在服务器端运行该工具,响应中已经包含了结果。
  2. 响应中有新的块类型。 一个用于工具调用的server_tool_use块,一个用于输出的代码执行工具结果块,以及常规的text块。

运行它

对于网络搜索,您会看到打印出的Claude工具调用,然后是一句关于最新模型发布的答案,其中已经融入了搜索引用。

对于代码执行,您会看到Claude编写的实际Python代码、沙箱运行它产生的stdout输出,以及最终的文本答案。

我们不需要搭建一个搜索爬虫,也不需要运行Python沙箱。我们只声明了两个工具,就免费获得了这两项能力。

另一类:客户端工具

值得了解还存在另一类工具。客户端工具在您的代码运行的地方运行。Anthropic发布了它们的模式(schema)并在其上训练了Claude,因此您不必自己定义模式。两个例子:

  • 记忆(Memory) — Claude在各个会话之间读写记忆
  • Bash — 一个持久化的bash shell,使Claude能够执行命令

Anthropic文档中的内置工具表格,其中memory和bash被列为客户端工具,与web fetch和code execution等服务器工具并列

它们与自定义工具具有相同的形态,但其模式已内置于Claude中。您的代码仍然负责运行它们:对于记忆,四个SDK提供了一个辅助工具,用于处理Claude针对您提供的存储所发出的记忆调用;对于bash,则由您的应用程序自行运行该shell。

为什么这在生产环境中很重要

在生产应用中,这是实现那些原本需要数周才能完成的功能的最短路径。网络搜索可以为一个事实核查端点提供支持,该端点会根据实时网络验证草稿中的每一个数字和监管方面的声明。

一个使用网络搜索来核查草稿提案中监管和数字声明的提案审查应用

不过有一点提醒:某件事在互联网上得到了验证,并不意味着它就是真的。请始终仔细核查Claude的工作成果。

小结

  • 服务器工具 — 网络搜索、代码执行、网页获取 — 在您的tools数组中声明。由Anthropic运行它们。
  • 您会在同一个响应中获得结果,无需代理循环。请留意server_tool_use和工具结果块,它们会与常规文本块一起出现。
  • 像记忆和bash这样的客户端工具在您的代码运行的地方运行。其模式内置于Claude中,四个SDK为记忆提供了辅助工具,而对于bash,则由您的代码运行该shell。
  • "由Anthropic托管"这一理念可以一路扩展:托管代理(managed agents)将这一理念应用于整个代理,而不仅仅是单个工具。