检测 AI 智能体:Claude、ChatGPT 和 Perplexity 浏览器与人类有何不同
AI 智能体表现得像浏览器,行为却与人类毫不相同——会话短暂、目标明确、点击像素级精准、零错字。用 11 个信号把 Computer Use、Operator 和 Perplexity 流量与真实访客区分开。
2024 年,AI 智能体从实验性演示走进了生产环境流量。Claude 的 Computer Use API 可以驱动浏览器。ChatGPT 的浏览工具会导航网站以回答查询。Perplexity 的答案引擎会实时抓取。还有一个日益壮大的 AI 驱动助手类别——Browserbase、Anthropic 的 Computer Use、OpenAI Operator——会代表用户端到端地完成网页任务。
对网站来说,这催生了一类新访客,它无法归入传统机器人检测的任何一个桶。AI 智能体不是大规模提取数据的爬虫,也不是点击界面的人类。它们介于两者之间——每个会话一个访客,每次访问一个目标,却以机器速度和机械般的精度执行。
检测它们与检测机器人的意义不同。有时你想为它们服务(一个替顾客购物的有益智能体),有时你想拦截它们(通过 AI 外壳进行的未授权爬取)。无论如何,首先你得知道它们的存在。
AI 智能体在架构上有何不同
网络上的 AI 智能体流量主要由三种架构产生:
浏览器驱动型智能体运行一个由 LLM 控制的无头或有头浏览器。Anthropic 的 Computer Use、OpenAI Operator、Browserbase 和 Skyvern 都属于此类。浏览器是真正的 Chrome 或 Chromium。智能体通过 DOM 操作,或通过截图分析与坐标点击来指挥它。
纯 API 型智能体通过 HTTP 库(Node.js、Python、Go)获取页面,并把 HTML 交给 LLM 处理。大多数 Perplexity 和基于搜索的智能体都以这种方式工作。这里没有浏览器——只有一个把文本喂给模型的抓取层。
混合型智能体对 JavaScript 繁重的站点使用浏览器,对静态内容使用 API 抓取。许多生产环境的智能体属于此类,会根据目标动态选择。
每种架构都会留下不同的指纹。
信号 1. 浏览器会话时长
真实用户的会话漫长而不专注。他们打开标签页、分心、又回来。在决策类任务上,人类会话时长的中位数为 8–20 分钟。
AI 智能体的会话短暂而专注。一个典型的 Computer Use 任务——订机票、买菜、提取商品数据——端到端只需 30 秒到 3 分钟。会话从页面加载开始,依次执行 5–30 个动作,然后结束。
会话时长在 5 分钟以内、离散动作超过 10 个、且没有浏览器标签页切换,这不是典型的人类行为,而是典型的智能体行为。
信号 2. 坐标点击精度
Anthropic 和 OpenAI 的浏览器驱动型智能体使用截图分析来识别界面元素,然后点击坐标。坐标计算精确到像素。
真实用户在区域内点击。一个 200x40 像素的按钮,点击会分布在整个区域,偏向中心但带有人类的变化。AI 智能体则在一个很窄的带内点击——往往落在元素几何中心 2–3 像素范围内。一百次点击的平均偏差小于 3 像素,这不是人类的分布。
检测需要收集点击坐标,并相对于元素边界进行分析。在会话级别的数据上,这种方法效果很好。
信号 3. 缺失探索性滚动
人类会滚动以查看页面上有什么。他们向下滚,再向上滚,再滚一半。他们会在吸引注意的内容处停顿。他们的滚动轨迹参差不齐。
AI 智能体只在必要时滚动。如果目标是点击"加入购物车",而按钮在首屏可见范围内,智能体可能根本不会滚动。如果目标元素在首屏之下,智能体会一次性直接滚动到目标,然后执行。
滚动方向变化少于 2 次,或所有滚动事件的滚动速度恒定,都表明这是任务驱动的浏览,而非探索。
信号 4. 文本输入节奏
真实用户以每分钟 30–60 个单词的速度打字,伴随不定的停顿、偶尔的删除和微小的更正。击键时序遵循一个高方差、删除率非零的分布。
AI 智能体填表时要么粘贴数值,要么以固定节奏模拟击键——通常是每秒 50–100 个字符,均匀无删除。一个 30 字符的字符串在 200 毫秒内填完、零退格,这不是人类的输入。
信号 5. 没有错字
相关但不同:人类会打错字。在 1000 个字符的文本输入中,真实用户会产生 15–40 次更正。AI 智能体产生零次。一次包含 3 个字段、合计超过 100 个字符、零更正的表单提交,对人类来说不同寻常。
信号 6. User agent 不一致
有些 AI 智能体使用会明确标识自己的自定义 user agent:perplexity-user、ChatGPT-User、ClaudeBot。这些是遵循自我标识约定、并且往往尊重 robots.txt 的礼貌智能体。
这里的检测很简单——读取 user agent,与已知列表匹配。其价值在于知道何时对它们区别对待(或者在你不想被爬取时拦截它们)。
其他智能体运行浏览器驱动型框架,并继承浏览器所用的任何 user agent——通常是 Chrome。仅凭 user agent 更难识别它们,需要借助行为信号。
信号 7. 无头模式下的 WebGL 渲染
以无头模式使用 Chromium 的浏览器驱动型智能体,会暴露我们在 Puppeteer 那篇文章中讨论过的 SwiftShader 渲染器。任何一个 WebGL 渲染器包含 SwiftShader、且访客执行了 10 个以上有意动作的会话,几乎可以肯定是浏览器驱动型 AI 智能体。
较新的智能体框架(Browserbase、部分 Skyvern 配置)运行有头 Chrome 以规避这个信号。它们呈现真实的 GPU 字符串。这意味着仅凭 WebGL 不足以检测现代智能体——它是一个必要的起始过滤器,而非完整的解决方案。
信号 8. 对页面结构的完美遵循
真实用户即使在页面正在跳转时也会点击链接。他们会打断自己。他们会在单击就够用时双击。他们会点击并非链接的东西。
AI 智能体遵循 DOM。当它们想导航时,会针对某个具体元素发起动作。它们不会点错元素,也不会在加载途中刷新。它们的会话以任何分心的人都不会呈现的机械线性方式展开。
具有完美遵循的会话轨迹——每次点击都在有效元素上、每个表单字段都按 DOM 顺序填写、每次页面切换之前都有一个有意的动作——读起来像是智能体驱动的。
信号 9. 可交互耗时为零
真实用户需要时间来理解一个页面。他们阅读、扫视,在行动之前先看懂。
AI 智能体瞬间解析 DOM。对真实用户来说,从页面加载完成到首个用户动作之间的时间,即使在简单页面上也通常是 1.5–4 秒。对 AI 智能体来说,这个时间可以短于 200 毫秒——也就是 LLM 在 DOM 中识别出目标元素所需的时间。
在一个需要理解内容的页面上,极快的首次动作时间是一个强烈的智能体信号。
信号 10. 纯 API 型智能体的 HTTP 抓取模式
Perplexity、部分 Claude 工具调用流程,以及大多数基于搜索的智能体都不运行浏览器。它们通过 HTTP 库直接抓取页面。
这些智能体会留下我们前面讨论过的 TLS 和 HTTP 信号——Node.js 的 undici 指纹、Python requests 指纹、Go net/http 指纹。它们通常不执行 JavaScript,因此根本不会触发客户端检测。
针对纯 API 型智能体的检测发生在网络层:TLS JA4 哈希、HTTP 头顺序、缺失的浏览器特有行为(没有 favicon 抓取、没有分析信标、没有字体请求)。若想识别这些智能体,你既要关注正在发生的事,也要同样关注没有发生的事。
信号 11. 任务塑形的会话目标
最强的信号并非技术性的,而是行为性的。AI 智能体的会话以人类会话很少具备的方式目标导向。
一个搜索商品的真实用户,可能会看 8 件商品、在 3 个标签页里比较规格、阅读评论、放弃后一小时又回来,然后才购买。而 AI 智能体会直奔商品、提取规格、加入购物车、结账。全程不到 90 秒,毫无偏离。
追踪会话级目标完成率的检测系统,可以凭短会话中成功完成任务的密度来识别智能体流量。这是一个较慢的信号,但当它与逐动作信号结合时,可靠性极高。
区别对待智能体
一旦识别出来,AI 智能体流量可以有多种处理方式:
-
拦截——如果站点不希望被自动访问,就在边缘直接拒绝。便宜又简单。
-
提供替代内容——返回一个面向 API 优化的版本(JSON、结构化数据),其生成成本低于完整的 HTML 页面。
-
限速——允许智能体,但约束其请求速率以保持站点性能。
-
收费——一些站点开始就以编程方式访问其数据向 AI 公司收费。检测是计费的前提。
-
正常服务——如果智能体是代表真实顾客行事,为它们服务就是生意。
不同的站点会做出不同的选择。技术上重要的是把检测部署到位,让这种选择成为可能。
移动的靶子
AI 智能体框架每个月都在改进。Anthropic 为 Computer Use 发布更新,增加滚动变化。Browserbase 增加鼠标抖动。OpenAI Operator 引入错字模拟。每一代框架都在收窄上文描述的部分检测面。
在 2026 年有效的技术,到 2027 年就需要更新。但底层的现实不会改变:AI 智能体执行任务,人类体验网站。无论智能体用何种具体手段试图融入,这种不对称都会产生信号。
把 AI 智能体当作一个持续演进的类别、而非一次性解决的问题的检测栈,将持续保持可见性。那些交付一个检测器就转身离开的检测栈,会发现自己的覆盖率在悄然衰退。