当你的AI助手在胡说八道,问题可能不是它“幻觉”——而是它读到的那页内容根本就不是真的。
作者在开发一个需要抓取网页的AI agent时发现,这个agent会反复给出听起来正确但实际错误的答案。调查后发现,它一直在读取反爬虫系统的拦截页面(Cloudflare的"Just a moment"、DataDome的"please enable JavaScript"等),而不是真实内容。更关键的是,这些拦截页面返回的是200或403状态码加完整HTML,系统层面完全认为是“成功”,agent则自信地把block page的内容总结后输出。
这个问题的根源在于:普通fetch请求不会抛异常,而是返回一大段HTML文本,agent照读不误。作者测试了8个主流反爬虫厂商的代表性网站,naive fetch(普通curl加Chrome UA)获得真实内容0次,获得可总结的block page内容8次,获得任何能让agent知道“自己被拦了”的信号0次。
作者随后开源了Fortress项目,一个专门应对反爬虫的隐形浏览器。它通过单次耐心等待JS挑战、渲染整个页面为结构化markdown、甚至观察页面私有API流量等方式绕过检测。在8个测试网站上,开源版本成功通过5个:Cloudflare、CloudFront和PerimeterX的目标网站均可正常抓取,Indeed、Zillow和StockX能返回干净的列表数据。剩余3个无法突破的是DataDemo(Etsy、G2)和Amazon的点击墙,这些需要更高级的指纹匹配和持久化浏览器环境。
核心修复逻辑是:让失败“响亮”而非沉默。Fortress在检测到block page时返回blocked: true加空文本,agent因此能识别失败并跳过,而非继续总结一段不存在的内容。
编注:信源为Hacker News帖子,作者为Tilion(反爬虫工具厂商)。材料侧重技术原理与测试数据,覆盖主流反爬虫厂商对比,暂未涉及商业定价与行业竞争格局。