Web 工具
Web 工具提供网络访问能力:WebFetchTool(获取网页内容)和 WebSearchTool(网络搜索)。
注意: 以下所有工具的
call()方法均为普通async函数,返回Promise<ToolResult>,不是 AsyncGenerator。
WebFetchTool — 网页获取
输入 Schema
typescript
const inputSchema = z.object({
url: z.string().url().describe('要获取的 URL'),
prompt: z.string().optional().describe('内容提取的指导提示'),
})执行逻辑
- URL 验证:检查 URL 长度、禁止包含用户名/密码、hostname 格式验证
- 获取内容:调用
getURLMarkdownContent(url, abortController)http:自动升级为https:checkDomainBlocklist()检查域名黑名单getWithPermittedRedirects()发起 HTTP 请求- 支持 LRU 缓存
- 内容转换:HTML 使用 turndown 库转换为 Markdown
- 内容提取:如有
prompt参数,通过applyPromptToMarkdown()用 Haiku 模型提取关键信息
URL 安全验证
validateURL 函数执行以下检查:
- URL 长度限制
- 禁止包含用户名/密码
- hostname 必须至少有两个部分
- 注意:无独立的私有 IP 检测
WebSearchTool — 网络搜索
输入 Schema
typescript
const inputSchema = z.object({
query: z.string().describe('搜索查询词'),
count: z.number().optional().describe('返回结果数量,默认 5'),
})执行逻辑
WebSearchTool 不直接调用搜索 API,而是通过 Claude 模型的服务端工具执行搜索:
- 构建搜索工具 schema(
web_search_20250305,含allowed_domains/blocked_domains,max_uses: 8) - 调用
queryModelWithStreaming(),将搜索工具作为extraToolSchemas传入 - 流式处理事件:
server_tool_use追踪工具调用,web_search_tool_result报告搜索结果数量,assistant收集 content blocks - 通过
makeOutputFromSearchResponse()解析并格式化结果
权限
两个 Web 工具都需要网络访问权限:
| 属性 | WebFetchTool | WebSearchTool |
|---|---|---|
isReadOnly() | true | true |
isDestructive() | false | false |
isConcurrencySafe() | true | true |
| 权限规则 | WebFetch(url_pattern) | WebSearch |