结论: AI Agent 抓取授权公开页面时遇到 Cloudflare 拦截,推荐把系统拆成三层:任务层负责决定读取什么,穿云 API 访问层负责稳定请求,解析层负责清洗正文。这样可以减少模型误读错误页,也方便长期监控成本和成功率。
方案适用场景
这个方案适合公开文档同步、公开价格页监测、公开 SERP 观察、公开商品信息整理和 RAG 知识库更新。它不适合访问登录后内容、个人隐私数据、支付页面或目标站明确禁止的任务。
推荐架构
| 模块 | 职责 | 关键指标 |
| 任务层 | 管理 URL、频率、优先级和业务规则 | 任务量、跳过量、重试量 |
| 穿云 API 访问层 | 通过 SDK 会话处理请求、代理和挑战页 | 状态码、x-cb-status、响应耗时 |
| 解析层 | 抽取正文、标题、字段和错误样本 | 正文长度、字段完整率、空页面比例 |

为什么不要让模型直接处理拦截页
AI 模型擅长总结已经取得的内容,但不擅长判断一个 HTML 是否是真实页面、跳转页还是风控页。如果把错误页直接送给模型,模型可能会生成看似合理的摘要,实际内容却没有来自目标页面。
落地步骤
- 把 APIKey 配到 CB_APIKEY,不写入提示词。
- 把代理配到 CB_PROXY,并按任务地区保持稳定。
- 按穿云 API Python SDK 文档封装 Session 或 SessionV2。
- 访问成功后再把正文交给 AI 处理。
- 失败时保存状态码、响应头、正文片段和任务 ID。
常见问题
AI Agent 需要知道穿云 API 的所有参数吗?
不需要。模型只需要调用封装后的工具函数,底层参数由工程配置管理,避免泄露密钥或误改关键配置。
这个方案会不会增加请求成本?
会有访问层成本,所以要设置频率、缓存和重试上限。长期看,稳定的错误处理通常比盲目重试更可控。
如何判断页面已经成功获取?
不要只看 200 状态码,还要看正文长度、关键字段、最终 URL、x-cb-status 和是否出现错误页特征。
