机器人验证与智能体的网页访问权。
互联网花了三十年去猜敲门的是谁,如今开始改为核验签名——而这对任何一个做智能体的人来说,实际后果是:你的密码学身份现在是一项检索质量设置。未经验证的智能体很少收到一句干脆的拒绝。它收到的是一个过期页面、一道验证挑战、一张付款要求,或者一份把价格摘掉了的文档——而这些统统都能被正常解析,然后把你的答案奠基在错误的东西上。
三套机制叠在一起,只有一套长着牙。
三种机制层层叠着,且不断被人混为一谈。它们并不对等。
robots.txt——一份请求,靠自愿遵守,栈里任何一处都没有强制力。它自 1994 年起就是那条礼貌的约定,它告诉你一个站点的偏好。它拦不住任何东西。llms.txt——一项提案,想给模型递上一份经过整理的干净站点版本。采用率约在 10% 上下,而截至 2026 年初,没有哪家主要模型厂商在生产中消费它;这项努力实际上已经走平。发布一份花你一个下午,今天买到的东西接近于零。- 边缘强制——挡在源站前面的 CDN 或 WAF,逐请求决定是提供、挑战、收费还是丢弃。这一套长着牙,因为它才是真正握着那条连接的那一层。
第三套一直在快速推进。Cloudflare 如今对新域名默认阻止 AI 爬虫,并在 2026 年 4 月把逐爬虫验证、robots 管理与按次爬取付费收拢进一个面向所有套餐层级的控制台,同时披露其网络每天向爬虫返回超过十亿次 402 Payment Required。自 2026 年 9 月 15 日起,其默认设置还会阻止"混合用途"爬虫访问带广告的页面。无论你怎么看这件事背后的政治,它就是你的智能体的请求将要迎面撞上的那一层。
如果你正在纠结 robots.txt 里该写什么、或者要不要发布一份 llms.txt,那你讨论的是背后没有任何强制力的那两个文件。真正改变结果的决定是在边缘做出的,由一条不是你写的规则做出,在你的请求抵达任何应用之前。
核验取代推断。
识别客户端的老办法是推断:一个 User-Agent 字符串、一段 IP 范围、一份行为指纹、一道验证码。全是猜测,全都可以伪造,而且错误往两个方向跑——冒充者混了进来,正当的智能体却因为"长得不对"被拦下。
Web Bot Auth 把这个猜测换成了一次核验。它是由 Cloudflare 牵头的 IETF 草案,建立在早已标准化的 RFC 9421 HTTP 消息签名之上:智能体用私钥给自己的请求签名、公布对应的公钥,任何服务器或中间设备在决定提供什么之前先核验签名。相关工作组已于 2026 年成立,Cloudflare、Akamai、AWS WAF、Vercel 与 Shopify 都已有实现。它还被采纳为智能体支付工作(包括 Visa 与 Mastercard 的方案)之下的认证基座——而这正是它大概率会站住的原因:支付容不下含糊的身份。
请精确地看待一个签名到底了结了什么。它证明这个请求原封不动地来自某个特定密钥的持有者。它对这个智能体拿到响应后会做什么、代表谁行事、其运营方是否可信,都只字未提。它是一个问责原语,而不是一个授权原语:它的价值在于,越界行为如今可以被归因、某一把具体的密钥可以被吊销,而不必封掉整段 IP、连带半个互联网的智能体一起。授权仍然是另一个决定——正是身份与鉴证试图让其变得可回答的那一个。
未经验证的流量会被降级,而很少干脆地失败。
这是绊倒建造者的那一部分,因为一个硬邦邦的 403 反倒是件好事。未经验证的智能体实际遇到的是一道光谱,而其中大部分看起来都像成功:
- 一个以
200 OK返回的挑战页。你的解析器高高兴兴地读完,没找到任何商品条目,于是模型断定"没有商品"。 - 一个
402,那是一个价格而不是一次拒绝——而且是团队里没有任何人决定过要不要付的那个价格。 - 过期的缓存 HTML,被有意提供给未经验证的客户端。看起来正确、结构完整、内容落后一周。
- 一份更薄的文档:去掉表格的文章、去掉价格的列表页、少了 JavaScript 渲染那一半的页面。
- 只在第十一次调用才咬人的限速——那正是一次多步研究任务所在的位置,而冒烟测试到不了那儿。
以上每一种返回的正文都能被解析。这就使它成为一次接地失败而不是一次可用性失败,而接地失败恰恰是你的评测会漏掉的那一类:运行完成了、答案流畅、没有任何东西抛出异常。一个默默读到了定价页过期版本的智能体,会以十足的自信报出上周的价格——这正是接地本该阻止的那种失效,只不过它这次是从网络层、而不是从模型那边进来的。
这会改变你的建造方式。
- 签名,并且一个用途一把密钥。如果你的爬虫、面向用户的浏览智能体和结账智能体共用一个身份,一次投诉就能把三个一起放倒。分开的密钥意味着封禁的范围限于挣来它的那个行为。
- 把"被拦与被降级"设成独立的失败类别。不要把
402、403、挑战插页与机器人提示,跟超时一起折进一个笼统的抓取错误里。它们含义不同、由不同的人去修,而且需要作为一个比率出现在看板上。 - 断言内容,而不是断言状态码。能抓住挑战页的检查是"这个页面里有没有价格字段",而不是"这个请求有没有返回 200"。给每个来源配一条内容不变式很便宜,而且它是唯一能发现静默降级的东西。
- 在遇见付款问题之前先决定它。智能体循环里的一个
402,是一个披着状态码外衣的策略问题。请有意识地回答它——参见智能体商务——而不是让一个重试循环替你决定。 - 如果你运营站点,默认值已经变了。"什么都不配置"越来越等于"阻止",这意味着智能体访问你的产品,如今是一个你在被动做出的选择。请决定你是否希望对智能体可读;如果希望,就去核验它们,而不是试图辨认它们。
这周做两件事。注册一把签名密钥,给你的智能体的出站请求签名——这是一个一下午就能完成、回报却是长期的改动,而整个生态正在围着它标准化。然后为你的智能体所依赖的每一个外部来源,加上一条内容不变式断言。前者给你买到访问权;后者会在你悄悄失去它的那天告诉你——而没有后者,被降级的访问与正常工作的软件之间没有任何区别。
相关:浏览器智能体——这件事命中最狠的那块界面;智能体身份与权限——签名之上的那一层;以及出站管控——镜像的另一面:决定你自己的智能体被允许够到什么。