保姆级教程:Open-AutoGLM手机Agent从0到1实战
1. 这不是“另一个AI工具”,而是能真正替你点手机的智能助理
你有没有过这样的时刻:
- 想批量给10个抖音账号点赞,却要反复解锁、滑动、点击,手指酸到想扔手机;
- 在小红书搜了3页“北京周末亲子活动”,结果全是广告,手动筛选耗时又心累;
- 客服要求截图上传验证码,可你正开会,根本腾不出手——而AI明明“看”得见屏幕,“点”得准按钮。
Open-AutoGLM 就是为解决这些真实痛点而生的。它不是在屏幕上画框、写脚本的自动化工具,而是一个能理解界面语义、自主规划操作路径、像人一样使用手机的AI Agent。你只需说一句“打开美团,搜‘附近2公里内评分4.8以上的川菜’,点开第一家店,截屏发给我”,它就能一步步完成:识别APP图标→启动美团→定位搜索框→输入文字→解析列表→点击目标→截图→返回结果。
这不是概念演示,也不是云端调用API的伪本地化方案。它是智谱开源的AutoGLM-Phone 框架,基于9B视觉语言模型,通过ADB直连真机,所有推理和决策都在你可控的私有环境中运行。本文将带你从零开始,不跳过任何一个细节,完成一次完整、可复现、能落地的实战部署——不需要你懂多模态原理,不需要你调参优化,只要你会复制粘贴、会点手机设置,就能让AI成为你的“数字手指”。
整个过程分为四个核心阶段:环境准备 → 手机调试 → 控制端部署 → 指令实测。每一步都标注了常见卡点和绕过方法,避免你花3小时卡在“adb devices 显示 unauthorized”这种问题上。
2. 环境准备:三台设备,一个都不能少
Open-AutoGLM 的运行依赖三个物理/逻辑单元协同工作:云GPU服务器(跑模型)+ 本地电脑(做中转)+ 安卓手机(被操控对象)。它们之间通过 ADB 和网络连接,缺一不可。
2.1 云GPU服务器:模型推理的“大脑”
你需要一台带显卡的远程服务器来加载并运行 AutoGLM-Phone-9B 模型。推荐使用 AutoDL(国内访问稳定、镜像预装完善),配置如下:
| 项目 | 最低要求 | 推荐选择 | 关键说明 |
|---|---|---|---|
| GPU显存 | ≥32GB | A100-40GB | 模型加载需约30GB显存,低于此值会直接报错OOM |
| 操作系统 | Ubuntu 22.04 | Ubuntu 22.04 LTS | CentOS或Debian存在ADB兼容性问题 |
| Python版本 | 3.10 | 3.10.12 | 3.12+会导致部分依赖安装失败 |
| 网络带宽 | ≥100Mbps | 公网IP + 端口映射 | 后续需将vLLM服务端口(如8800)映射到公网 |
避坑提示:不要用笔记本本地跑模型。9B多模态模型对显存和算力要求极高,消费级显卡(如RTX 4090)在无量化情况下无法流畅加载。云主机是唯一稳定选择。
2.2 本地电脑:ADB控制的“神经中枢”
这台设备负责连接手机、转发指令、运行控制脚本。它不参与模型推理,但必须能稳定与手机和云服务器通信。
- 操作系统:Windows 10/11 或 macOS Sonoma 及以上
- 必备工具:
- Android SDK Platform-Tools(含
adb命令) - USB数据线(必须支持数据传输,仅充电线无效)
- Android SDK Platform-Tools(含
- 环境变量配置(以Windows为例):
- 解压下载的 platform-tools.zip 到
C:\adb Win + R→ 输入sysdm.cpl→ 高级 → 环境变量 → 系统变量 → Path → 新建 → 填入C:\adb- 打开新命令行窗口,输入
adb version,显示版本号即成功
- 解压下载的 platform-tools.zip 到
验证方式:执行
adb version,输出类似Android Debug Bridge version 1.0.41即为就绪。
2.3 安卓手机:被操控的“执行终端”
这是整个流程最易出错的一环。务必使用真机(模拟器不支持屏幕捕获和触控注入),且满足以下条件:
- 系统版本:Android 7.0(Nougat)及以上
- 关键设置:
- 开启开发者模式(设置 → 关于手机 → 连续点击“版本号”7次)
- 开启USB调试(设置 → 开发者选项 → USB调试)
- 启用ADB Keyboard输入法(后文详述,此步不可跳过)
- 物理要求:屏幕无遮挡、未锁屏(或已关闭锁屏密码)、电量≥30%
重要提醒:部分国产手机(如华为、小米)需额外开启「USB调试(安全设置)」和「仅充电模式下允许ADB调试」,否则
adb devices会显示unauthorized。
3. 手机端深度调试:让AI真正“看见”和“触摸”屏幕
很多用户卡在这一步:adb devices能看到设备,但运行时AI始终无法操作。根本原因在于——AI需要两个能力:看懂屏幕内容 + 向屏幕输入指令。前者靠截图,后者靠输入法。
3.1 屏幕感知:确保AI能准确截图
Open-AutoGLM 通过adb shell screencap获取当前屏幕图像,再送入视觉语言模型分析。若截图模糊、黑屏或延迟高,后续所有操作都会失效。
验证截图功能:
adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png ./screen.png打开本地
screen.png,确认是清晰、完整、无色偏的当前屏幕画面。常见问题处理:
- 若截图全黑:检查手机是否处于息屏状态,需保持亮屏;
- 若截图模糊:关闭手机“省电模式”和“自适应亮度”;
- 若提示“Permission denied”:重启ADB服务
adb kill-server && adb start-server。
3.2 触控执行:ADB Keyboard 是唯一可靠输入法
AI要完成“输入搜索词”“点击按钮”等操作,本质是向系统发送坐标点击和文本输入事件。而安卓原生输入法会拦截ADB指令,导致输入失败。ADB Keyboard 是专为此场景设计的轻量级输入法,它不弹出键盘界面,只响应ADB命令。
安装步骤:
- 下载 ADBKeyboard.apk
- 传到手机并安装(设置 → 安全 → 允许“未知来源应用”)
- 设置 → 语言和输入法 → 默认输入法 → 选择ADB Keyboard
验证是否生效:
adb shell input text "HelloWorld"若手机当前输入框中出现 “HelloWorld”,说明ADB Keyboard已接管输入。
致命错误规避:如果跳过此步,AI在需要输入文字的场景(如搜索、登录)会完全静默,日志中无报错,但任务永远卡在“等待输入”状态。
3.3 远程ADB连接:摆脱USB线束缚(可选但推荐)
USB连接虽稳定,但限制手机摆放位置。WiFi ADB可实现无线控制,提升测试自由度。
启用步骤(需先用USB连接一次):
# 1. USB连接手机后,开启TCP/IP模式 adb tcpip 5555 # 2. 断开USB线,连接同一WiFi # 3. 查找手机IP(设置 → WLAN → 点击当前网络 → IP地址) # 4. 连接WiFi设备 adb connect 192.168.1.100:5555验证:
adb devices应显示192.168.1.100:5555 device稳定性提示:WiFi环境下建议关闭手机“WLAN休眠策略”,防止断连。
4. 控制端部署:三步完成本地代码配置
控制端代码运行在你的本地电脑上,它不承载模型,只负责:获取手机截图 → 发送给云服务器上的模型 → 接收模型返回的操作指令 → 调用ADB执行。因此部署极轻量。
4.1 克隆代码并安装依赖
# 1. 克隆官方仓库 git clone https://github.com/zai-org/Open-AutoGLM.git cd Open-AutoGLM # 2. 创建虚拟环境(推荐,避免依赖冲突) python -m venv autoglm_env source autoglm_env/bin/activate # macOS/Linux # autoglm_env\Scripts\activate # Windows # 3. 安装依赖(清华源加速) pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install -e .注意:
pip install -e .是关键一步,它将phone_agent模块注册为可导入包,后续Python脚本才能调用from phone_agent.adb import ADBConnection。
4.2 配置云服务地址
模型运行在云服务器上,控制端需知道其API地址。假设你在AutoDL上部署了vLLM服务,映射端口为8800,公网IP为123.56.78.90,则服务地址为:http://123.56.78.90:8800/v1
- 在
main.py同级目录创建config.py,内容如下:# config.py CLOUD_BASE_URL = "http://123.56.78.90:8800/v1" MODEL_NAME = "autoglm-phone-9b"
4.3 设备ID自动识别(告别手动填ID)
每次运行都要输--device-id很麻烦。我们改用自动发现:
# utils/device_helper.py from phone_agent.adb import list_devices def get_connected_device(): devices = list_devices() if not devices: raise RuntimeError("未检测到已连接的安卓设备") return devices[0].device_id # 返回第一个可用设备 # 在 main.py 中调用 device_id = get_connected_device() print(f"自动识别设备ID: {device_id}")这样,无论你换哪台手机或IP,代码都能自适应。
5. 第一次实测:用自然语言指挥AI完成真实任务
现在所有环节已打通。我们来执行一个经典任务:打开小红书,搜索“上海咖啡探店”,进入第一个笔记,截图保存。
5.1 运行命令(USB连接方式)
python main.py \ --device-id "ZY223456789" \ --base-url "http://123.56.78.90:8800/v1" \ --model "autoglm-phone-9b" \ "打开小红书,搜索'上海咖啡探店',点开第一条笔记,截屏保存"--device-id:通过adb devices获取,如ZY223456789或192.168.1.100:5555--base-url:云服务器vLLM服务地址- 指令字符串:必须用中文自然语言,无需格式化,支持标点和引号
5.2 实时观察AI的“思考”过程
运行后,终端将逐行打印AI的决策链:
[INFO] 正在捕获屏幕... [INFO] 已发送截图至云端模型... [INFO] 模型返回操作:[{'action': 'click', 'x': 120, 'y': 240, 'desc': '点击小红书APP图标'}] [INFO] 执行点击坐标 (120, 240) [INFO] 正在捕获屏幕... [INFO] 模型返回操作:[{'action': 'click', 'x': 320, 'y': 180, 'desc': '点击搜索框'}, {'action': 'input', 'text': '上海咖啡探店'}] [INFO] 执行点击 (320, 180) → 输入文本 "上海咖啡探店" ... [INFO] 任务完成,截图已保存为 output/screenshot_20240520_142301.png关键洞察:你看到的不是预设脚本,而是模型实时生成的、基于当前界面状态的操作序列。每一步都经过视觉理解+意图解析+动作规划三重推理。
5.3 故障排查速查表
| 现象 | 可能原因 | 快速解决 |
|---|---|---|
终端卡在[INFO] 正在捕获屏幕... | ADB连接异常或手机息屏 | 执行adb devices确认设备在线;点亮手机屏幕 |
| 模型返回空操作或乱码 | 云服务未启动或端口不通 | 在云服务器执行curl http://localhost:8800/v1/models,确认返回模型列表 |
| AI点击错位置 | 手机分辨率未适配 | 在main.py中添加--scale-factor 1.0参数强制按原始分辨率处理 |
| 输入文字失败 | ADB Keyboard未启用 | 手机设置 → 语言和输入法 → 默认输入法 → 切换为 ADB Keyboard |
6. 进阶实战:从“能用”到“好用”的三个关键技巧
部署成功只是起点。要让Open-AutoGLM真正融入工作流,还需掌握以下技巧:
6.1 指令工程:让AI更懂你的“人话”
模型对指令表述敏感。同样任务,不同说法效果差异巨大:
- ❌ 低效指令:“弄一下小红书” → 模型无法解析意图
- 高效指令:“打开小红书APP,在顶部搜索框输入‘杭州龙井茶体验’,点击搜索结果中标题含‘茶室’的第一个笔记,下滑阅读前三段,截屏”
核心原则:
- 动词明确:用“打开”“点击”“输入”“滑动”“长按”等可执行动词;
- 定位精准:优先用“顶部搜索框”“右下角分享按钮”“标题含XX的笔记”等界面语义描述,而非绝对坐标;
- 分步拆解:复杂任务拆成多个短指令串行执行,降低单次推理难度。
6.2 批量任务:用Python API驱动多轮操作
main.py适合单次测试,生产环境需用API封装。以下代码可实现“循环关注10个抖音账号”:
from phone_agent.adb import ADBConnection from phone_agent.llm import LLMClient conn = ADBConnection() conn.connect("192.168.1.100:5555") # 连接手机 llm = LLMClient( base_url="http://123.56.78.90:8800/v1", model="autoglm-phone-9b" ) accounts = ["dycwo11nt61d", "xiaohongshu_official", "tech_daily"] for account in accounts: instruction = f"打开抖音APP,搜索用户'{account}',进入主页,点击'关注'按钮" llm.run_instruction(instruction, conn) print(f"已关注 {account},等待3秒...") time.sleep(3)6.3 敏感操作人工接管:安全与可控的平衡
框架内置人工接管机制,适用于登录、支付等高风险场景:
- 当AI检测到“输入密码”“确认支付”“短信验证码”等关键词时,会暂停执行,输出提示:
[PAUSE] 检测到敏感操作:请输入短信验证码。请手动输入后按回车继续... - 你输入验证码后回车,AI继续后续流程。
- 此机制由
phone_agent/planner.py中的is_sensitive_action()函数触发,可按需扩展关键词列表。
7. 总结:你已掌握AI手机Agent的核心能力
回顾整个流程,你完成了:
在云服务器部署9B多模态模型,获得强大屏幕理解能力;
将本地电脑配置为稳定ADB中转站,打通指令通路;
对安卓手机进行深度调试,确保AI能“看见”“点击”“输入”;
用一行自然语言指令,驱动AI完成跨APP、多步骤的真实任务;
掌握指令优化、批量调用、人工接管等工程化技巧。
这不再是实验室Demo,而是可立即用于个人提效(自动整理微信收藏、批量下载小红书图文)或企业场景(APP兼容性测试、客服话术验证、竞品功能巡检)的生产力工具。
下一步,你可以:
- 尝试更复杂的指令,如“对比美团和饿了么上‘宫保鸡丁’的价格与配送费,生成表格发我”;
- 将
main.py封装为Web服务,用手机扫码即可下发指令; - 结合OCR模块,让AI不仅能点,还能“读”图片中的文字信息。
技术的价值不在参数有多炫,而在它能否安静地帮你做完一件你不想再动手的事。现在,你的AI手指已经就绪。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。