Tiana随笔

Computer Use 初体验:能力与边界

· Agent 实践

标签:#Agent #工作流 #自动化

Computer Use 初体验:能力与边界

让模型直接操作浏览器和桌面完成多步任务,像在看一个远程实习生工作。体验之后聊聊它现在能干什么、还不能干什么。

上个月我接了个活儿:把公司老财务系统里近三年的报销单,按新科目体系重新归类,导出成一份新格式的 Excel。听起来平平无奇,但那个财务系统是十年前买的闭源货,没有 API,导出的按钮藏在三层菜单里,每次还只能导出当月的五百条。我盯着屏幕想了想,反正也不值得为它写个爬虫去逆向它的私有协议,于是第一次认真把 Computer Use 类型的 Agent 请上了场。

结果有好有坏。它确实在半小时内把那些需要我手动点二十多次才能拿到的数据攒齐了,但也因为"看错"了一个分页按钮,漏掉了一整页记录,要不是我后来抽样核对,这份报表就带着窟窿交上去了。这次经历让我对 Computer Use 有了比较实在的判断:它不是科幻片里那种全能机器人,而是一种"能用但很挑剔"的工具。

这篇文章想用我自己的上手经验,聊聊 Computer Use 到底是什么、它到底适合干什么、又有哪些场景你最好离它远一点,以及如果真要用,该怎么在架构上把它当作最后手段、并写好它的"观察记录"。我不打算吹爆它,也不打算唱衰它,只说一个开发者踩过坑之后的真实体感。下面这些判断,都是我跑过四五个真实任务之后,用时间和返工换来的。

Computer Use 到底是什么

简单说,Computer Use 是一类能直接操作图形界面的 Agent。它不像传统自动化脚本那样去调函数、调接口,而是模拟一个"人":它先"看"屏幕(通常是截图,由视觉模型理解画面),再决定"点哪里、敲什么、拖到哪",然后把动作通过键鼠事件真的执行出来。它和你之间隔着的,就是那块显示器。

这听起来和老式的 RPA(机器人流程自动化)很像,但差别在于"智能"所在的位置。传统 RPA 是按坐标或选择器写死的脚本,界面一改版就全废;Computer Use Agent 靠视觉模型理解当前画面,界面布局变了,它往往还能凑合认出来继续干。这种"看得懂"的弹性,是它最大的卖点,也是它不稳定根源的开始。

Computer Use 的核心能力,是让 Agent 跳过"系统愿不愿意给你接口"这一步,直接用人能用的方式去用软件。这既是它的自由,也是它的枷锁。

我自己的比喻是:RPA 像那种"只认固定座位"的工人,桌子一挪就傻;Computer Use 像来了个新实习生,你给他看屏幕他就能猜下一步,但猜错也是常事。两种模式各有取舍,而 Computer Use 的取舍恰恰是"弹性换稳定性"。所以别把它当成 RPA 的升级替代品,它是在"没有接口、又不想写死脚本"那个缝隙里才划算。

它真正适合的场景

我用下来,Computer Use 在三类场景里性价比最高。判断标准其实就一条:这件事有没有"更稳的替代方案",没有,它才值得上。

无 API 的遗留软件

这是它最亮眼的舞台。很多企业内部系统、政府平台、老财务软件,根本没有对外开放的接口,要拿数据只能人肉点。给这种系统写爬虫要么逆向成本太高,要么协议一变就崩。Computer Use 直接用 GUI,等于绕开了"有没有 API"这个前提条件。我那次财务系统的经历,本质就是这种场景。

不过要强调一个前提:数据量得小、频次得低。它适合"季度做一次的对账",不适合"每分钟跑一次的同步"。遗留系统往往界面老旧、响应慢,Agent 在它上面每步都要等渲染,慢上加慢,所以只适合低频重活。如果那套老系统每天都要导,我宁可花时间写个抓包脚本,也不反复麻烦 Computer Use。

跨应用粘合

有些流程天然横跨好几个互不连通的软件。比如从邮件附件里取个 PDF,丢进另一个内部系统上传,再把结果复制到聊天群里。这些应用之间没有任何集成,传统做法只能人肉切换窗口。Computer Use 因为"看得见屏幕",天然擅长这种跨应用的串联,它不需要各应用互相认识,只需要像人一样在各个窗口间挪来挪去。

这类场景的价值不在"快",而在"免集成"。你不必为了偶尔一次跨系统搬运,去推动两个部门把系统打通。Agent 当胶水,成本是慢一点,收益是零改造。我做过一个把审批截图贴进周报的小任务,跨了三个应用,用 Computer Use 十分钟搞定,要是走正式集成估计得排两周需求。

一次性流程

如果你只想做一次、做完就扔的脏活累活,写正式自动化脚本的投入产出比往往很差。Computer Use 的入场成本极低:你描述一下任务,它就开始点。对那种"这辈子大概就跑这一次"的流程,它的价值非常直接。反过来说,凡是你预计要反复跑的流程,迟早该被更稳的方案替代。

我给自己立的规矩是:同一类流程如果跑超过三次,就值得考虑把它固化成脚本或 API 调用;只在第一次、第二次这种探索期,才放心交给 Computer Use。第三次还让它点,那就是我懒,不是它合适。

它不适合的场景

讲完优点,更该讲讲我踩过的坑对应的反面,这些场景我劝你谨慎,甚至别用。把不适合的场景列清楚,比罗列功能更有用。

高频操作

Computer Use 的每一步都要"截图,理解,决策,执行",单步成本以秒计。如果是高频循环,比如每分钟处理上百条记录,它的延迟会把吞吐拖到不可接受。高频场景应该走 API 或批处理,GUI 操作在这里是效率杀手。我试过让它每分钟去某个页面刷新状态,跑了十分钟我就放弃了,它自己产生的开销比任务本身还大,而且每隔几轮就因为页面弹了个意外广告而卡住。

高精确要求

视觉模型是会"看错"的。我那次漏掉一整页,就是它把"下一页"按钮和一个长得像的装饰元素搞混了。凡是要求像素级准确、分毫不差的活儿,比如对账要求零误差、填表要求字段一个字不能错,Computer Use 的误识率会带来持续的人工复核成本,很多时候反而比人直接做更慢。

这不是模型笨,而是"看屏幕"这件事天生比"读数据"不可靠。你让人对着截图点按钮,人也会偶尔点错;模型目前的点错率比细心的人高,所以它目前只配做"人复核后的执行",不配做"独立负责的最终环节"。我现在的做法是:凡是它产出的数据,都会抽样核对,核对比例随精度要求升高。报表类任务抽 10% 到 20%,涉及钱的抽 100%。

强实时

从截图到动作的链路里有不可忽略的固有延迟,加上模型推理时间,响应通常在秒级甚至更久。任何强实时场景,比如实时监控里要立刻干预、游戏或交易里的即时操作,它都跟不上。它适合"慢工出细活",不适合"争分夺秒"。把 Computer Use 放进实时链路,等于在高速公路上放了一辆观光巴士,迟早出事。

延迟与可靠性:被低估的真实成本

上手前我低估了两件事,用完后印象很深,值得单独讲。

第一是延迟。你以为"让它点一下"是瞬间的事,实际是:截一张图、传给视觉模型、模型返回坐标、Agent 移动鼠标、点击、等界面响应、再截图确认……一个动作轻松半秒到两三秒。一个二十步的流程,光动作就得好几分钟,这还没算它偶尔看错需要重试的时间。写这篇文章时我又跑了一遍那个导出任务,二十多步用了将近七分钟,而同样的事我手动做大约四分钟。也就是说,在低频场景下它省的是"我盯着屏幕"的精力,不是时间。

第二是可靠性衰减。单次任务成功率可能还行,但任务步数越多,整体成功率按乘法往下掉。假设每步 95% 成功,十步连起来就只剩约 60%。所以 Computer Use 的可用性严重依赖任务被拆得多碎、每步多简单。我后来的心得是:把长流程切成很多独立短任务,比扔给它一个宏大的"把这件事办了"要稳得多。

# 一个把长任务拆成短步骤的思路示意
steps = [
    "打开财务系统并登录",
    "进入'报销单查询'页面",
    "选择年份 2024 并点击查询",
    "点击导出按钮,保存为 csv",
    # 每一步都独立校验,而不是一条龙跑完
]

for step in steps:
    result = agent.run(step)
    if not result.ok:
        # 单步失败立即停下,而不是硬着头皮往下走
        alert(f"在步骤【{step}】失败:{result.reason}")
        break
别把 Computer Use 当成"一次说清楚就能全自动"的魔法。它的可靠性来自"小步快跑 + 每步确认",而不是"长链路盲跑"。

还有个隐藏成本:重试会让已执行的副作用翻倍。如果某步是"点提交订单",失败后重跑可能提交两次。所以凡是有副作用的步骤,都要设计成幂等,或者干脆卡在人工确认点,不让 Agent 自动跨过。我学乖之后,所有"写"操作都默认加人工确认,Computer Use 只负责"读"和"取数",把"写"留给确定性的脚本。

把 GUI 操作当作最后手段:API 优先原则

我给自己定的架构原则是:任何能用 API、能用脚本、能用 SDK 解决的事,绝不上 Computer Use。GUI 操作的成本(慢、不准、难调试)远高于程序化调用,它应该只在没有其他路可走时才被启用。

具体判断顺序我一般这样排:

  • 优先看目标系统有没有官方 API 或导出接口,有就直接调。
  • 没有 API 但数据在网页里,考虑写个轻量爬虫或抓包取数据,比 GUI 操作可控。
  • 既没有 API 也不是网页(纯桌面客户端),再考虑 Computer Use。
  • 即便上了 Computer Use,也尽量把它限制在"只做取数"这一步,后续清洗、转换、落库都用正经代码完成。

这个原则帮我省掉了大量不必要的麻烦。Computer Use 是补丁,不是地基;把它当地基用,系统会又慢又脆。我见过有人用 Computer Use 去操作数据库管理界面做日常同步,那真是把最不可靠的工具放到了最不该放的位置。GUI 的本质是给人看的,不是给机器稳稳调用的,这个事实不会因为模型变强就消失。

截图与 prompt 的工程细节

要让 Computer Use 准一点,工程上有两个我反复验证过的技巧。第一是截图分辨率别太高也别太低,太高烧 token、太低认不清字,我一般截到能看清按钮文字就停。第二是任务描述要具体到"界面语言",不要只说业务目标。我最初的 prompt 是"导出 2024 年报销单",它就在界面里瞎找;后来改成"点击左上角菜单,展开'报表',选择'报销单查询',在年份下拉里选 2024",准确率明显上来了。

任务:导出 2024 年报销单
操作指引(请严格按界面文字执行):
1. 点击左上角"菜单"按钮
2. 在展开项中点"报表中心"
3. 点"报销单查询"
4. 年份下拉选"2024",点"查询"
5. 点右上角蓝色"导出"按钮(不是灰色的"打印")
6. 在弹窗里选"CSV",确认保存
注意:分页在表格右下角,是蓝色文字链接,别点旁边的装饰箭头。

注意最后那句关于分页的提醒,它就是我那次漏页的教训。把"界面里哪里容易看错"写进 prompt,比泛泛提醒"小心别错"有用一百倍。Computer Use 的熟练,八成在写 prompt,两成在模型。

成本与观察记录的写法

上手 Computer Use 还有一个容易被忽略的维度:可观测性。因为它不像函数调用那样有清晰的输入输出日志,它的"行为"散落在一次次的截图和动作里。如果不记录,出错了你根本不知道它哪一步拐了弯。

我现在养成的习惯是,每次跑 Computer Use 任务都强制写一份"观察记录"。它不需要多正式,但必须包含几个要素:任务目标、拆成了哪几步、每步的截图存哪、哪步花了多久、最终结果是否抽样核对过。这样出了偏差,我能定位到具体是哪一步、为什么,而不是面对一堆乱糟糟的截图发呆。

# 观察记录的最小结构,跑任务时顺手记
observation = {
    "task": "导出 2024 年报销单并归类",
    "started_at": "2026-09-12 10:02",
    "steps": [
        {"name": "登录", "ok": True, "screenshot": "s1.png", "cost_s": 8},
        {"name": "查询 2024", "ok": True, "screenshot": "s2.png", "cost_s": 12},
        {"name": "导出", "ok": True, "screenshot": "s3.png", "cost_s": 15},
    ],
    "verified": "已抽样核对 50 条,发现 1 页遗漏已补",
    "note": "分页按钮容易被误点,下次显式提示'点击右侧下一页'",
}

成本这块也要算清楚。Computer Use 每一步都在烧视觉模型的 token,截图越大、步数越多,账单越长。我通常把截图分辨率压到够认就行,不追求高清;也会在 prompt 里明确禁止它"探索性地点来点去",减少无谓动作。省下来的既是钱,也是时间。

观察记录最大的价值其实是"迭代 prompt"。我每次跑完都会把踩过的坑写进下次的任务描述,比如"分页按钮在右下角、是蓝色文字、别点那个灰色的装饰箭头"。这些细节攒多了,Agent 的准确率会肉眼可见地涨。它不会自己长记性,记性得由你写在 prompt 和观察记录里。

我的三次具体上手记录

为了不空谈,列一下我实际跑过的三个任务,给你一个直观的取舍参考:

  • 任务一:导出老财务系统三年报销单。结果:成功,但漏了一页,人工补上。耗时七分钟,手动约四分钟。价值在"不用我盯着点"。结论:适合,但必须抽样核对。
  • 任务二:把邮件附件 PDF 上传到内部系统并通知群。结果:成功,跨三应用一次跑通。耗时十分钟。结论:非常合适,免集成收益大。
  • 任务三:实时监控竞品页面价格变动。结果:放弃,延迟太高、还常被弹窗卡住。结论:不适合,改回定时爬虫。

这三个例子基本覆盖了前面说的"适合"与"不适合"。你会发现,判断是否该用 Computer Use,最后都落回到那句老话:先看有没有更稳的路,没有,才让它上。

把上面三条结论写成判断函数,新任务来了先过一遍,省得每次重新纠结:

TASKS = [
    {"name": "导出三年报销单", "has_api": False, "steps": 42},
    {"name": "PDF 上传并通知群", "has_api": False, "steps": 17},
    {"name": "竞品价格实时监控", "has_api": True, "steps": 260},
]


def should_use(task):
    if task["has_api"]:
        return "有现成接口,别上,改回脚本"
    if task["steps"] > 100:
        return "步骤太多,延迟会失控,别上"
    return "可以试,但必须抽样核对"


for task in TASKS:
    print(f'{task["name"]}: {should_use(task)}')

一个失败案例的完整复盘

前面说了它适合什么,这里把一次彻底翻车的任务讲透,让你知道边界在哪。任务是"把竞品官网的每日价格抄进我们的比价表"。我让 Computer Use 每半小时跑一次,自动填表。结果第一天下午比价表就乱了:价格忽高忽低,有几行还是空的。

复盘下来有三个原因。一是竞品页面偶尔弹广告,Agent 把广告上的价格当成了商品价格,填了进去。二是页面价格是异步加载的,Agent 截图太快,截到的是"加载中"的占位符,于是填了空。三是它填表时偶尔把"日期"列和"价格"列搞反,因为那张表两列紧挨着、长得像。三个小错叠加,产出的数据完全不可用,而我那半天没看,等发现时已经污染了几十行历史。

结论很清楚:这个任务高频、要求精确、还有异步加载的干扰,三点全踩了 Computer Use 的雷区。最后我把它撤了,改成定时爬竞品的接口数据。所以判断该不该用,真的要看任务画像,而不是看"它能不能动"。能动能用,和能用对,中间隔着整个可靠性工程。

怎么判断一个任务该不该交给它(决策清单)

把上面的经验压成一张速查清单,每次想用 Computer Use 前过一遍:

  • 这件事有没有官方 API 或可导出的数据?有,就别用。
  • 数据量是否小、频率是否低?高频就别用。
  • 结果是否允许一定错误率、且你能抽样核对?要求零误差就别让它独立干。
  • 是否在强实时链路里?是就别用。
  • 界面是否稳定、文字清晰、按钮好认?花哨弹窗多的要谨慎。
  • 任务能否拆成很多独立短步骤、每步可校验?不能就别一条龙扔给它。
  • 是否有副作用(写、提交、删除)?有就加人工确认或改走脚本。

七条里只要命中两三条"别用",我就直接换方案。这张清单帮我省了不止一次返工。

隐私与合规:屏幕里不该出现的东西

用 Computer Use 有个常被忽视的风险:它截的图、它读到的屏幕内容,会进入模型上下文,可能经由日志、缓存或第三方服务留存。所以凡是屏幕上出现密码、密钥、客户 PII、内部机密文档时,都不该让 Agent 在那个界面活动。我一般会先把敏感窗口关掉,或者用一个专门的、干净的虚拟桌面跑 Agent,避免它"不小心看到"不该看的东西。

合规层面也要想清楚:把公司内部数据喂给外部视觉模型,是否符合你们的数据出境和保密规定?如果不符合,要么用本地部署的视觉模型,要么只让 Agent 操作已经脱敏的测试界面。这不是小题大做,屏幕截图是天然的高密度敏感载体,一旦出去就很难收回。

让 Agent 看屏幕之前,先问自己:这屏幕上如果有密码,它看到了会去哪。答不上来,就别开。

Computer Use 与 API Agent 的分工

最后把 Computer Use 放回整个 Agent 谱系里看。现在常见的 Agent 分两类:一类是"API Agent",它调接口、跑函数,输入输出都是结构化数据,稳、快、可验证;另一类就是本文说的"GUI Agent",它看屏幕、点按钮,弹性大但不可靠。这两者不是替代关系,而是分工关系。

我的系统里,能结构化的活全给 API Agent,它负责确定性执行;只有卡在"没有接口的老系统、跨应用的临门一脚、一次性的脏活"这些缝里,才轮到 Computer Use 上。Computer Use 是 Agent 工具箱里那把异形扳手,API Agent 才是日常用的标准扳手。搞清楚谁是主角谁是补丁,你才不会在错误的场景里错误地信任它。

给想上手的人一个最小起步建议

如果你读完也想试,我给一个最低成本的起步路径,避免一上来就踩大坑:

  • 先选一个"只读、低频、不敏感"的任务,比如把某个网页上的公开列表导出来,别一上来就碰含密码或钱的界面。
  • 任务拆成不超过十步的短流程,每步在 prompt 里写清界面文字和容易看错的点。
  • 跑完务必抽样核对结果,把看错的地方记进观察记录和下次 prompt。
  • 等准确率稳了,再考虑带一点点副作用的操作,且永远加人工确认。
  • 别指望它全自动,把它当"需要你看着点活的实习生"最省心。

这条路我走过,平稳、可控,也不会因为一次翻车就让你对整类工具失去信心。工具上手的正确姿势,是先在小坑里学会和它相处,而不是一头扎进高风险任务。

让它大放异彩的细节:节奏与截图频率

再分享一个把成功率拉起来的实操细节:别让 Agent 一路狂点,要在关键节点插入"确认点"。我的做法是每完成两到三步,就让它停下来汇总一次"我刚做了什么、接下来打算做什么",由我或一个简单的校验脚本确认后再继续。这等于把长链路切成一段段短链路,每段成功率的乘积不再那么难看。代价是交互变多、慢一点,但换来的是"走偏能尽早发现",对低频重活完全值得。

截图频率也值得调。太频繁,token 烧得快、页面还没渲染完就截了(前面比价表那次就是教训);太稀疏,它又可能漏看中间弹出的对话框。我现在一般设成"每次动作后等界面稳定再截,遇到加载动画就多等一轮",并显式告诉它"如果看到转圈,先等,别急着点"。这种对界面节奏的提示,比反复说"小心点"有用得多。Computer Use 的体验,很大程度就藏在这些不起眼的节奏设置里。

它解决不了的根本问题

说到底,Computer Use 是在"软件没给你接口"这个前提下的妥协方案。它再强,也只是在模拟人用界面,而界面天生是为人的眼睛和手设计的:有延迟、有歧义、有装饰干扰。只要目标系统愿意开放一个接口,程序化调用就在速度、准确、可验证上全面碾压 GUI 操作。所以我不认为 Computer Use 是自动化的终局,它更像是接口缺位时代的一剂过渡药。

这给我们的启示其实很积极:如果你手里有系统的话语权,与其把 Agent 训练得越来越会点按钮,不如推动把那些高频、高价值的流程做成接口。Computer Use 帮你度过没有接口的尴尬期,而真正的解法,往往还是回到"让机器用机器的方式对话"。把它用在缝里,把力气花在补接口上,才是既解近渴又利长远的姿势。

结语

Computer Use 给我的整体感觉,像一个手脚麻利但偶尔走神的实习生。它能搞定那些"没有接口就只能人上"的脏活,尤其在遗留软件、跨应用粘合、一次性流程里很有用;但它慢、会看错、长链路不可靠,在高频、高精度、强实时面前基本熄火。

我对它的定位非常明确:它是工具箱里那把趁手的扳手,专门拧那些没有螺丝刀可拧的异形螺丝,而不是用来盖整栋房子的主力。只要守住"API 优先、GUI 殿后"的底线,把它用在合适的缝隙里,再配好拆分策略、prompt 细节和观察记录,它就是 2026 年我工作流里一个虽不完美、却实打实能兜底的好帮手。工具没有好不好,只有用得对不对,Computer Use 尤其如此。别神话它,也别轻视它,把它当成一个需要你写清楚说明书、并在旁边看着点活的实习生,你们配合起来会很顺。

相关文章