亲测Open-AutoGLM:一句话让AI替你操作安卓手机
摘要:本教程教你在本地环境部署智谱 AutoGLM-Phone-9B 多模态大模型,实现隐私安全、低成本的手机 AI 助理。从原理到部署、从操作到优化,一文搞定!
1. 什么是 Open-AutoGLM?
1.1 项目简介
Open-AutoGLM是由智谱 AI 开源的手机端 AI Agent 框架,基于视觉语言模型(VLM)构建,能够通过自然语言指令自动操控安卓设备。用户只需输入如“打开小红书搜索美食”这样的语句,系统即可理解屏幕内容、解析任务意图,并通过 ADB 自动完成点击、滑动、输入等操作。
该框架的核心优势在于:
- 多模态感知:结合图像与 UI 结构化信息理解界面
- 自动化执行:无需手动干预,全流程闭环控制
- 灵活接入:支持 USB 和 WiFi 连接,便于远程调试
- 安全机制:敏感操作可设置人工确认或接管
它适用于自动化测试、智能助理、无障碍辅助等多种场景。
1.2 部署模式对比
| 对比项 | 云端 API 模式 | 本地部署模式 |
|---|---|---|
| 数据隐私 | 截图上传至服务器 | 数据完全保留在本地 |
| 运行成本 | 按调用次数/Token 收费 | 一次性部署,后续零费用 |
| 网络依赖 | 必须联网 | 可离线运行 |
| 响应延迟 | 受网络影响较大 | 本地推理更稳定快速 |
对于注重隐私和长期使用的用户,本地部署是更优选择。
1.3 适用人群
- 开发者:探索 AI Agent 的工作流程与工程实现
- 极客玩家:体验多模态大模型在真实设备上的交互能力
- 自动化爱好者:构建个性化脚本替代重复操作
- 研究者:用于人机交互、任务规划等方向的技术验证
2. 核心原理解析
2.1 AI Agent 工作循环
Open-AutoGLM 遵循经典的感知-思考-行动(Perception-Thinking-Action)循环架构:
┌─────────────────────────────────────────────────────┐ │ Agent 执行循环 │ ├─────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 感 知 │ ──→ │ 思 考 │ ──→ │ 行 动 │ │ │ │ │ │ │ │ │ │ │ │ 截取屏幕 │ │ 分析状态 │ │ 执行操作 │ │ │ │ 解析UI树 │ │ 规划路径 │ │ (ADB) │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ ↑ │ │ │ └──────────────────────────────────┘ │ │ 循环执行 │ └─────────────────────────────────────────────────────┘每一轮迭代中:
- 感知层获取当前手机屏幕截图和 UI 层级结构;
- 推理层结合任务描述进行多模态理解,输出下一步动作;
- 执行层将动作转化为 ADB 命令发送给设备;
- 回到第一步继续观察结果,直到任务完成。
2.2 三层架构详解
感知层(Perception Layer)
| 感知方式 | 实现方式 | 输出格式 |
|---|---|---|
| 视觉感知 | adb shell screencap -p > screen.png | PNG 图像 |
| 结构化感知 | adb shell uiautomator dump | XML 元素树 |
| 应用状态感知 | adb shell dumpsys activity activities | 当前 Activity 名 |
这些信息共同构成对手机界面的完整理解,帮助模型判断按钮位置、文本含义及上下文状态。
推理层(Reasoning Layer)
AutoGLM-Phone 使用一个9B 参数的视觉语言模型(VLM),其输入包括:
- 系统提示词(定义角色与行为规范)
- 用户任务指令(如“搜索周杰伦的歌”)
- 当前屏幕截图(Base64 编码)
模型输出遵循特定格式:
<think>我需要先找到音乐App图标并点击</think> <answer>{"action": "Tap", "element": [500, 800]}</answer>其中<think>包含推理过程,<answer>包含结构化操作指令。
执行层(Execution Layer)
所有操作最终通过 ADB 命令执行:
| 操作类型 | ADB 命令示例 | 说明 |
|---|---|---|
| Tap | adb shell input tap 500 800 | 点击坐标 |
| Swipe | adb shell input swipe 500 1000 500 200 | 从上往下滑动 |
| Type | adb shell am broadcast -a ADB_INPUT_TEXT --es msg "hello" | 输入文本(需ADB Keyboard) |
| Launch App | adb shell am start -n com.ss.android.ugc.aweme/.main.MainActivity | 启动抖音 |
| Back | adb shell input keyevent KEYCODE_BACK | 返回键 |
3. 环境准备(超详细)
3.1 系统要求
| 组件 | 推荐配置 |
|---|---|
| 操作系统 | Windows / macOS / Linux |
| Python | 3.10 或以上版本 |
| 内存 | ≥16GB(量化后),≥32GB(原始模型) |
| 存储空间 | ≥20GB 可用空间 |
| 安卓设备 | Android 7.0+ |
| ADB 工具 | 已安装并配置环境变量 |
3.2 安装 Python 与依赖管理
建议使用虚拟环境隔离依赖:
# 创建虚拟环境 python -m venv autoglm-env source autoglm-env/bin/activate # Linux/macOS # 或 autoglm-env\Scripts\activate # Windows # 升级 pip pip install --upgrade pip3.3 安装 ADB 工具
Windows
- 下载 Android SDK Platform Tools
- 解压后添加路径至系统
PATH环境变量 - 验证安装:
adb versionmacOS
使用 Homebrew 安装:
brew install android-platform-tools adb versionLinux
sudo apt update && sudo apt install adb3.4 配置安卓手机
开启开发者模式
设置 → 关于手机 → 连续点击“版本号”7次启用 USB 调试
设置 → 开发者选项 → 开启“USB 调试”连接设备并授权
- 使用数据线连接电脑
- 手机弹出授权对话框时勾选“始终允许”
- 执行命令验证:
正常输出应类似:adb devicesList of devices attached ABCD1234567890 device
3.5 安装 ADB Keyboard
用于支持中文输入:
- 下载 ADBKeyboard.apk
- 安装:
adb install ADBKeyboard.apk - 在手机设置中启用该输入法
- 切换默认输入法为 ADB Keyboard
验证是否生效:
adb shell ime list -a | grep ADB # 应输出 com.android.adbkeyboard/.AdbIME3.6 克隆项目并安装依赖
git clone https://github.com/zai-org/Open-AutoGLM.git cd Open-AutoGLM # 安装核心依赖 pip install -r requirements.txt pip install -e .4. 模型下载与本地部署
4.1 下载模型文件
推荐使用 Hugging Face CLI 或 ModelScope 加速下载。
方法一:Hugging Face(国际源)
pip install huggingface_hub[cli] # 设置镜像加速(国内用户) export HF_ENDPOINT=https://hf-mirror.com huggingface-cli download \ --resume-download zai-org/AutoGLM-Phone-9B \ --local-dir ./models/AutoGLM-Phone-9B方法二:ModelScope(国内推荐)
pip install modelscope python -c " from modelscope import snapshot_download; snapshot_download('ZhipuAI/AutoGLM-Phone-9B', local_dir='./models/AutoGLM-Phone-9B') "模型大小约 20GB,请确保磁盘空间充足。
4.2 启动本地服务
python main.py --local --model ./models/AutoGLM-Phone-9B "打开微信"参数说明:
--local:启用本地 MLX 推理(Apple Silicon)或 PyTorch(其他平台)--model:指定模型路径- 最后字符串为初始任务指令
首次运行会加载模型,耗时约 30 秒(视硬件而定)。
4.3 4-bit 量化优化(低内存设备适用)
若内存不足(如 16GB Mac),建议进行 4-bit 量化以降低显存占用。
量化步骤
# 安装转换工具 pip install "git+https://github.com/Blaizzy/mlx-vlm.git@main" # 执行量化 python -m mlx_vlm.convert \ --hf-path ./models/AutoGLM-Phone-9B \ -q \ --q-bits 4 \ --mlx-path ./autoglm-9b-4bit使用量化模型
python main.py --local --model ./autoglm-9b-4bit "打开B站搜索Python教程"| 指标 | FP16 原始模型 | 4-bit 量化模型 |
|---|---|---|
| 模型体积 | ~20 GB | ~6.5 GB |
| 内存占用 | ≥32 GB | 16 GB 可运行 |
| 推理速度 | 较慢 | 提升约 3 倍 |
| 准确率损失 | 基准 | <2% |
5. 实战操作指南
5.1 基础使用方式
单次任务模式
python main.py --local --model ./models/AutoGLM-Phone-9B "打开抖音搜索用户名为dycwo11nt61d的博主并关注"交互式模式
python main.py --local --model ./models/AutoGLM-Phone-9B > 打开美团外卖点一份黄焖鸡米饭 > 发送消息给妈妈说我晚上回家吃饭 > 退出5.2 常用参数说明
| 参数 | 作用说明 | 示例值 |
|---|---|---|
--local | 使用本地模型推理 | --local |
--model | 指定模型路径 | --model ./autoglm-9b-4bit |
--device-id | 指定 ADB 设备 ID 或 IP:Port | --device-id 192.168.1.100:5555 |
--lang | 设置语言(cn/en) | --lang cn |
--list-devices | 列出已连接设备 | --list-devices |
--max-steps | 设置最大执行步数 | --max-steps 50 |
5.3 典型应用场景示例
社交沟通
python main.py --local --model ./autoglm-9b-4bit "打开微信给张三发消息:会议改到下午四点"电商购物
python main.py --local --model ./autoglm-9b-4bit "打开淘宝搜索蓝牙耳机按销量排序"视频娱乐
python main.py --local --model ./autoglm-9b-4bit "打开B站搜索二次元动漫推荐"音乐播放
python main.py --local --model ./autoglm-9b-4bit "打开网易云音乐搜索周杰伦的《晴天》并播放"外卖点餐
python main.py --local --model ./autoglm-9b-4bit "打开饿了么点一份宫保鸡丁盖饭"5.4 WiFi 远程连接(免数据线)
启用无线调试
- 手机与电脑处于同一局域网
- 开启“无线调试”功能(开发者选项内)
- 记录显示的 IP 地址和端口号(通常为 5555)
连接设备
# 第一次需用 USB 连接启动 TCP/IP 模式 adb tcpip 5555 # 断开 USB,使用 IP 连接 adb connect 192.168.1.100:5555 # 验证连接 adb devices执行远程任务
python main.py --local --model ./autoglm-9b-4bit \ --device-id 192.168.1.100:5555 \ "打开抖音刷新视频"6. 性能优化策略
6.1 内置性能优化机制
图像降采样
为减少视觉编码负担,系统自动将截图长边压缩至 1024px 以内:
| 原始分辨率 | 压缩后尺寸 | 像素减少比例 |
|---|---|---|
| 2400×1080 | 1024×460 | 82% |
| 1920×1080 | 1024×576 | 72% |
显著提升推理速度且不影响识别精度。
KV Cache 量化
在推理过程中启用kv_bits=8,将注意力缓存从 FP16 转为 INT8:
- 显存占用下降约 30%
- 推理延迟略有改善
显存清理
每轮推理后调用:
mx.clear_cache() # MLX 清理 gc.collect() # Python 垃圾回收防止长时间运行导致内存泄漏。
6.2 手动优化建议
- 关闭后台应用:释放更多内存资源
- 使用有线连接:避免 WiFi 传输延迟
- 降低屏幕亮度:减小截图文件体积
- 定期重启进程:若出现卡顿,终止后重新启动
6.3 性能实测参考(M1 Max, 32GB)
| 阶段 | 平均耗时 |
|---|---|
| 模型加载 | ~30 秒 |
| 截图获取 | 0.5–1 秒 |
| 单步推理 | 13–18 秒 |
| 完整任务 | 2–5 分钟 |
示例任务:“打开网易云音乐搜索《一滴泪的时间》并播放”,共 6 步,总耗时约 2 分 18 秒。
7. API 与进阶用法
7.1 Python API 调用
from phone_agent import PhoneAgent from phone_agent.model import ModelConfig from phone_agent.agent import AgentConfig # 模型配置 model_config = ModelConfig( model_name="./autoglm-9b-4bit", is_local=True, max_tokens=3000, temperature=0.1, ) # Agent 配置 agent_config = AgentConfig( max_steps=50, verbose=True, lang="cn", ) # 初始化代理 agent = PhoneAgent(model_config=model_config, agent_config=agent_config) # 执行任务 result = agent.run("打开抖音刷3个视频") print(f"任务结果: {result}")7.2 自定义回调函数
处理敏感操作或需人工介入的场景:
def on_confirmation(message: str) -> bool: print(f"[警告] 即将执行敏感操作: {message}") return input("确认继续?(y/n): ").lower() == "y" def on_takeover(message: str): print(f"[接管] 需要人工操作: {message}") input("完成后请按回车继续...") agent = PhoneAgent( confirmation_callback=on_confirmation, takeover_callback=on_takeover, )可用于支付确认、验证码登录等场景。
7.3 批量任务执行
tasks = [ "打开微信给李四发消息:今天不加班", "打开支付宝查看本月账单", "打开高德地图导航回家", ] for task in tasks: result = agent.run(task) print(f"✅ 完成任务: {task}") agent.reset() # 重置状态7.4 配置参数一览
ModelConfig 主要参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model_name | str | - | 模型路径 |
is_local | bool | False | 是否本地推理 |
max_tokens | int | 3000 | 最大输出长度 |
temperature | float | 0.1 | 生成随机性控制 |
AgentConfig 主要参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
max_steps | int | 100 | 单任务最大执行步数 |
device_id | str | None | ADB 设备标识 |
lang | str | cn | 语言设置 |
verbose | bool | True | 是否打印详细日志 |
8. 常见问题 FAQ
Q1:adb devices无设备显示
可能原因:
- 数据线仅支持充电
- 未开启 USB 调试
- 未在手机上授权电脑连接
解决方法:
adb kill-server adb start-server adb devices重启 ADB 服务常可解决问题。
Q2: 模型下载中断
使用断点续传:
huggingface-cli download --resume-download zai-org/AutoGLM-Phone-9B --local-dir ./models/AutoGLM-Phone-9B或切换国内镜像:
export HF_ENDPOINT=https://hf-mirror.comQ3: 内存不足导致崩溃
解决方案:
- 使用 4-bit 量化模型
- 关闭其他内存密集型应用
- 重启系统释放内存
Q4: 文字输入失败
检查 ADB Keyboard 是否正确安装并设为默认输入法:
adb shell ime list -a | grep ADB若未列出,请重新安装 APK 并手动启用。
Q5: 截图为黑屏
部分应用(如银行、支付类)禁止截屏,属正常系统保护机制。此时模型会自动请求人工接管。
Q6: 运行变慢或卡顿
尝试以下操作:
- 终止程序并重新启动
- 改用 USB 连接
- 降低手机屏幕分辨率(非必须)
Q7: WiFi 连接失败
确保:
- 手机与电脑在同一网络
- 已开启“无线调试”
- 防火墙未阻止 5555 端口
Q8: 中文乱码问题(Windows/Linux)
设置编码环境变量:
# Windows set PYTHONIOENCODING=utf-8 # Linux/macOS export PYTHONIOENCODING=utf-8获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。