Skip to content

Web Access zh

pawaca edited this page Aug 30, 2026 · 1 revision

Web 访问

上游 web 搜索和页面抓取能力在 Edge 中的适配。

上游提供了什么

Web 访问子系统为模型提供两个从互联网获取信息的工具:

  • web_search — 向配置的提供者发送搜索查询,返回答案摘要 + 排序的来源 URL。支持多查询(每次工具调用最多 5 个并发查询)。
  • web_fetch — 获取 URL 的完整内容,将 HTML 转换为模型可读文本,截断到可配置的字符上限。处理重定向、被阻止的 URL 和内容类型检测。

三个包组成该能力:

  • WebRuntimectx.web)— 搜索和抓取的提供者注册表能力接缝。
  • DeepSeekWebSearch — 调用 DeepSeek 搜索 API 的搜索提供者。
  • ToolWeb — 注册模型工具。{ search: boolean, fetch: boolean } 控制暴露哪些工具。

Edge 改了什么

直接复用 Web 搜索

installEdgeWebSearch() 安装全部三个包,配置 { search: true, fetch: false }

  • WebRuntime — 搜索提供者设为 DeepSeek
  • DeepSeekWebSearch — 可通过 DEEPSEEK_SEARCH_BASE_URL 环境变量配置 base URL
  • ToolCallTimeoutPolicy — 强制执行单次调用超时
  • ToolWeb — 注册 web_search,不注册 web_fetch

未实现:web_fetch

web_fetch 通过配置禁用(fetch: false)。技术阻碍是策略问题而非平台限制:

  • SSRF 风险:Workers 的 fetch() 可以访问内部 Cloudflare 服务,需要 URL 验证规则
  • 出口成本:抓取的页面计入 Workers 的子请求限制和带宽
  • 内容渲染:复杂页面(SPA、JS 渲染)需要浏览器引擎,不仅仅是 HTTP fetch

Edge 没有改什么

  • WebRuntime 能力接缝(提供者选择、取消、错误处理)
  • DeepSeek 搜索提供者实现
  • web_search 工具 schema、多查询支持、来源格式化
  • ToolCallTimeoutPolicy 执行

性能特征

搜索延迟

每次 web_search 调用向 DeepSeek 搜索 API 发 HTTP 请求。延迟由外部 API 响应时间决定(通常 500ms–2s)。一次工具调用内的多个查询并发执行(最多 5 个)。

Cloudflare 启用 Fetch 的方案

方案 能力 Plan 复杂度
Workers fetch() 基础 HTTP:HTML 页面、JSON API、文本文件 免费 低——启用 fetch: true,加 SSRF 防护
Browser Rendering API 完整页面渲染:SPA、JS 重度站点、截图 Workers Paid 中——需要包装 Rendering API 的 fetch 提供者

最简路径是启用 Workers fetch() + SSRF 防护——上游的 HTML 解析器是纯 JS,已经能在 Worker 运行时中工作。Browser Rendering 增加完整页面能力但需要付费 plan 和自定义 fetch 提供者。

架构总结

组件 分类 Edge 代码
WebRuntime 复用 一行 ctx.plugin() 调用
DeepSeekWebSearch 复用 一行 ctx.plugin() 调用
ToolWeb(仅搜索) 复用 { search: true, fetch: false }
web_fetch ⚠️ 禁用 配置开关——未删除代码

关键观察:Web 搜索完全是上游代码——除配置开关外零 Edge 适配。启用 web_fetch 是配置变更 + SSRF 策略决策,不是平台限制。

TODO

**启用 web_fetch 并加 SSRF 防护。**上游的 HTML 转文本转换器是纯 JS,在 Workers 中可用。主要工作是添加 URL 验证规则防止访问本地网络和内部服务。将 { search: true, fetch: false } 改为 { search: true, fetch: true } 并注册基于 Workers fetch() 的 fetch 提供者。免费 plan 可用。

**评估 Browser Rendering 用于富页面内容。**对于 Workers fetch() 无法处理的 JS 渲染页面,Cloudflare 的 Browser Rendering API 提供无头 Chromium。需要 Workers Paid plan。需要自定义 WebFetchProvider 来渲染页面并提取文本。

English

中文

Clone this wiki locally