Computer Use与GUI Agent

目录

订单调查的最后一步可能落在一个只有网页界面的履约系统:输入订单号、查看事件记录、下载获准的结果。Computer Use 让 Agent 通过界面完成这些操作,扩展了可以接入的系统范围。

它的工程价值是把界面观察、动作选择与结果核验接成循环。 能点击按钮只是其中一步;系统还需要知道当前窗口、坐标和业务对象是否正确,以及动作到底有没有完成。本文沿用订单调查,讨论这个循环如何实现、如何选择定位方式,以及怎样评估它的实际效果。

1. 结构化接口和 GUI 是可组合的执行路径

API、MCP 与 GUI 并不是先后淘汰的三个阶段。Tool Calling 表达模型对工具的调用请求,MCP 约定连接协议,Computer Use 提供界面动作;Computer Use 本身也可以通过工具调用暴露。

路径 可利用的信息 需要处理的主要条件
业务 API 对象 ID、参数、状态和错误码 接口权限、契约与业务语义
DOM / 无障碍树辅助操作 控件角色、名称、结构和部分状态 元素是否可见、可交互,结构是否完整
截图与鼠标键盘 页面外观、空间位置和视觉反馈 坐标映射、焦点、遮挡与状态变化

有稳定且获准使用的业务接口时,通常优先考虑它;但接口不覆盖目标功能、用户要求操作可见界面或需要核查实际显示时,GUI 仍有价值。接口存在不等于当前身份获准调用,更不能把 GUI 当作绕过接口权限的备用入口。

速度、费用和成功率需要在相同任务、权限与验收标准下比较,不能直接给“API 最可靠、GUI 贵 100–1000 倍”这类通用排名。

2. 观察、动作与验收组成完整循环

在履约页面查询订单,可以把每步组织为:获取当前观察,提出动作,检查范围与目标,执行动作,再观察结果。达到业务验收条件后结束;缺少信息、需要用户接管或预算耗尽则进入相应状态。

观察履约页面,选择并校验动作,执行后核验订单与记录,再决定继续、交付或等待

模型输出 done 只能表达“它认为完成了”。真正验收应核对页面订单号、目标记录和所需结果,必要时再查看下载产物。点击搜索按钮成功、URL 变化或页面返回 200,都不能单独证明查询任务完成。

自动恢复也受相同边界约束。查询框未聚焦,可以重新定位后输入;外部提交结果未知,则先观察和查询,不能直接再点一次。“返回上一页”或“关闭弹窗”也可能丢失工作,不能作为所有失败的固定恢复动作。

页面稳定不等于截图完全不变

连续截图相同可能只是卡在加载状态;时钟、光标和动画又可能让已可操作的页面持续变化。应优先等待与动作相关的条件:目标控件可用、加载提示消失、预期记录出现或状态明确改变,再检查画面。

如果条件在限定时间内未成立,就记录失败发生在哪一步。增加固定 sleep 可以偶尔掩盖时序问题,但无法证明原因已经解决。

3. 坐标转换必须与实际观察一致

把所有截图强行缩放到 1280×800 不是通用要求。拉伸会改变比例,小控件可能变得难以识别。缩放或裁剪时,应保存原图尺寸、裁剪范围、模型输入尺寸及实际动作坐标系。

下面是可执行的几何示例:将缩放截图上的一个点映射回截图对应的控制区域。它假设没有旋转和补边,原点、区域宽高都以控制接口实际使用的坐标单位给出:

import math

def map_point(x, y, image_size, control_rect):
    iw, ih = image_size
    ox, oy, width, height = control_rect
    values = (x, y, iw, ih, ox, oy, width, height)
    if any(not math.isfinite(v) for v in values):
        raise ValueError("coordinates must be finite")
    if min(iw, ih, width, height) <= 0:
        raise ValueError("dimensions must be positive")
    if not (0 <= x < iw and 0 <= y < ih):
        raise ValueError("point lies outside the image")
    return ox + x * width / iw, oy + y * height / ih

例如,800×500 的截图对应控制区域 (100, 200, 1600, 1000),截图中心 (400, 250) 映射为 (900, 700)。浏览器 CSS 像素、设备像素和桌面坐标可能不同,不能把 devicePixelRatio 不加判断地重复乘进去。存在补边、浏览器工具栏或多显示器时,需要使用真实的变换关系。

计算正确仍不保证点中目标:截图之后页面可能滚动、弹窗可能出现。动作要绑定观察版本;几何变化或目标不唯一时重新观察,不能长期复用旧坐标。

4. 结构化定位、视觉定位与编号标记各有作用

DOM 和无障碍树能提供按钮名称、输入框标签与状态,适合语义定位。截图可以确认遮挡、布局和画布内容。二者结合能减少仅凭像素或仅凭结构判断时的信息缺口,但不会自动保证成功。

在网页订单查询中,优先找当前页面可见且唯一的“订单号”输入框和“查询”按钮。若模型给出一个页面里没有观察到的选择器,不应直接执行。原生控件、画布或自定义渲染缺少完整结构时,再使用相应的视觉定位。

Set-of-Mark 为候选区域加编号,让模型选择标记而不是直接猜坐标。它改变了定位问题的表达方式,仍依赖候选区域是否正确、编号是否遮挡内容和当前观察是否过期。Set-of-Mark 论文

通用图像分割模型切出的区域不等于全部可点击控件。候选可以来自无障碍树、DOM、专门屏幕解析器或视觉检测。OmniParser 是屏幕解析方向的一个实现,可参考其项目说明;不能仅凭名称认定它在所有软件上都是最优方案。OmniParser 项目

编号也应带观察 ID。页面刷新后“12 号按钮”可能已经指向另一个元素;执行前需确认编号存在、目标仍可操作。拖拽还需明确起点、终点与路径,单个 coordinate 数组不足以描述完整动作。

5. 动作契约既表达操作,也表达预期结果

以下是应用层的说明性动作,不是某家厂商的工具 Schema:

{
  "observation_id": "fulfillment-view-018",
  "target_window": "fulfillment-demo",
  "action": "click",
  "target": {
    "kind": "observed_element",
    "id": "search-button-04"
  },
  "expected_result": {
    "order_id": "demo-001",
    "state": "query_result_visible"
  }
}

按动作类型分别验证参数:输入需要目标与文本,滚动需要方向与范围,拖拽需要起终点,按键需要合法键序列。动作记录用简短目的说明即可,不必要求模型输出完整内部推理过程。

授权范围也要绑定目标。允许读取履约记录,不等于允许点击“取消订单”;允许登录一个服务,不等于允许把凭据发送到页面临时出现的另一个站点。

厂商 API 与成品应用还需区分。Anthropic 和 OpenAI 都提供开发者使用的 Computer Use 文档,开发者需要接入执行环境、动作处理与结果反馈;不能把一家写成“只有 API”,另一家写成“只有浏览器产品”。具体模型、工具版本和动作集合变化较快,应按目标版本核对。Anthropic 文档、OpenAI 文档

6. 用任务评测和定位评测分别识别短板

定位正确不等于任务完成。一条调查可能包含窗口选择、输入、查询、筛选和结果保存,任何一步都可能影响最终交付。

OSWorld 原始论文提供真实计算机环境中的任务与执行结果评测,原论文包含 369 个任务。它适合研究端到端电脑操作,但其某个版本、步数预算与环境上的分数,不能直接当作企业内部履约系统的成功率。OSWorld 论文

比较公开结果时至少核对:

条件 为什么影响解释
数据集与环境版本 任务、应用和评估脚本可能改变
允许的动作与观察 纯截图、DOM、终端或文件接口不完全可比
步数、时间与重试预算 更多尝试可能提高成功率,也增加成本
模型与 Agent 实现 同一模型配不同运行时可能有不同结果
成功判定与人工介入 接管后完成与全自动完成是两种指标

不能把桌面任务与另一个网页任务集的分数相减,证明 DOM 方案更优;不同基准版本的差距也不能直接等同于过拟合程度。没有同口径证据时,保留机制分析比拼接一个“最新成绩榜”更可靠。

内部评测应覆盖当前应用、常见布局变化、异常网络、遮挡、焦点切换和权限状态。分别记录完成率、错误动作、未知结果、接管率、耗时与费用,再按失败原因决定改进观察、定位还是流程。

7. 混合执行也要共享任务与权限状态

订单主数据可以由 API 查询,履约记录通过 GUI 查看,最终报告再由应用生成。这种组合避免为已有接口重复做界面操作,也让暂时没有接口的系统进入同一任务。

路由选择要同时检查能力、可用性、权限和所需验收信息。如果 API 因权限不足被拒绝,不应自动切换 GUI 绕过;如果 API 故障但 GUI 途径本来已获准,可以使用它,并说明取得的结果与验证范围。

将反复出现的 GUI 路径封装成宏,可以减少规划开销,但历史成功次数不是充分验证。宏需要参数范围、状态前提、步骤后置条件、失败恢复和版本。UI 改版后重新回归;把 GUI 序列封成工具,也不意味着底层自动变成了稳定 API。

费用应记录截图或视觉输入、文本上下文、模型输出、工具和运行环境的实际计量。图片文件大小不能直接换算成 token;每步是否调用模型、截图分辨率与缓存策略都会影响费用。没有同任务测量,不给固定倍数与秒数。

一个共享桌面会有焦点和输入竞争,但可以通过独立浏览器会话、桌面或虚拟环境并行多个任务。并发仍受资源、服务限流与业务对象冲突约束,不能概括成“Computer Use 本质上无法并发”。

8. GUI 同样可以限制能力与数据范围

Computer Use 不是天然黑名单授权。系统可以只开放指定应用、窗口、域名和动作类型,使用权限有限的账号,在敏感动作前设审批门。动作 Schema 校验形式,应用权限限制真实能力,二者都需要。

隔离环境减少对宿主系统的影响,但普通容器与独立虚拟机的隔离性质不同,不能承诺“完全隔离”。只提供任务所需的文件、凭据和网络访问,并根据应用选择环境。

视觉注入也应按输入通道解释:

  • 可见文字或伪装控件可以进入截图,诱导模型改变目标。
  • 屏幕外或同色隐藏文字通常不能从没有相应像素信息的截图中恢复,但可能被 DOM 文本提取带入上下文。
  • 页面内容不会因为显示成“系统通知”就获得用户或系统指令的权限。

因此,防护不能只扫描截图;需要管理每条输入通道的来源,并在动作前核对原始任务、目标与授权。弹窗出现也不代表用户允许接受新条款或扩大权限。遇到需要用户接管的登录、验证或关键决定,应保留状态交给用户处理。

截图与操作记录有助于排障,也可能包含账号、客户资料和输入内容。按必要范围采集、脱敏和控制访问,而不是无差别永久录屏。

9. 改进方向:让界面状态更容易被验证

软件提供明确的控件标签、稳定对象标识、可查询状态和可取消操作,会同时帮助无障碍访问、自动化测试与 Agent 使用。错误信息应说明失败条件与可修正部分,避免让 Agent 只能从模糊弹窗里猜测。

可以优先观察三个变化:小控件定位是否更稳定,复杂流程的成功判定是否更清晰,以及重复任务能否在相同边界内减少模型调用。它们比按某条榜单曲线预测“一两年达到 95%”更能指导工程投入。

Computer Use 扩展了系统接入范围,持续价值来自可靠的观察、受控的动作和实际结果验证。下一篇讨论如何把经过验证的经验沉淀成可复用能力,而不是把一次成功操作直接推广为永久策略。

评论