网络搜索工具让 Claude 可以直接访问实时网络内容,使其能够利用超出其知识截止日期的最新信息来回答问题。响应中包含从搜索结果中提取的来源引用。
使用 web_search_20260209 及更高版本时,Claude 可以编写并运行代码,在搜索结果到达上下文窗口之前对其进行过滤(动态过滤),只保留相关信息。动态过滤适用于 Claude Fable 5、Claude Opus 4.8、Claude Mythos 5、Claude Mythos Preview、Claude Opus 4.7、Claude Opus 4.6、Claude Sonnet 5 和 Claude Sonnet 4.6。
网络搜索工具有三个版本可用:
本页面的示例使用 web_search_20250305 进行基本搜索,使用 web_search_20260318 进行动态过滤。
对于 Claude Mythos Preview,网络搜索在 Claude API、Google Cloud 和 Microsoft Foundry 上受支持。Mythos Preview 在 Amazon Bedrock 或 Claude Platform on AWS 上不支持网络搜索。
有关网络搜索的零数据保留资格以及相关的 allowed_callers 配置,请参阅服务器工具。
有关模型支持,请参阅工具参考。
当您将网络搜索工具添加到 API 请求中时:
当请求依赖于最新的、不断变化的或超出其训练数据范围的信息时,Claude 会进行搜索:
当请求依赖于稳定的知识时,Claude 会直接回答而不进行搜索:
触发行为可以通过您的系统提示进行引导:您可以鼓励 Claude 更积极地搜索,或者倾向于直接回答。如需硬性约束,请使用 max_uses 来限制每个请求的搜索次数。
使用基本网络搜索时,每个搜索结果都会被加载到 Claude 的上下文窗口中,而其中大部分内容可能与请求无关。使用 web_search_20260209 或更高版本时,Claude 会改为先编写并运行代码来过滤结果,因此只有相关内容才会到达上下文窗口。这减少了搜索密集型请求的令牌使用量。
动态过滤从代码执行内部运行网络搜索:在 web_search_20260209 及更高版本上,该工具的 allowed_callers 字段默认为 ["code_execution_20260120"],当动态过滤运行时,API 会自动为请求配置所需的代码执行。您无需自己将代码执行工具添加到 tools 中。除了标准令牌成本外,以这种方式进行的代码执行调用不会产生额外费用。
要直接调用网络搜索而不使用动态过滤,请设置 allowed_callers: ["direct"]。不支持程序化工具调用的模型需要此设置。如果没有此设置,API 会返回 400 错误,提示您进行设置。
网络搜索工具(无论是否使用动态过滤)在 Claude API、Claude Platform on AWS 和 Microsoft Foundry 上可用。在 Microsoft Foundry 上,网络搜索需要 Hosted on Anthropic 部署。在 Google Cloud 上,只有基本网络搜索工具(不含动态过滤)可用。网络搜索在 Amazon Bedrock 上不可用。
以下示例使用 web_search_20260318:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Search for the current prices of AAPL and GOOGL, then calculate which has a better P/E ratio.",
}
],
tools=[{"type": "web_search_20260318", "name": "web_search"}],
)
print(response)除非管理员在 Claude Console 中禁用了网络搜索,否则您的组织已启用该功能,管理员还可以在其中限制搜索的域名。如果已禁用,包含该工具的请求将失败,并返回 400 invalid_request_error,提示网络搜索未启用,而不是在搜索结果中返回错误代码。
在您的 API 请求中提供网络搜索工具:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "What's the weather in NYC?"}],
tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 5}],
)
print(response)网络搜索工具支持以下参数:
{
"type": "web_search_20250305",
"name": "web_search",
// Optional: Limit the number of searches per request
"max_uses": 5,
// Optional: Only include results from these domains.
// Use allowed_domains or blocked_domains, not both.
"allowed_domains": ["example.com", "trusteddomain.org"],
// Optional: Never include results from these domains
"blocked_domains": ["untrustedsource.com"],
// Optional: Localize search results
"user_location": {
"type": "approximate",
"city": "San Francisco",
"region": "California",
"country": "US",
"timezone": "America/Los_Angeles"
}
}所有网络搜索工具版本都接受 allowed_callers,它控制 Claude 是直接调用网络搜索还是从代码执行中调用。在 web_search_20260209 及更高版本上,它默认为 ["code_execution_20260120"] 而不是 ["direct"]。有关如何配置,请参阅服务器工具。web_search_20260318 及更高版本还接受 response_inclusion。
max_uses 参数限制执行的搜索次数。如果 Claude 尝试的搜索次数超过允许的次数,web_search_tool_result 将是一个带有 max_uses_exceeded 错误代码的错误。
简单的事实性查询通常使用 1–3 次搜索;比较性或多实体研究可能使用 10 次或更多。对于延迟敏感的查询,max_uses: 3 可以限制成本,同时很少会截断结果。对于研究代理,将 max_uses 设置为 15–20 或完全省略。
提供 allowed_domains 或 blocked_domains,但不能同时提供两者。如果请求同时包含两者,API 会返回 400 错误。条目是不带协议的裸域名,可选带路径,例如 example.com 或 example.com/blog。
有关完整的域名过滤规则,请参阅服务器工具。
user_location 参数允许您根据用户的位置对搜索结果进行本地化。至少提供 city、region、country 或 timezone 中的一个。
type:位置类型(必须为 approximate)city:城市名称region:地区或州country:两位字母的 ISO 3166-1 alpha-2 国家代码。API 会以 400 错误拒绝不支持的国家代码。timezone:IANA 时区 ID。需要 web_search_20260318 或更高版本。
response_inclusion 参数控制当搜索结果在同一回合中被已完成的代码执行调用消费时,搜索结果块在 API 响应中的显示方式。设置 "response_inclusion": "excluded" 可以从响应中完全删除那些嵌套的 server_tool_use 和结果块对,从而降低不需要将原始搜索内容回传给客户端的代理工作流的输出令牌成本。默认值为 "full"。来自直接调用或在完成前暂停的代码执行调用的结果始终会完整返回,以便在下一回合中发送回去。
{
"tools": [
{
"type": "web_search_20260318",
"name": "web_search",
"response_inclusion": "excluded"
}
]
}以下是一个示例响应结构:
{
"role": "assistant",
"content": [
// 1. Claude's decision to search
{
"type": "text",
"text": "I'll search for when Claude Shannon was born."
},
// 2. The search query used
{
"type": "server_tool_use",
"id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
"name": "web_search",
"input": {
"query": "claude shannon birth date"
}
},
// 3. Search results
{
"type": "web_search_tool_result",
"tool_use_id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
"content": [
{
"type": "web_search_result",
"url": "https://en.wikipedia.org/wiki/Claude_Shannon",
"title": "Claude Shannon - Wikipedia",
"encrypted_content": "EqgfCioIARgBIiQ3YTAwMjY1Mi1mZjM5LTQ1NGUtODgxNC1kNjNjNTk1ZWI3Y...",
"page_age": "April 30, 2025"
}
]
},
{
"text": "Based on the search results, ",
"type": "text"
},
// 4. Claude's response with citations
{
"text": "Claude Shannon was born on April 30, 1916, in Petoskey, Michigan",
"type": "text",
"citations": [
{
"type": "web_search_result_location",
"url": "https://en.wikipedia.org/wiki/Claude_Shannon",
"title": "Claude Shannon - Wikipedia",
"encrypted_index": "Eo8BCioIAhgBIiQyYjQ0OWJmZi1lNm..",
"cited_text": "Claude Elwood Shannon (April 30, 1916 – February 24, 2001) was an American mathematician, electrical engineer, computer scientist, cryptographer and i..."
}
]
}
],
"id": "msg_a930390d3a",
"usage": {
"input_tokens": 6039,
"output_tokens": 931,
"server_tool_use": {
"web_search_requests": 1
}
},
"stop_reason": "end_turn"
}此示例展示了直接搜索。当搜索通过动态过滤运行时,响应还包含代码执行工具的结果块,并且每个嵌套的 server_tool_use 和 web_search_tool_result 对都带有一个 caller 字段,用于标识发起它的代码执行调用。
搜索结果包括:
url:来源页面的 URLtitle:来源页面的标题page_age:网站最后更新的时间encrypted_content:加密内容,您必须在多轮对话中将其传回要继续包含搜索结果的对话,请将助手的内容块原样发送回去,包括每个结果的 encrypted_content。API 会在后续回合中解密该内容,以在 Claude 的上下文中恢复搜索结果。如果 encrypted_content 缺失或被修改,请求将失败并返回 400 验证错误。
网络搜索始终启用引用,每个 web_search_result_location 包括:
url:被引用来源的 URLtitle:被引用来源的标题encrypted_index:必须在多轮对话中传回的引用标识。cited_text:最多 150 个字符的被引用内容网络搜索引用字段 cited_text、title 和 url 不计入输入或输出令牌使用量。
当直接向最终用户显示 API 输出时,必须包含对原始来源的引用。如果您对 API 输出进行修改,包括在向最终用户显示之前重新处理和/或将其与您自己的材料结合,请在咨询您的法律团队后酌情显示引用。
当网络搜索工具遇到错误(例如达到速率限制)时,Claude API 仍会返回 200(成功)响应。错误在响应正文中使用以下结构表示:
{
"type": "web_search_tool_result",
"tool_use_id": "srvtoolu_a93jad",
"content": {
"type": "web_search_tool_result_error",
"error_code": "max_uses_exceeded"
}
}发生错误时,content 是单个错误对象,而不是结果块列表。搜索成功但没有匹配结果时,会返回空的 content 列表,而不是错误。
以下是可能的错误代码:
too_many_requests:超出速率限制invalid_tool_input:无效的搜索查询参数max_uses_exceeded:超出网络搜索工具的最大使用次数query_too_long:查询超出最大长度request_too_large:搜索请求过大,通常是因为域名过滤列表过长unavailable:发生内部错误pause_turn 停止原因API 可以暂停长时间运行的搜索回合并返回 stop_reason: "pause_turn"。要继续,请在新请求中原样发送回暂停的助手消息。
如果 Claude 在同一组并行工具调用中同时调用网络搜索和您的某个客户端工具,API 会改为返回 stop_reason: "tool_use",并且暂不运行搜索。要继续,请返回客户端工具结果,API 会在下一个请求中运行搜索。请参阅在一个回合中混合使用服务器工具和客户端工具。
有关服务器端循环和 pause_turn 处理,请参阅服务器工具。
有关跨回合缓存工具定义,请参阅工具使用与提示缓存。
启用流式传输后,您将在流中接收搜索事件。搜索执行期间会有一个暂停:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_abc123", "type": "message"}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}
// Claude's decision to search
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_search"}}
// Search query streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"latest quantum computing breakthroughs 2025\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "web_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": [{"type": "web_search_result", "title": "Quantum Computing Breakthroughs in 2025", "url": "https://example.com"}]}}
// Claude's response with citations (omitted in this example)您可以在 Messages Batches API 中包含网络搜索工具。通过 Messages Batches API 进行的网络搜索工具调用的定价与常规 Messages API 请求中的定价相同。
为了保护共享容量,Batches API 会按组织对网络搜索请求进行限流,因此包含大量搜索的大型批次可能需要更长时间才能完成。您可以在 Claude Console 的限制页面上查看您组织的网络搜索速率限制。要申请更高的限制,请从该页面联系销售团队。
网络搜索的使用费用在令牌使用费用之外单独收取:
{
"usage": {
"input_tokens": 105,
"output_tokens": 6039,
"cache_read_input_tokens": 7123,
"cache_creation_input_tokens": 7345,
"server_tool_use": {
"web_search_requests": 1
}
}
}网络搜索在 Claude API 上的价格为每 1,000 次搜索 10 美元,另加搜索生成内容的标准令牌费用。在整个对话过程中检索到的网络搜索结果均计为输入令牌,包括单轮对话中执行的搜索迭代以及后续对话轮次中的结果。
每次网络搜索计为一次使用,无论返回多少条结果。如果在网络搜索过程中发生错误,该次网络搜索将不会计费。
从特定 URL 获取并读取内容,以使用实时网络内容增强 Claude 的上下文。
使用由 Anthropic 执行的工具:server_tool_use 块、pause_turn 继续和域名过滤。
Anthropic 提供的工具目录以及可选工具定义属性的参考。
Was this page helpful?