Skip to content
Guides1 min read

逐步评估计算机操作智能体

在 Potato 中对计算机操作与 GUI 智能体做人工评估的一次演练:评判每一个动作、在截图上检查点击落点,以及逐个审查工具调用。

Potato Team

一个计算机操作智能体读取一张截图,决定一个动作,然后点击。评估它意味着检查每一步:动作对不对,点击有没有真的落在它所声称的那个元素上——而不只是看任务最终有没有成功。任务成功会掩盖那次点错按钮却仍然推进了的点击,也会掩盖那次靠运气才对的动作。 Potato 用一个 专门打造的 GUI 轨迹界面 和一个工具调用审查来审查这些运行,两者都用 YAML 配置。

一个 计算机操作智能体——也叫 GUI 或操作系统智能体——把屏幕看作像素或 DOM,并通过和人一样的控件来行动。像 OSWorld、ScreenSpot 和 AndroidWorld 这样的基准会自动给任务完成度打分。自动打分便宜且值得跑,但它无法告诉你一次运行为什么失败,也抓不住那次靠运气的通过。这正是人工逐步审查所填补的空白。

一个计算机操作步骤的解剖:截图、动作、裁定和点击落点评判动作以及点击是否落在它所声称的那个元素上

在一条 GUI 轨迹里你究竟评判什么?

每一步都把一张截图(智能体看到的东西)和一个动作(它做的事)配成一对。你评判这个动作,并且当这一步带有点击坐标时,你检查 Potato 画在截图上的落点标记:

  • 动作正确性 — 正确、点错元素、动作错误,或幻觉。
  • 点击落点 — 坐标是否落在了该动作所声称的那个元素上?
  • 结果 — 这次运行有没有完成任务,以及它最早在哪一步出了错?

一个带动作裁定和点击落点标记的计算机操作步骤审查每一步:动作正确性加上截图上的点击落点

yaml
annotation_schemes:
  - annotation_type: gui_trajectory
    name: gui_review
    description: "For each step: was the action correct and did the click land right?"
    steps_key: steps
    screenshot_key: screenshot
    action_key: action
    coord_space: normalized
    verdict_options: [correct, wrong_element, wrong_action, hallucinated]

每一步都提供 screenshotaction,以及可选的 x/y(或一个嵌套的 click: {x, y})。落点标记是自动化指标最常错过的部分:一个模型可以输出正确的动作标签,却把点击落在偏离目标十个像素的地方,而最终屏幕上的通过/失败永远不会把它暴露出来。

为什么第一个出错的步骤比最终结果更重要?

因为那一步才是你会去修复或拿来训练的东西。一次因为第 3 步误读了对话框而在第 9 步失败的运行,本质上是个第 3 步的问题,把它标在第 9 步会教出错误的教训。抓住第一次偏离,和 过程奖励模型 背后是同一个想法:每一步都有的信号会把错误定位住,而不是把整条轨迹塌缩成一个数字。

我怎么审查一个智能体的工具调用?

GUI 智能体也会调用工具和函数,而那些有自己出错的方式:意图对、工具错;工具对、参数畸形;调用对、顺序错。tool_call_review 方案把每一次调用从轨迹里抽出来,给它一张带工具名和美化打印参数的卡片,于是你一次评判一个(与 BFCL v4 / MCPMark 一致)。

对轨迹中每一次工具调用的逐次裁定评判每一次工具调用:工具对不对、参数对不对、顺序对不对

yaml
annotation_schemes:
  - annotation_type: tool_call_review
    name: tool_review
    description: "Judge each tool call: right tool? correct arguments?"
    steps_key: steps
    # verdict_options: [correct, wrong_tool, wrong_args, wrong_order]

工具调用在渲染时从每一步的 tool_callstool_callaction 字段中提取,所以一条混合了界面点击和 API 调用的轨迹可以在一个任务里从这两个维度被审查。

我怎么把它搭起来?

每个界面都在 examples/agent-traces/ 下附带一个可运行示例。让 Potato 指向其中之一,就能看到带样例数据的方案:

bash
pip install --upgrade potato-annotation
python potato/flask_server.py start examples/agent-traces/gui-trajectory/config.yaml -p 8000

你自己的数据以一个步骤列表的形式接入,每一步带一个截图 URL 或 data-URI 以及一个动作字符串。对于那些基于渲染后的页面而非原始截图工作的更广义的网页智能体,参见 网页智能体评估

延伸阅读