第 13 章 Web 访问与搜索
Agent 怎么获取外部信息
写代码经常需要查资料:看文档、找示例、确认某个 API 的参数。Claude Code 有两个内建工具处理这件事:WebFetchTool(拉取指定 URL 的内容)和 WebSearchTool(先搜索再拉取)。
两个工具解决的是不同的问题。WebFetchTool 适合你已经知道要看哪个页面的情况:提供 URL,拉取内容。WebSearchTool 则是你知道要找什么但不知道从哪里找:先搜索得到一批候选结果,再从中拉取最相关的内容。
这两个工具是内建的,受同一套权限和消息机制管控,不是让 agent 自己写 curl 命令去联网。不过两者的实现方式不同:WebFetchTool 在本地抓取页面,WebSearchTool 则是服务端工具——搜索请求发给 Anthropic 的 API 完成,CLI 只负责展示结果。
为什么要有 prompt 参数
调用这两个工具时都需要提供 prompt——"你想从页面里得到什么"。
这个设计有点反直觉:直接拿页面内容不就好了,为什么还要说明目的?
原因是上下文成本。一个完整的文档页面可能有几万 token,但你实际需要的可能只是其中一个函数的参数说明。有了 prompt,工具会用一次额外的模型调用对页面内容做过滤,只返回和 prompt 相关的部分,而不是把整个页面塞进上下文。即使不过滤,内容也会被截断到 10 万字符以内。
域名级权限控制
和所有其他工具一样,Web 工具在执行前也过权限系统。但和文件路径、shell 命令不同,Web 权限是按域名控制的。
实际上有 90 多个域名是预授权的——主要是各语言和框架的官方文档站,像 docs.python.org、react.dev、docs.aws.amazon.com 这些。访问这些站点不需要确认。其他域名要么每次确认,要么直接拒绝。
被拦截时,系统会给出快速规则建议,一键添加白名单,不用自己手写规则。
这两个工具不处理认证
WebFetchTool 和 WebSearchTool 都不会帮你登录、不会携带 session cookie、不会处理 OAuth。遇到需要认证的 URL,会直接失败,并提示应该用专门的 MCP tool 来处理。
这是一个清晰的边界划分:这两个工具适合抓公开的网页内容;需要认证的外部系统,应该通过 MCP Server 接入,认证逻辑放在 MCP Server 侧。