云聚 AI Token Plan 满 199 减 35 元
AI编程 · 架构思考 · 技术人生
DigitalOcean 开发者云

Agent 上不了网,却告诉你它查过

云聚 AI Token Plan 满 199 减 35 元

我先给一种失败模式起个名字:隐性失败。没有报错,没有警告,没有任何异常提示,你拿到的只是一个错答案。

这是 Bright Data 的 Rafael Levi 在 AI Engineer 大会上一场演讲的主题。他做的是帮 agent 大规模采集公开网页数据的平台,每天面对的就是”agent 到底有没有真的上网”这件事。原视频约 16 分钟:Your Agent’s Biggest Lie: “I Searched the Web”

阿里云 OPC 一人公司创业装备库

LLM 被训练成讨好你,所以它不肯说”我没拿到”

Rafael 开场第一句判断很直接:LLM 是被训练来取悦用户的,所以它几乎从不说”我做不到”。

他说自己天天写应用,宁愿模型直接告诉他”不行,我查不到”,但它从来不这么干,永远在试图把答案编圆。这跟模型聪不聪明没关系。问题出在它的行为目标:让用户满意,排在让用户拿到真相前面。

把这个目标和”拿不到数据”叠在一起,结果就很糟。agent 发了一个请求,撞上验证码,或者拿回一个空页面,它不会告诉你”我刚才被挡在外面了”,而是顺手编一个看起来合理的答案交差。Rafael 的原话是,大部分幻觉就是从这里来的:需要讨好你,加上手里没料。

这条因果链值得单独拎出来看,因为它和我们平时理解的幻觉不太一样。我们以为幻觉是”模型知识不够、记错了”,但这里是另一种:模型本来有机会拿到真数据,被拦在门外,然后假装自己进去过。

具体长什么样,演讲里举了几个谁都遇到过的场景:

  • 让 AI 找一个商品,它给你一个购买链接,点进去 404,商品根本不存在。那 50 块钱的东西到底在哪买?没有答案,因为它是编的。
  • AI 给的引用链接点开是死页面。Rafael 的说法是,ChatGPT 大约 60% 的引用是打不开的。这个数字我没法独立核实,但”点开引用是 404″这件事,用过的人应该都撞到过。
  • 模型回退到训练数据,还告诉你这是当前情况。训练数据停在 2024,现在是 2026,事实早就变了,它却拿两年前的世界回答你今天的问题。

最后一条是隐性失败里最难防的。前两种你点一下链接还能发现不对,第三种连破绽都没有,它给你一段措辞完整、语气笃定的回答,你完全看不出它用的是过期信息。

Web 已经在主动反 AI,甚至开始投毒

为什么 agent 这么容易被挡在外面?因为今天的 web 本来就在和机器人、自动化对着干,而且越打越凶。

验证码十年前就有了,这些年只增不减。现在更进一步,是”AI 拦 AI”:用机器识别机器,再把对方挡掉。Rafael 给了一个数:Cloudflare 默认会拦掉大约 20% 的 web 对 AI 抓取的访问。你的 agent 用内置的 fetch 去抓网页,五个站里大概有一个根本进不去,它不会主动告诉你这一点。

更狠的是 Cloudflare 的 AI Labyrinth。这个机制的思路变了:检测到 bot 之后不直接拦,而是给它喂假数据。

这一步把问题的性质改了。原来的幻觉是模型自己脑补,现在是模型被外部主动投喂了假料,然后一本正经转述给你。对 agent 来说,这种假数据比空页面更危险,因为空页面好歹是个”没拿到”的信号,假数据则是一个伪装成真相的陷阱,它没有任何理由怀疑。

这里可以和 GEO(生成式引擎优化,让 AI 搜索愿意引用你的内容)的逻辑对照着看。GEO 谈的红线是内容生产方别造假引用、别批量灌水,那是站在”我希望 AI 正确引用我”的一端。而 Rafael 讲的是另一端:就算内容方规规矩矩,CDN 这一层主动关门甚至投毒,消费端的 agent 照样会被坑。两股力量从两头挤压,中间被夹的是”agent 拿到的到底是不是真的”。

一个对照 demo:同样的 prompt,差别全在能不能真上网

演讲的核心是一个现场对照。Rafael 准备了两段脚本,prompt 一字不差,区别只有一个:一段不接任何外部访问工具,另一段接上 Bright Data 的 Web MCP(MCP 是让模型接入外部工具和数据的开放协议)。

任务是同样五个:rightmove 上的房产、一个 LinkedIn 公司页、一个 Instagram 账号、一个 Amazon 商品、一个 TikTok。这五个站点都是反爬做得很重的,他专门挑了这种”裸跑肯定进不去”的。

第一段用裸 GPT-5 跑。结果是五个全挂,零成功。模型自己交代:没有实时网页访问能力,没有浏览工具。这正好印证我笔记里早就记过的一句话——没有外部访问能力的模型,就是泡在罐子里的大脑,只能想,不能动。它脑子够用,只是手脚被绑住了。

第二段接上 MCP 再跑同一套 prompt,rightmove、LinkedIn、Instagram、Amazon 大多拿到了真实数据。然后 Rafael 做了一个聪明的动作:让模型自己去对比两次的结果,省得别人说是他自卖自夸。

这个对照真正说明的东西,比某家工具好不好用更深一层:web access 本身是 agent 的基础设施。我们平时谈 agent 工程,注意力都在 prompt 怎么写、context 怎么管,但”能不能真的把外部数据拿进来”是更底层的一层。这一层塌了,上面的 prompt 再精巧也只是在装样子。

接外部访问之后多出来的能力,几个比较实用:

  • 真搜索:模型能真的去 Google、Bing、DuckDuckGo 搜,而不是在后台假装搜了一下。
  • 抓成 markdown:对任意 URL 发请求,直接拿干净的 markdown,不带 HTML 标签,省下解析 HTML 的 token。
  • 远程浏览器:一个能自己解验证码的远程浏览器,带独立指纹,可以并行开很多个去访问同一个网站而不被封。

几个顺带值得记下来的点

演讲后半段和问答里还有几个点,单独拎出来:

工具不要全塞给模型。 Bright Data 的 MCP 有近 70 个工具,有人问是不是要全部加载。Rafael 说当然不用,filter 一下,只需要抓 markdown 和搜索就只加这两个,否则就是拿无关信息把 context 灌满。这和我之前记过的一条经验是一回事:给模型挂一堆工具或字段,不等于它会用得好,多了反而是污染。工具数量是负债,不是资产。

反检测的思路是装人,不是斗法。 有人问怎么应对 Cloudflare 的投毒机制。Rafael 的回答是,他们不去研究平台怎么检测,而是让 agent 尽量像个真人:预录的鼠标移动、像人一样的打字节奏。这样 Cloudflare 压根不会问”你是不是机器人”。与其和检测算法军备竞赛,不如让自己根本不触发检测。

误导数据是另一个更难的坑。 不止拦截和投毒,还有一类是网站对不同访问者给不同内容。Rafael 举例说亚洲很多酒店站会按设备给价:手机一个价,电脑一个价,走代理第三个价,哪个才是真的很难讲。对这种情况,他的说法也很诚实——目前没有银弹,最好的办法还是让 agent 看起来像人,然后尽量碰运气。

别用 LLM 一页一页啃 HTML。 这点我觉得最实用。很多人抓一万个页面,让 LLM 逐页解析,token 烧得飞起。Rafael 的做法是反过来:让 LLM 写一个 parser 脚本,然后用脚本去跑那一万页,他说能省下大约 99% 的 token。这是个很 Karpathy 的思路:不要让模型干重复劳动,让模型生产一个能重复运行的程序,再让程序去跑循环。

我会怎么用这件事

抛开演讲里 Bright Data 的部分,对我自己最有价值的是那个”隐性失败”的命名,以及它背后的处理原则。

我们给 agent 接外部数据时,默认的失败假设应该反过来:不要假设”它说查过就是查过”,而要假设”它随时可能被挡在外面还瞒着我”。所以真正该补的不只是数据通道,还有一层验证——让 agent 在拿不到数据时有办法显式说”我没拿到”,而不是替它把答案编圆。宁可要一个会认怂的 agent,也不要一个嘴硬的。

放到 harness 的框架里,这等于是说:可观测性不能只覆盖模型输出,得往下覆盖到数据获取这一层。一个答案看起来对,不代表它真的查过;它有没有真的进过那个网页、拿到的是真数据还是被投喂的假料,这些都该是能被检查的,而不是只能靠事后点开链接发现 404 才知道翻车了。

如果只让你记一件事:agent 最危险的时刻,不是它答错的时候,是它被挡在门外、却还笃定地告诉你”我查过了”的时候。

阿里云函数计算 一键部署 AI 大模型
赞(0)
未经允许不得转载:Toy's Tech Notes » Agent 上不了网,却告诉你它查过
ReClaude Claude Code 合租
阿里云函数计算 一键部署 AI 大模型

Claude Code 合租 · KYC 封号全托管

官方又涨价又 KYC,封号还得自己重新折腾?ReClaude 拼车了解一下——200 / 400 / 800 / 1600 四档随便挑,账号、风控、切换全平台托管,触发风控自动换号不计次。

上车 4 人车 400/月查看四档套餐