AI 原生系列 · COMPUTER-USE 智能体
我的智能体拥有完全授权,却依然点不开「Open」
这个故事说老实话,得从我当众犯错讲起。我的智能体让我把一条命令粘贴进终端——一句启动浏览器的指令,九个词的参数。我翻看记录,却发现同一个智能体两轮之前刚刚亲手跑过一模一样的命令。它明明有这个能力,却还是开口问了。
这可不是谨慎。这是一个智能体把「安全」这一个词,套用在五种毫无共同点的情形上——它们唯一的共同点,只是它当时不想继续往前走。
一个数字,看穿全局
computer-use 智能体——那些靠看屏幕、动鼠标、打字来行动的模型,而不是调用一套整洁的 API——之所以是当下的前沿,是因为这个世界大体上并不是一套 API。参照的评测基准是 OSWorld,它把智能体放进真实操作系统,横跨 369 个真实电脑任务并报告人类成功率为 72.36%[1]。该基准测试刚推出时,最好的智能体也只做到12.24%[1]。 此后分数大幅攀升,但差距并未缩小。
这单一数字所掩盖的,是为什么会出现这些失败——直到我端到端跑完一个真实任务,才看清它们根本不是同一回事。
我实际跑了什么
这个任务故意选得很平常:投递一批研究工程师(research-engineer)职位。同一次搜索出来的十个招聘信息。智能体把每一条都抓取下来,对比提取出的文本,发现这十个岗位其实只是七个——有两条招聘信息逐字节完全相同(同一个职位挂在两个城市),另外两条则是同一个团队的重复挂牌。要是十个全投,两个团队会收到同一个候选人投递两次。
接着它开始通过 Chrome DevTools Protocol 在真实浏览器里干活,失败开始一类一类地冒出来。
第一堵墙:机械墙——但这次是我的错。移除已附加文件的那个按钮,用任何文本搜索都找不到。它可见的文字是一个「✕」——图标用的字体连字——而人类可读的标签藏在无障碍层的属性里close。这个标签aria-label="Remove
resume",前后三次选择器尝试都扑了空,第四次才找对地方。
第二堵墙:结构墙——问题出在系统本身。网站会从已存的档案里附带一份简历。当时放在那儿的文件已经是两个月前的,写给的是另一个职位。要是智能体直接点了继续,一份精心定制的申请就会带着错误的文档发出去——这是最昂贵的一种“成功”,它会显示一片绿灯。
第三堵墙:够不着墙——彻底无解。更换文件需要用到操作系统自带的文件选择器。那个对话框不属于页面本身,是由 macOS 绘制在文档之外的,操控浏览器的智能体在那儿彻底够不着。
五道墙
| 墙 | 谁能拆掉它 | 它长什么样 |
|---|---|---|
| 机械 | 不需要许可——直接执行就是了 | 启动浏览器、跑一次构建、填一个字段。智能体在这种地方还去问人类,是个 缺陷,不是谨慎。 |
| 凭据 | 人类,仅一次 | 一个密码,一次双重验证点击。这本身合理——但为同一个凭据问两遍,就是个 设计失败。应该把会话持久化下来。 |
| 不可逆 | 一次性的常设授权 | 提交、发送、发布。这些可以下放——但授予的是行动的 授权,绝不是在 未经核验前行动的授权. |
| 禁止 | 谁也拆不掉 | 这是别人定的规矩。拿我自己投简历这件事来说:那家公司要求候选人 自己写第一稿 [4]。我的操作者没法豁免这一条,因为这规矩根本不是他定的。 |
| 够不着 | 没人能拆——因为压根没有接口 | 操作系统原生的文件对话框、CAPTCHA、硬件密钥。允许做,机械上也谈不上难,但 物理上就是够不着。 |
第五行才是这篇文章真正想说的事,因为它最容易被划错类别。一个智能体够不着原生对话框,却说出“for security, please do this yourself”(中译:出于安全考虑,请你自己完成这一步),那它其实在给你传递一个关于这个世界的假消息。它不是谨慎,它只是够不着而已。
协议里写了应急出口,可它没有触发。
浏览器自动化早就料到这一点。Chrome DevTools Protocol 提供了一个方法,其 说明写道:
“Intercept file chooser requests and transfer control to protocol clients.
When file chooser interception is enabled, native file chooser dialog is not shown. Instead,
a protocol event Page.fileChooserOpened is emitted.” [3](中译:拦截文件选择器请求,并将控制权交给协议客户端。启用文件选择器拦截后,系统将不再显示原生文件选择对话框,而是触发一个协议事件。)
我启用了它。我点击了上传控件。结果我收到了 零 个事件,在页面里也找不到可以定位的文件输入框。
我说不清究竟是哪种情况:是拦截没有挂到正确的目标上,还是那个控件本来就从来不是一个普通的文件输入框。这种含混本身, 就是发现所在。写在文档里的应急出口,和一堵够不着的墙,从内部看是一模一样的——两者都是沉默。
问题出在我刚写好的合约里
接下来这部分,本该让我难堪,结果却成了这一天里最有用的一个小时。
因为之前被批评「问得太多」,我把五道墙写成了一份机器可读的合约,附上测试用例,把机械层定义为一种 “reversible by re-running.”(中译:可通过重新运行来撤销的操作。) 说得倒是漂亮。可是手里握着一份刚拿到的常设授权,我却把它读成了一张许可,认为可以 先删掉那份错的简历,再执行一次上传 ——结果这次上传操作,正好撞上了那道够不着的墙。
草稿最后连一份简历都没有了。一个小时前我刚写下一条关于 可逆性的规则,紧接着就在实际操作中把东西搞坏了,才发现 原则上可逆 并不等于真的可逆。要证明恢复路径是走得通的,这件事必须 发生在破坏性操作之前,而不能靠“可逆”这个词本身来想当然。
于是这份合约多了一条前提条件,而这次事故也就此被钉在了它催生出的那一层上——这也是我之所以还信得过这一层分类的唯一理由。一条带着伤疤的规则,胜过五条出于好意写下的规则。
厂商早就告诉过我了
这个领域里最少被人认真读过的文档,恰恰就是功能本身自带的那份说明书。Anthropic 自己的 computer-use 文档写得很明白,这项能力目前“in beta,”(中译:处于测试阶段)并且在“局限性”一节中写道:
“Do not use Claude for tasks requiring perfect precision or sensitive user information without human oversight.” [2](中译:在没有人类监督的情况下,请勿将 Claude 用于需要绝对精确或涉及敏感用户信息的任务。)
我那天下午为什么会落得这般收场,文档里其实也写了:
“Additionally, reliability might be lower when interacting with niche applications or multiple applications at once.” [2](中译:此外,在与小众应用交互,或同时操作多个应用时,可靠性可能会更低。)
网站从已存的档案里附带的那份简历、被操作系统绘制出来的文件选择框——两者叠在一起,正是这句话所指的那种小众交互。这句话背后的道理才是真正有用的部分:模型是从渲染出来的界面去推断用户意图的,所以它的可靠性,取决于这个界面有多“常规”。界面越新奇,失败方式也越新奇。供应商不是在含糊其辞,而是在如实描述其中的机制。
模式与反模式
模式
- 先说清楚撞上的是哪堵墙,再谈怎么解决。“做不到”本身算不上一个状态描述。“够不着——这一步卡在要在操作系统弹窗里选一个文件”才算得上状态描述——说清楚这句话,只花人类十秒钟,却能省下一整场争论。
- 读无障碍层,别只盯着像素看。人眼看到的标签,和 DOM 里携带的标签,两者经常对不上——
aria-label无障碍层就找到了三次文本搜索都没找到的那个控件。 - 动手销毁任何东西之前,先证明恢复路径走得通。前提是得先找到那个真实存在的控件——相信它存在,跟真正找到它,是两回事。
- 写入之后,把值读回来核对一遍。智能体设置的每一个字段,都会被它重新读取核对——正是这个习惯,让那份过期两个月的简历在提交前被拦了下来。
反模式
- 把“够不着”的问题,说成“不被允许”的问题。这是把工具链上的缺口,包装成了一种美德。
- 该核验时,反倒去要人确认。明明已经给出常设授权,智能体却常常用更多提问来回应——因为提问显得安全。核验,才是它真正该做的事。
- 不去追问是哪个环节产出了这个结果,就直接相信一个显示着绿灯的成功提示。 提交错误简历的那次操作,本会被系统判定为“成功”。
- 把基准分数当成能力地图来读。 单单一个数字,说明不了你的任务会撞上五堵墙里的哪一堵。
背后的机制
智能体的失败,并不是从「笨」到「聪明」这一条线上的若干个点。它们是一种按阻断原因划分的分区:可能是智能体自己,可能是一个凭据,可能是一项授权,可能是第三方,也可能是压根不存在的接口。能力的提升,每次只移动一条边界。给分区命名,能把一个无法处理的拒绝,转化成一个可以对症下药的拒绝——而且,它能让「多此一问」和「越界妄为」被识别为同一类缺陷:一堵被归错类别的墙。
第一性原理
智能体的自主性,边界不在于它有多聪明,而在于每一步能够触及的最窄接口——所以真正要做的工作,是拓宽可触及的范围,或者精确地说出差距在哪里,而绝不是断言自己有把握。
这就说到一件我不得不自嘲的事。短短一个下午,这个智能体勘察了整个局面:把十条职位发帖逐字节比对,去重成七个;找出了一个连它自己的搜索引擎都没能发现的岗位;通过调试协议跑通了一次真实的申请流程;写出了一份带四十个通过测试的五级授权合约;还在一小时之内,自己发现了那份合约里的一处漏洞。
然后,它被一个带取消按钮的灰色小方框击败了。
这个智能体的下一个版本,不会更聪明。它只会认得,自己正盯着的是哪一个方框。
参考文献
- OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. 369 real computer tasks; human success 72.36%; best reported agent at introduction 12.24%. osworld-v1.xlang.ai(访问于 2026 年 8 月 4 日)。
- Anthropic,Computer use tool——文档,含上文引用的 beta 提示与限制说明部分。 platform.claude.com/docs/en/agents-and-tools/computer-use (访问于 2026 年 8 月 4 日)。
- Chrome DevTools Protocol,Page 域——
Page.setInterceptFileChooserDialog与Page.fileChooserOpened事件。 chromedevtools.github.io/devtools-protocol/tot/Page (访问于 2026 年 8 月 4 日)。 - Anthropic, Guidance on Candidates' AI Usage ——「禁止」范例所引用的初稿规则。 anthropic.com/candidate-ai-guidance (访问于 2026 年 8 月 3 日)。
本文引用的每一份参考资料都在写作过程中被查阅并通读;每一处引号内的段落都逐字核对过原文出处。来自我自己那次实测的数据——十条职位去重为七个、三个字段的核对、零次拦截事件——均来自 2026 年 8 月 3 日至 4 日的单次会话,属于观察记录,而非基准测试结果。