Java for You AI 从Holo4理解GUI Agent的坐标离散化、反映射与误差

从Holo4理解GUI Agent的坐标离散化、反映射与误差

终端窗口

电脑 Agent “看到”按钮,不等于它能在你的屏幕上准确点下去。中间还隔着坐标归一化、离散化、分辨率反映射和操作校验。读完本文,你能看懂动作 token 如何落到真实像素,并用一段小程序找出点击误差。

最新事件:一个模型跨越界面、代码和工具

H Company 9 月 28 日发布 Holo4,包含 27B 稠密模型和 35B-A3B 混合专家模型,权重有 BF16、FP8、NVFP4 和 4-bit GGUF 等形式。官方定位是通用电脑操作:看截图点击、输入,也能写代码、调用 API 或 MCP(模型上下文协议)工具。模型卡给出 262,144 token 配置上下文,并公开部分评测轨迹。

但官方也明确:不同榜单的任务子集、运行框架和成本口径并不完全一致。OSWorld 2.0 中 27B 版报告 61.7%,这是发布方结果,不是在你的分辨率、缩放比和业务界面上的成功率保证。它真正值得拆的,是“模型如何把看见变成动作”这个长期问题。

它解决什么问题

可以把屏幕想成一张方格地图。模型不必背下 1920×1080 中每一个像素,而是把横纵位置各压到 0—999 的格子,输出类似“点击 500,500”的动作。类比的边界在于,按钮不是静止地标:页面会滚动,系统缩放会变,弹窗也可能在观察后、点击前出现。

去掉类比,动作离散化是把连续的像素位置映射为有限符号集,以便自回归模型像生成文字一样生成动作;执行器再根据当前视口尺寸反映射为像素。精度不只由模型决定,还受截图裁剪、高分屏缩放、滚动偏移与执行延迟影响。

mermaid diagram

最小实践:检查坐标往返误差

def encode(x, y, width, height, bins=1000):
    qx = round(x / (width - 1) * (bins - 1))
    qy = round(y / (height - 1) * (bins - 1))
    return max(0, min(bins - 1, qx)), max(0, min(bins - 1, qy))

def decode(qx, qy, width, height, bins=1000):
    x = round(qx / (bins - 1) * (width - 1))
    y = round(qy / (bins - 1) * (height - 1))
    return x, y

width, height = 1920, 1080
points = [(0, 0), (960, 540), (1919, 1079), (321, 777)]
for point in points:
    token = encode(*point, width, height)
    restored = decode(*token, width, height)
    error = max(abs(a - b) for a, b in zip(point, restored))
    print(point, "->", token, "->", restored, "error=", error)
    assert error <= 1

不需要第三方依赖,保存为 coordinate_tokens.py,运行 python coordinate_tokens.py。代码先把像素归一化到 1000 个桶,再反向还原;边界裁剪避免越界。本次在 Python 3.9.6 实际运行,4 个测试点最大误差为 0 像素,断言通过。这只验证坐标数学,本次未下载 Holo4,也未验证真实 GUI 定位。

常见误区

第一,把“模型说要点哪里”当成“已经点对”。动作后必须再观察,检查页面是否真的转移。第二,只在一个分辨率测试。系统缩放、浏览器缩放和远程桌面编码都可能改变映射。第三,认为开源权重等于任意商用;Holo4-27B 模型卡标注 CC BY-NC 4.0,商业项目要先核对许可。第四,把榜单成功率当成业务成功率;真实任务的弹窗、权限、网络抖动和数据变化都不在一个数字里。

适用与不适用

它适合没有稳定 API、但能通过界面完成的低风险流程,例如在内部系统中搜索、录入草稿和整理报表。付款、删除、发布和权限变更不应仅依赖视觉点击,至少需要二次确认、幂等键、可回滚日志和最小权限。

我的判断是,电脑操作模型的竞争已从“会不会点”走向“能否在多界面间持续完成任务”。对开发者来说,最值钱的不是更多工具调用,而是每次动作都可观察、可拒绝、可重放。上线前建议建立不同分辨率的坐标回归集,并单独统计“定位正确但执行失败”的比例。

这里还有一个很容易被忽略的工程细节:模型看到的截图坐标系,未必等于操作系统输入接口的坐标系。浏览器视口可能不包含标题栏,截图可能被缩放或填充,多显示器还可能有负坐标。因此执行器应保存截图尺寸、实际视口尺寸、裁剪偏移、缩放比和时间戳,将它们与每个动作一起记录。否则问题发生后,团队只能看到“点击失败”,却无法区分是模型定位错误,还是坐标转换错误。

测试数据也不能只收集成功案例。建议专门加入小按钮、边缘位置、黑暗模式、不同语言、弹窗遮挡、界面动画和慢加载。同一个任务至少在 100%、125% 和 150% 系统缩放下重放,并分别记录元素定位命中率、真实点击命中率和任务最终成功率。这三个指标不能合并:模型可能找对了按钮,却因页面在执行前发生位移而点空。

如果页面有 DOM(文档对象模型)、无障碍树或稳定 API,应优先把它们作为高精度工具,视觉点击用于没有结构化入口的位置。Holo4 的有趣之处正是同一模型可以在这些界面间切换,但“可以切换”不等于“每次都会选对”。工程上应把选择理由写进轨迹:为什么不用 API,为什么改用 GUI,失败后是否能退回更确定的工具。

对高风险任务,一个可执行的清单是:动作前重新截图,核对目标文本与周边上下文;执行前将点击坐标与截图绑定;执行后检查预期状态变化;任何一步超时就停止,而不是连续盲点。这些机制比“请务必小心”的提示词更能决定真实安全。

5分钟实践题

把代码中的分辨率改成 2560×1440,再把 bins 改成 100,观察误差如何放大。然后思考:一个 12 像素宽的小图标,在你的映射精度下是否还可靠?

你会先为电脑 Agent 加哪一道保险:点击误差检查、操作前确认,还是失败后自动回滚?

关注「蜗牛聊AI」,一起看懂技术变化背后的真正机会。


本文首发于 java4u.cn,转载请注明出处。

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/ai/2861.html

作者: 蜗牛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部