Claude Code Tools 研究系列(十一)—— WebFetch + WebSearch:走出本地文件系统
内容提要
WebFetch与WebSearch是Claude Code中用于访问互联网的工具组合。WebFetch精准获取已知URL内容,WebSearch通过关键词搜索互联网。两者分工明确:知道URL直接Fetch,不知道则先Search再Fetch。WebFetch带AI处理,按prompt提取信息而非返回全文;WebSearch强制列出来源,支持域名过滤。它们突破训练数据边界,获取最新外部信息,但应优先使用本地工具和训练数据。
延伸解读
WebFetch 与 WebSearch 的分工逻辑
WebFetch 和 WebSearch 的分工与本地工具 Grep 和 Glob 类似:一个按 URL 精确拉取,一个按关键词模糊搜索。知道 URL 时直接 Fetch,不知道时先 Search 再 Fetch。这种设计让 Claude 在公网上的信息获取方式与本地文件系统保持一致,降低了学习成本。
WebFetch 的 AI 处理与上下文压缩
WebFetch 不是简单的网页下载器,而是带 AI 处理的工具。它通过 prompt 参数提取所需信息,只返回处理后的结果,避免将整页 HTML 塞入上下文。这类似于 Agent 派发 subagent 的机制,是一种上下文压缩手段,能有效控制 context 预算。
WebSearch 的强制引用与时间硬编码
WebSearch 强制要求列出 Sources,确保引用可追溯,这是对事实核对纪律的硬性保障。同时,工具描述中硬编码当前月份,弥补 Claude 缺乏时间感知的缺陷,避免搜索到过时信息。这些设计体现了对信息可靠性和时效性的重视。
安全与边界:认证、重定向与 MCP 让位
WebFetch 明确警告对认证 URL 会失败,并建议使用专用 MCP 工具;跨域重定向不自动跟随,需 Claude 显式确认,以防跳转攻击。WebSearch 仅在美国可用,且支持域名过滤。这些安全护栏确保工具在不可信的外部环境中可控使用。
Q&A
WebFetch和WebSearch在Claude Code中分别有什么作用?
WebFetch用于精准获取已知URL的内容,而WebSearch用于通过关键词搜索互联网。WebFetch输入一个URL,输出该页面的处理结果(HTML转Markdown后按prompt提取信息);WebSearch输入关键词,输出一组搜索结果(标题和URL)。
在Claude Code中,如何查找并获取一个未知URL的最新信息?
先使用WebSearch搜索关键词,获取相关URL列表,然后选择最可靠的URL,再用WebFetch提取具体内容。例如,搜索“Claude 4.5 Sonnet API pricing announcement 2026”并限定域名,然后依次WebFetch官方页面。
WebFetch的prompt参数为什么是必填的?
因为WebFetch不返回全文,而是根据prompt提取相关信息。如果没有prompt,运行时的小模型不知道提取什么内容,导致无法返回有用的结果。这迫使Claude在调用前明确需求,保护上下文预算。
WebSearch为什么强制要求列出Sources?
因为WebSearch返回的信息来自不受控的互联网来源,可能存在偏差或过时。强制列出Sources可以保证可追溯性,让用户能自行核对来源,这是工具层面对引用透明化的硬性要求。
在什么情况下不应该使用WebFetch或WebSearch?
当信息在训练数据中、GitHub相关内容(应使用gh CLI)、需要认证的URL(如Google Docs)、或本地项目已有知识时,不应使用。核心原则是能不上网就不上网,因为上网慢、贵且有失败风险。
WebFetch和WebSearch与Bash+curl相比有哪些优势?
WebFetch和WebSearch解决了直接使用curl和搜索API的痛点:自动将HTML转Markdown、匿名抓取避免凭据泄漏、无需管理API密钥、强制列出来源、按prompt压缩内容,从而节省上下文并提高安全性。
WebFetch如何处理跨域重定向?
WebFetch不会自动跟随跨域重定向,而是会通知Claude并提供重定向URL,由Claude决定是否发起新的请求。这防止了通过跳转诱导抓取未预期域名的攻击,是一种安全机制。
WebSearch的allowed_domains和blocked_domains参数有什么用途?
allowed_domains用于限定只搜索指定域名,blocked_domains用于排除特定域名。两者可以组合使用,以精准控制信息来源,例如只信任官方文档或排除垃圾站点。