PuppyIP 资源中心
开发接入 5 分钟 发布于 2026-10-13

Cloudflare web_fetch:分页默认重抓,接入前先设请求边界

Cloudflare的web_fetch能把网页、PDF和支持的Office文档交给agent阅读,但默认每翻一页都会重新请求原URL。接入时先限制主机、大小和超时;需要同一份长文连续阅读,就保留已抓取的页面。它不会替你登录或执行网页交互。

Cloudflare Agents SDK web_fetch 网页读取 Agent开发

服务对象与地域限制

PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。

代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。

本文要点

  • 需要Agents SDK 0.28.0或更高版本;HTML和文档转换用Workers AI绑定,本地开发的转换也调用云端账号。
  • 默认每次给模型最多20,000个正文字符,读取响应体上限5,000,000字节;两个数字管的是不同环节。
  • 内置来源每次工具调用重新GET;复用WebFetchPage才能对同一份内容继续分页。
  • 域名过滤和默认私网限制有明确边界;JavaScript渲染、登录、截图和交互应选浏览器工具。

它读的是页面和文档,不是完整浏览器

Cloudflare在10月12日的当前公告中提供了Agents SDK web_fetch。模型给出URL,工具返回内容、最终URL、HTTP状态、内容类型及续读位置。公告路径含10月11日,但页面显示10月12日;不能把路径日期当作准确上线钟点。

工具优先请求Markdown;直接得到Markdown、JSON或普通文本时,跳过Workers AI转换。HTML、PDF和支持的Office文档则通过Workers AI转成Markdown。转换不会证明资料正确,仍要核内容是否回答了任务。

它发出GET,不携带浏览器Cookie、凭据或自定义请求头。需要执行JavaScript、已有登录会话、截图或点击时,选适用的浏览器工具;遇到挑战页也不能靠格式转换获得访问资格。

接入先核版本、AI绑定和注册位置

先核项目实际使用的agents版本,至少为0.28.0,并已有对应harness。文档示例在Wrangler中配置名为AI的Workers AI绑定,remote设为true。本地开发的HTML与文档转换仍在Cloudflare账号上远程执行;已读资料未给出准确费用、免费额度或逐地区资格,不能按本地运行推定免费。

Pi Durable从agents/webfetch/pi导入webFetchTool,把webFetchTool({ binding: this.env.AI })安装进registry,再调用Harness.open()。先注册再打开,才能让harness拿到工具;这不是给所有harness自动加工具。

AI SDK和TanStack AI分别有自己的适配入口。其他harness可在工具处理函数中使用fetchWeb()、windowWebFetchPage()和renderWebFetchPage();这些底层函数不要求Durable Object、浏览器或Worker Loader绑定。具体模型和执行环境仍由应用准备。

长文分五次读,默认就会发五次GET

默认每次工具结果包含最多20,000个正文字符。用结果给出的offset续读,不自己机械加20,000,因为窗口可能在换行处结束;结构化结果nextOffset为null时,表示已经读到末尾。

内置来源每次工具调用都会重新抓URL。假设一份报告需要五个窗口,默认会发五次请求,期间源页面也可能变化。这个未执行的例子说明:分页不是已下载文档的缓存,也不保证五段来自同一版本。

需要复用一次抓取时,保存fetchWeb()返回的WebFetchPage,再用后续offset调用windowWebFetchPage()。Pi的会话恢复是另一个机制:已完成结果会保留;被驱逐中断的抓取会重跑,不能因此认为普通续读也只抓一次。

先设主机,再把字符、字节和时间分开限

应用创建工具时设置请求策略,模型只选择url、offset和format。allowedHosts默认允许公共主机;任务只读已批准文档时,可列出具体主机。blockedHosts先于允许名单检查,*.example.com只包含子域,不包含example.com根域。

pageChars控制每次交给模型的字符窗口;maxBytes默认5,000,000,控制读取响应体的字节上限。timeoutMs默认30,000毫秒,包含重定向与转换;maxRedirects默认5,可设0至20。按任务收窄这些值。

内置来源检查每个URL与重定向目标,拒绝非HTTP协议、URL内凭据、超过2,000字符的URL及HTTPS降级到HTTP。默认拦本地名称和私有IP字面量,但不解析公共主机背后的DNS地址来检查私网IP;这不是完整的私网隔离保证。

失败时看结构化错误,再决定下一步

可读的HTTP错误页面会连同状态返回。抓取失败有WebFetchError代码,例如web_fetch_timeout、web_fetch_too_large和web_fetch_unsupported_content_type,并带retryable字段。先分清超时、响应过大、类型不支持与页面本身的错误,避免把HTTP返回当成有效答案。

Pi把失败放进details,ok为false;AI SDK和TanStack AI适配器抛WebFetchError。取消会传播为abort,而不是普通抓取失败。被检测到的机器人挑战会产生web_fetch_blocked,提示选择浏览器或其他来源;应继续遵守原站权限和规则。

先用一份获准读取的文档核接入结果

可按一个未执行的接入流程核对:确认版本和AI绑定,注册对应适配器,再给工具一份获准读取的公开文档URL。检查最终URL、状态、类型、正文与nextOffset是否符合预期;长文需要一致版本时再核WebFetchPage复用。本文没有安装SDK、部署Worker或调用模型。

结果包装把外部内容标为资料,不能保证防住提示注入。AI SDK若自行转换UI消息,要把同一tools传给convertToModelMessages(messages, { tools }),保留历史结果的格式和包装;网页文字不能替用户批准新的操作。

资料来源

常见问题

format设为raw,就能读取PDF、图片或视频吗?

不能。raw用于不转换的文本正文,不能返回PDF或其他二进制文档内容;图片、音频和视频不受支持。需要PDF内容时走支持的文档转换,并核账号绑定与实际费用。

改用自己的WebFetchSource,原来的请求限制还在吗?

自定义source负责URL校验、主机限制、字节上限和重定向处理;工具仍应用pageChars与timeoutMs。想保留内置请求策略,可包装createDirectWebFetch(),不要把换来源理解成原有全部控制自动继承。