CMU AI AGENTS / 同一个循环,进入三种真实环境 / 第 28 课

电脑 Agent 看到的是页面,还是一堆坐标?

界面观察可能来自截图、DOM 或无障碍树;定位控件是 grounding,点击输入是动作。表示方式决定哪些信息可见,不能把视觉理解与可靠执行混为一谈。

完整讲解 · 条件对照 · 理解检查所在单元与学习顺序官方课件全页浏览

截图里看得见按钮,为什么模型仍可能点错?

前面代码 Agent 用路径找到文件,用行文定位表达式。浏览器 Agent 也必须把“用户想做什么”落到可执行目标上,只是目标变成页面元素。这个对应过程叫 grounding:把语言中的对象和界面中的具体对象对齐。本课先讲截图、结构与动作的关系,不讨论视觉模型内部的像素编码。

先认出目标,再决定动作

原课给的购物目标是购买低于 20 美元的蓝色杯子。画面里有奶油色杯 16 美元、蓝色杯 18 美元、蓝色套装 28 美元。“蓝色”只能排除奶油色;“低于 20 美元”才能排除蓝色套装。正确对象必须同时满足颜色、品类和价格,不能看到 blue 就点。

官方原课件 · Lecture 7 · PDF 第 8 页原课:蓝色杯子的观察、推理、动作循环
三个购物画面包含蓝色杯 18 美元、蓝色套装 28 美元,随后滚动并输入邮编

先看第一屏三个商品:蓝色与价格是两个独立约束。后面滚动、输入邮编说明一个点击只是流程中间一步。图里的奖励属于图示任务结果,不能解释为每点一次就获得奖励。

假设一个教学页面把蓝杯按钮画在矩形左上角 (400, 200)、右下角 (600, 280)。选中心得到 x=(400+600)/2=500、y=(200+280)/2=240。坐标计算没错,不代表对象选择就对:如果这个矩形属于套装,精确点击仍会执行错误选择。

为什么旧坐标失效

坐标只对一个具体画面、视口、滚动状态有意义。若页面向上滚动 100 像素,同一个按钮的新矩形变成 (400,100) 到 (600,180),中心是 (500,140)。继续点旧坐标 (500,240),可能落到另一个商品上。这里的数字是按矩形中心与滚动位移手算的教学几何,不是截图实测坐标。

模型不该把目标永久记成一个点。它要保留“蓝色单杯、18 美元”这个语义目标,根据最新观察重新定位,并让执行器知道坐标属于哪个视口或图像尺寸。如果截图缩放到原尺寸一半,图中 250 像素可能对应屏幕 500 像素;混用坐标系会产生系统性偏移。

官方原课件 · Lecture 7 · PDF 第 47 页原课:第一步输入是目标与截图
VLM 的初始上下文只有 Buy a blue mug 小于 20 美元目标和 Screenshot 0

图中还没有动作。先问模型拿到哪些信息:目标提供约束,截图提供当前界面。历史不自动存在,页面隐藏状态也不在这张图里。

官方原课件 · Lecture 7 · PDF 第 48 页原课:从视觉输入预测一次点击
上一页目标与截图之后新增 ACTION 0 click x0 y0

新增的 click(x₀,y₀) 是模型输出的动作,不是已经成功购买的证据。从识别对象到选择坐标,再到执行和读回新截图,仍有多个可能出错的位置。

结构信息为什么有用,又为什么不万能

如果页面提供 DOM 或无障碍树,Agent 可能通过角色、名称、文本和层级找到按钮。比如“商品卡片文本为 Blue mug、价格 18,其内部名为 Add to cart 的按钮”。这种目标能在布局变化时重新定位,通常比持久保存绝对坐标稳健。

但结构中可能有隐藏元素,按钮名字可能都叫“加入购物车”,画布应用可能根本没有丰富的结构。只用可访问名称会命中多个对象;只用 CSS 路径也会被布局重构破坏。截图提供视觉关系,结构提供语义与层级,两者都需要与当前界面核对。原课这里直接展示的是截图驱动动作;DOM 与无障碍树是我们补充的工程对照,不把它冒充成这两页课件的实验结论。

观察过程 · 改变条件

滚动之后还点旧位置吗

先算出新中心,再逐步查看点击是否仍在按钮范围内。

教学构造场景 · 按下方规则逐步回放;不调用真实模型,不代表实际成功率。

这一轮的输入

按钮原中心 (500,240),页面向上滚动 100

  1. 1. 确定目标

    目标仍是同一个蓝色单杯按钮。

  2. 2. 保留旧点

    动作继续使用 (500,240)。

  3. 3. 核对新位置

    新按钮范围 y=100 到 180,240 已在范围外。

确定目标

目标仍是同一个蓝色单杯按钮。

1 / 3
先预测,再核对结果与原因点位落在目标之外。

对象没变,但坐标依赖的画面变了。

先选择“保持旧坐标”,再换成“重新定位”。两条回放只改变是否更新坐标,目标、滚动距离与按钮尺寸都相同。由此可以定位失败原因是状态过时,而不是算术不会做。

反例:名称正确,仍然不是可执行目标

页面出现两个“确认”按钮,一个在未打开的弹窗模板里,另一个在可见购买对话框里。文本匹配拿到了两个候选,就应继续使用可见性、所在弹窗和当前焦点缩小范围。盲选第一个会把不确定性藏在代码里。

另一个反例是页面尚在加载。截图上有按钮,但被加载遮罩覆盖,坐标落点正确也不会触发目标动作。这时改成点击十次只会增加不确定性。合理的下一步是观察遮罩是否消失、元素是否可交互,并在一次动作后验证状态变化。

选择接口时应看任务与环境:有可靠结构时优先用能表达目标的定位方式;只能看到远程桌面或画布时必须依赖视觉定位;两者都存在时可相互校验。验收要包括缩放、滚动、同名元素和异步加载场景,不能只在固定桌面截图上通过一次。

目标是“哪个对象”,坐标只是它在当前画面上的临时地址。 这个结论来自界面几何与状态关系;某种定位方式的实际成功率仍要在具体环境中测量。

理解题 1:把按钮中心算到小数点后两位,能解决点错商品吗?

不能。目标选错与坐标精度是不同问题。必须先把颜色、品类、价格约束同时映射到同一商品,再求这个对象的位置。

理解题 2:向上滚动 100 像素,旧中心 y=240 应改为多少?

在没有其他布局变化的假设下是 140。若页面同时插入横幅或发生重排,单纯减 100 不再可靠,应重新观察定位。

理解题 3:DOM 中找到了唯一按钮,就能断言它可点击吗?

还不够。它可能隐藏、禁用或被遮挡,需要结合当前可见状态与动作反馈判断。结构定位减少歧义,但不取消环境验证。

找到并点中按钮后,任务为什么还不能算完成?下一节继续追踪点击之后真正发生的状态改变。