AutoGLM 视觉理解:让 Operit 看懂屏幕画面
为什么需要视觉理解
UI Tree 虽然精准,但有明显盲区:Canvas 绘制的游戏界面、自定义 SurfaceView、WebView 内嵌页面——这些在 UI Tree 里要么只显示一个容器节点,要么完全缺失。这时候就需要让 AI 直接看屏幕画面来判断该点哪里。
Operit 集成了智谱 AI 的 AutoGLM 视觉模型做这件事。
AutoGLM 是什么
AutoGLM 是智谱 AI 推出的面向 GUI 自动化的视觉-语言模型。它接收截图 + 自然语言指令,输出具体的坐标点击位置或操作序列——不是通用的图像描述,是直接可执行的操作指令。
这和 Operit 的 UI Tree 路径形成互补:
- UI Tree → 精准、结构化、不依赖视觉模型(但覆盖不全)
- AutoGLM → 覆盖全屏(包括 Canvas),但依赖视觉判断(可能不精准)
工作原理
截图 + 用户指令 → AutoGLM 视觉模型 → [坐标(x,y), 操作类型, 置信度]
举个例子,你说「把视频播放器调到 1.5 倍速」:
- UI Tree dump → 播放器控件可能只是个 SurfaceView 容器,内部倍速按钮位置拿不到
- 回退到 AutoGLM → 截一张屏,发给模型
- 模型看截图,理解画面里的「倍速」按钮在坐标 (820, 450),输出这个位置
- Operit 模拟点击 (820, 450)
什么时候走视觉路径
Operit 内部有自动判断逻辑,大致触发条件:
- UI Tree 里找不到匹配元素(返回空或置信度太低)
- 元素可点击但 bounds 坐标可疑(比如超出屏幕范围)
- 用户指令涉及界面语义(如「关掉那个弹窗」),纯文本匹配不够
也可以强制走视觉路径,在指令里暗示视觉:
「看截图里那个蓝色图标,点它」「找到画面右上角的设置齿轮」
视觉路径的局限(要诚实)
精度不如 UI Tree
AutoGLM 输出的是坐标范围而非具体控件,密集界面上可能点错旁边的按钮。Operit 会做二次确认——如果点了之后界面没变化,它会截图再看,修正坐标再点。
依赖云端模型
AutoGLM 是云端 API,需要网络连接。本地视觉模型替代方案还在探索中。如果网络不好,视觉路径会慢或直接失败。
遮挡和干扰
有弹窗、广告、系统通知挡住目标时,模型可能被迷惑。建议在干净界面下操作。
不同 DPI / 分辨率适配
AutoGLM 在训练时见过各种设备分辨率,但极端分辨率(如折叠屏、小屏设备)上坐标输出可能偏差。Operit 内部会按屏幕尺寸做归一化。
实际使用场景
| 场景 | UI Tree 能处理? | 需要视觉? |
|---|---|---|
| 点击微信聊天列表项 | ✓ | ✗ |
| 在 Canvas 绘制的游戏里点技能 | ✗ | ✓ |
| WebView 内嵌页面里点按钮 | 部分 | ✓ |
| 滚动到页面底部再看 | ✓ | 辅助定位 |
| 识别屏幕上的文字内容 | 部分(TextView) | ✓ |
调试与验证
如果 UI 自动化失败,可以让 Operit 先截图再说话:
「先截一张当前屏幕图,然后告诉我要保存那个 PDF 文件应该点哪里」
它会截图、发送给视觉模型、返回判断——比直接让它动手多一步验证,减少误操作。