AutoGLM 的 10 种原子操作详解
操作语言的意义
AutoGLM 输出的不是"点击右上角搜索"这种自然语言,而是一套固定的结构化操作 JSON。这套"操作语言"只有 10 个词汇,是整个框架最核心的中间接口。模型学会了用这 10 个动作组合完成手机上的几乎任何 GUI 任务。
每个动作 JSON 包含:
action:操作名称(下面 10 种之一)- 其他字段:操作参数(坐标、文本、App 名等)
_metadata:固定为"do"表示执行操作
Launch — 启动应用
{
"action": "Launch",
"app": "美团"
}
让设备打开一个指定名称的应用。框架内部维护了一份 App 名称到 Android 包名的映射表(在 phone_agent/config/apps.py 里),模型只需要说"美团",框架会翻译成 adb shell am start -n com.sankuai.meituan/.MainActivity。
适用场景:任务开始时、需要切换 App 时。
Tap — 点击指定坐标
{
"action": "Tap",
"element": [540, 960]
}
点击屏幕上的某个坐标点。模型根据视觉理解判断出按钮的像素位置,直接给坐标值。框架翻译成 adb shell input tap 540 960。
适用场景:绝大多数交互——点按钮、点图标、点菜单项、点链接。
Type — 输入文本
{
"action": "Type",
"text": "附近的火锅店"
}
在当前聚焦的输入框里输入文本。Android 上有个特殊限制:原生 adb shell input text 不支持中文,所以框架需要 ADB Keyboard 配合——这也是 ADB Keyboard 安装 成为必经步骤的原因。
适用场景:搜索框输入、表单填写、聊天发送。
Swipe — 滑动屏幕
{
"action": "Swipe",
"element": [[540, 1200], [540, 300]],
"desc": "向上滑动"
}
从一个坐标滑到另一个坐标,描述里标注滑动方向。翻译成 adb shell input swipe 540 1200 540 300 300(最后一个参数是滑动时长 ms)。
适用场景:列表翻页、下拉刷新、引导页滑动。
Back — 返回上一页
{
"action": "Back"
}
模拟按下手机的返回键。Android 上是 adb shell input keyevent KEYCODE_BACK。
适用场景:导航层级跳转、关闭当前页面、从二级页面回到首页。
Home — 返回桌面
{
"action": "Home"
}
模拟按下 Home 键回到手机桌面。Android 上是 adb shell input keyevent KEYCODE_HOME。
适用场景:任务开始前(确保在桌面)、App 卡死需要强制退出。
Long Press — 长按
{
"action": "Long Press",
"element": [540, 960]
}
在某个坐标上持续按住约 500ms。Android 上通过 adb shell input swipe 同坐标实现(滑动距离为 0)。
适用场景:拖拽操作、长按删除、长按弹出菜单。
Double Tap — 双击
{
"action": "Double Tap",
"element": [540, 960]
}
在同一坐标快速点击两次。框架内部连续调用两次 Tap 实现。
适用场景:地图缩放、图片双击放大、某些 App 的双击快捷操作。
Wait — 等待页面加载
{
"action": "Wait"
}
让 Agent 暂停几秒,等页面加载完成。具体等待时长由框架配置,一般 3~5 秒。这是防御性操作——模型判断"页面还在转圈"时主动触发。
适用场景:网络请求加载、动画过渡、弹窗出现。
Take_over — 请求人工接管
{
"action": "Take_over",
"desc": "微信登录需要手机号验证码"
}
模型判断当前操作需要人类介入时触发。比如遇到登录验证码、支付密码输入、银行卡绑定等敏感场景。框架触发 takeover_callback(回调函数可自定义),暂停 Agent 执行,等人工完成后继续。
适用场景:验证码登录、支付确认、二次验证、隐私授权弹窗。
10 种操作的设备实现对比
| 操作 | Android (ADB) | HarmonyOS NEXT (HDC) | iOS (WDA) |
|---|---|---|---|
| Launch | am start -n | aa start -a EntryAbility -b | 按 bundleId 启动 |
| Tap | input tap | uitest click | tap(x, y) |
| Type | ADB Keyboard 注入 | uitest input(原生支持) | type(text) |
| Swipe | input swipe | uitest swipe | swipe |
| Back | input keyevent BACK | uitest back | 按导航栏返回 |
| Home | input keyevent HOME | uitest home | home() |
| Long Press | 长按模拟 | uitest longClick | longPress |
| Double Tap | 两次 tap | uitest doubleClick | doubleTap |
| Wait | 时间 sleep | 时间 sleep | 时间 sleep |
| Take_over | Python 回调 | Python 回调 | Python 回调 |
自定义操作(进阶)
框架预留了自定义扩展点。如果你需要 Agent 执行某个框架没内置的操作(比如长按某个按钮的同时拖动),可以在 phone_agent/actions/handler.py 里注册新的 action handler,并在 System Prompt 里告诉模型这个新动作的存在和用法。