Open-AutoGLM从零开始:Python API连接远程设备完整指南
Open-AutoGLM 是智谱开源的手机端 AI Agent 框架,它把大模型能力真正带到了指尖——不是在云端跑个 demo,而是让 AI 真正“看见”你的手机屏幕、“理解”当前界面、“动手”完成操作。它不依赖预设脚本,也不靠固定规则匹配,而是用视觉语言模型做感知,用智能规划做决策,再通过 ADB 实现精准执行。一句话说:你动嘴,它动手。
AutoGLM-Phone 是这个框架的核心落地形态。它能以多模态方式理解屏幕内容,并通过 ADB 自动操控设备。用户只需用自然语言下指令,比如“打开小红书搜美食”,模型就能解析意图、识别当前 App 界面、判断按钮位置、模拟点击、输入文字、滑动页面,一气呵成。而 Phone Agent 则是基于 AutoGLM 构建的完整手机端智能助理系统,不仅支持本地 USB 控制,更关键的是——它原生支持远程 ADB 调试能力。你可以把手机放在客厅,电脑放在书房,甚至服务器部署在云上,全程通过 WiFi 或公网连接控制真机。它还内置了敏感操作确认机制,在登录、支付、验证码等关键环节会暂停并提示人工接管,兼顾自动化与安全性。
下面我们就从零开始,手把手带你完成整个链路:本地电脑配置 → 手机端设置 → 控制端部署 → Python API 远程连接 → 实际指令调用。全程不绕弯、不跳步,每一步都可验证、可复现。
1. 环境准备:让电脑“认得”你的手机
要让本地电脑能指挥安卓设备,第一步不是写代码,而是打通底层通信通道。这依赖 ADB(Android Debug Bridge)——它是 Android 官方提供的调试桥接工具,也是 Open-AutoGLM 控制真机的唯一通路。
1.1 硬件与基础环境要求
- 操作系统:Windows 10/11 或 macOS Monterey 及以上(Linux 同理,本文以 Win/macOS 为主)
- Python 版本:建议使用 Python 3.10+(避免因 asyncio 或 typing 模块差异导致兼容问题)
- 安卓设备:Android 7.0(Nougat)及以上版本的真机或模拟器(推荐真机,模拟器对屏幕截图和触控模拟支持有限)
- ADB 工具:必须独立安装,不能只靠 Android Studio 带的版本(因其路径常被隐藏且不易加入环境变量)
为什么强调独立安装 ADB?
Open-AutoGLM 的ADBConnection类会主动调用adb devices、adb shell screencap、adb shell input tap等命令。如果 ADB 不在系统 PATH 中,程序会在运行时直接报错:“adb: command not found”,而不是给你友好的提示。提前配好,省去 80% 的排查时间。
1.2 Windows 下 ADB 环境变量配置(实测有效)
别点开各种“一键配置工具”,手动配最稳:
- 去 Android SDK Platform-Tools 官网 下载最新 ZIP 包(如
platform-tools-latest-windows.zip) - 解压到一个固定路径,例如:
C:\adb - 按
Win + R输入sysdm.cpl→ “高级”选项卡 → “环境变量” - 在“系统变量”中找到
Path→ “编辑” → “新建” → 粘贴C:\adb - 打开新终端(重要!旧终端不会自动加载新变量),输入:
若输出类似adb versionAndroid Debug Bridge version 34.0.5,说明成功。
1.3 macOS 下 ADB 配置(Terminal 一行搞定)
同样下载 platform-tools,解压后假设路径为~/Downloads/platform-tools:
# 临时生效(当前 Terminal 有效) export PATH="$PATH:~/Downloads/platform-tools" # 永久生效(写入 shell 配置) echo 'export PATH="$PATH:~/Downloads/platform-tools"' >> ~/.zshrc source ~/.zshrc验证方式同上:adb version。注意 macOS 默认 shell 是 zsh,不是 bash,别写错配置文件。
2. 手机端设置:打开“控制权限”的三把钥匙
电脑有了 ADB,手机还得“点头同意”。这不是信任问题,是 Android 系统级的安全设计。三步缺一不可:
2.1 开启开发者模式
路径因品牌略有差异,但逻辑统一:
设置 → 关于手机 → 连续点击“版本号”7 次
直到弹出提示:“您现在处于开发者模式”。
小技巧:部分国产机型(如小米、华为)需先开启“MIUI 优化”或“系统更新”里的“开发者选项开关”,再点版本号才生效。
2.2 启用 USB 调试
回到设置首页 →开发者选项 → 找到“USB 调试”并开启
首次开启时,手机会弹窗询问“允许 USB 调试吗?”,勾选“始终允许”,再点确定。
注意:如果后续用 WiFi 连接,这一步仍是必需的——因为
adb tcpip命令必须通过 USB 首次握手才能启用 TCP/IP 模式。
2.3 安装并启用 ADB Keyboard(解决输入难题)
Open-AutoGLM 要帮你在搜索框里打字,但默认输入法无法被 ADB 直接控制。解决方案是换一个“听命令”的输入法:
- 下载 ADB Keyboard APK(推荐 v1.3+)
- 用 USB 连接手机,通过
adb install adbkeyboard.apk安装(或手动安装) - 进入手机设置 → 语言与输入法 → 当前输入法 → 选择 ADB Keyboard
- 返回设置 →开发者选项 → 默认输入法 → 选择 ADB Keyboard
验证是否生效:断开 USB,在 Terminal 输入
adb shell am broadcast -a ADB_INPUT_TEXT --es msg "hello"
如果手机当前焦点输入框出现 “hello”,说明 ADB Keyboard 已就绪。
3. 部署控制端:把 Open-AutoGLM 装进你的电脑
现在软硬件通道已通,下一步是把控制大脑——Open-AutoGLM 的客户端代码——部署到本地。
3.1 克隆仓库与安装依赖
打开终端(Windows 推荐 PowerShell,macOS 用 Terminal),执行:
# 1. 克隆官方仓库(非 fork,确保获取最新稳定版) git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM # 2. 创建虚拟环境(强烈推荐,避免包冲突) python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate # Windows # 3. 安装核心依赖 pip install -r requirements.txt pip install -e .
pip install -e .的作用是“开发模式安装”,它把当前目录作为可导入的 Python 包。这样你修改phone_agent/下的代码,main.py就能立刻生效,无需反复重装。
3.2 理解项目结构(关键文件速览)
不必全读源码,先盯住三个核心模块:
main.py:命令行入口,封装了从截图→推理→动作生成→执行的全流程phone_agent/adb.py:所有 ADB 操作的封装,包括connect()、screenshot()、tap()、text()等方法phone_agent/agent.py:AI Agent 核心逻辑,负责调用远端模型 API、解析返回的 JSON 动作指令、做安全校验
你后续写自己的自动化脚本,90% 的工作都在adb.py和agent.py的组合调用上。
4. 设备连接实战:USB 与 WiFi 两种方式全掌握
Open-AutoGLM 支持两种连接模式:USB(稳定可靠,适合调试)和 WiFi(灵活自由,适合远程)。我们分别实操。
4.1 USB 连接:即插即用,5 秒验证
- 用原装数据线连接手机与电脑
- 手机弹窗确认“允许 USB 调试”,勾选“始终允许”
- 终端执行:
输出应类似:adb devices
出现List of devices attached 1234567890abcdef devicedevice状态,说明连接成功。1234567890abcdef就是你的--device-id。
4.2 WiFi 远程连接:摆脱线缆,实现真·远程控制
这是 Open-AutoGLM 的亮点能力。分三步走:
步骤 1:USB 首次握手,启用 TCP/IP 模式
adb tcpip 5555手机会显示“正在重新启动 adbd 以进行 TCP/IP 连接”,几秒后提示成功。
步骤 2:断开 USB,用 WiFi 连接
先查手机 IP(设置 → WLAN → 点击当前网络 → 查看 IP 地址,通常是192.168.x.x)
然后执行:
adb connect 192.168.1.100:5555若输出connected to 192.168.1.100:5555,即成功。
步骤 3:验证远程连通性
adb -s 192.168.1.100:5555 devices adb -s 192.168.1.100:5555 shell getprop ro.build.version.release后者应返回安卓版本号(如13),证明远程 shell 可用。
提示:WiFi 连接不稳定?试试关闭手机“智能 WiFi 切换”或“WLAN+”功能,这些特性会让手机在后台自动断开 ADB 所需的长连接。
5. Python API 远程连接:用代码接管手机
命令行main.py是快速验证,但工程化必须用 API。Open-AutoGLM 提供了清晰、面向对象的 Python 接口,核心就是ADBConnection类。
5.1 基础连接与设备管理
以下代码可在任意 Python 脚本中运行(无需在 Open-AutoGLM 根目录):
from phone_agent.adb import ADBConnection, list_devices # 1. 创建连接管理器实例 conn = ADBConnection() # 2. 连接远程设备(支持 IP:port 或 device_id) success, message = conn.connect("192.168.1.100:5555") print(f"连接状态: {message}") # 成功时输出 "Connected successfully" # 3. 列出所有已连接设备(USB/WiFi) devices = list_devices() for device in devices: print(f"{device.device_id} - {device.connection_type.value}") # 输出示例:192.168.1.100:5555 - wifi # 4. (可选)为 USB 设备启用 TCP/IP(方便后续切 WiFi) # success, message = conn.enable_tcpip(5555) # ip = conn.get_device_ip() # 自动获取设备 IP # print(f"设备 IP: {ip}") # 5. 断开连接 conn.disconnect("192.168.1.100:5555")这段代码的价值在于:它把 ADB 的底层命令(
adb connect、adb devices)封装成了直白的 Python 方法,你不再需要拼接字符串、解析 stdout,所有错误都以(False, "error msg")元组返回,便于异常处理。
5.2 屏幕截图与动作执行(真实可用的最小闭环)
光连上没用,得让 AI “看见”并“动手”。下面这段代码,完成了 Open-AutoGLM 最核心的两步:
from phone_agent.adb import ADBConnection import time conn = ADBConnection() conn.connect("192.168.1.100:5555") # 1. 截图并保存到本地(用于后续模型分析) screenshot_path = "screen.png" success, msg = conn.screenshot(screenshot_path) if not success: print(f"截图失败: {msg}") else: print(f"截图已保存至 {screenshot_path}") # 2. 模拟一次点击(x=500, y=1200,单位像素) success, msg = conn.tap(500, 1200) print(f"点击结果: {msg}") # 3. 输入文字(需确保 ADB Keyboard 已启用) success, msg = conn.text("Hello from Open-AutoGLM!") print(f"输入结果: {msg}") time.sleep(1) # 等待 UI 响应 conn.disconnect("192.168.1.100:5555")关键点:
conn.screenshot()返回的是本地路径,这意味着你可以把它直接喂给自己的 VLM 模型;conn.tap()和conn.text()是原子操作,调用即执行,没有中间状态。这就是“远程控制”的本质——把手机当成本地外设来用。
6. 启动 AI 代理:让大模型真正“动手”
连接只是铺路,真正的智能在云端模型。Open-AutoGLM 的设计哲学是:控制端轻量化,AI 端专业化。你本地只管传图、收指令、执行动作;所有“理解屏幕”、“规划步骤”、“生成动作”的重活,都交给部署在服务器上的autoglm-phone-9b模型。
6.1 命令行快速启动(适合调试)
在 Open-AutoGLM 根目录下执行:
python main.py \ --device-id 192.168.1.100:5555 \ --base-url http://123.56.78.90:8800/v1 \ --model "autoglm-phone-9b" \ "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!"参数说明:
--device-id:你的设备标识(USB ID 或 WiFi IP:port)--base-url:指向你部署的 vLLM 服务地址(需提前映射端口,如 8800)--model:模型名称,必须与 vLLM 启动时注册的名称一致- 最后字符串:自然语言指令,支持中文,越具体成功率越高
实际效果:程序会自动截图 → 发送图片+文字到云端 → 接收 JSON 格式动作序列(如
[{"action": "click", "x": 120, "y": 340}, {"action": "text", "content": "dycwo11nt61d"}])→ 逐条执行 → 最终完成关注。
6.2 Python 脚本集成(生产推荐)
把上面的流程封装成函数,便于嵌入业务系统:
from phone_agent.agent import PhoneAgent from phone_agent.adb import ADBConnection # 初始化连接与 Agent conn = ADBConnection() conn.connect("192.168.1.100:5555") agent = PhoneAgent( base_url="http://123.56.78.90:8800/v1", model_name="autoglm-phone-9b", device_connection=conn ) # 执行任务(自动完成截图→推理→执行全链路) result = agent.run("打开小红书,搜索'北京烤鸭',进入第一个笔记,点赞并收藏") print(f"任务状态: {result.status}") print(f"执行步骤: {len(result.actions)} 步") print(f"耗时: {result.duration:.2f} 秒") conn.disconnect("192.168.1.100:5555")
PhoneAgent.run()是最高层封装,它内部已处理:
- 多次截图(防动态界面)
- 错误重试(网络抖动、模型超时)
- 敏感动作拦截(如
adb shell input keyevent 26关机指令会被拒绝)- 人工接管钩子(遇到验证码时抛出
HumanInterventionRequired异常)
7. 常见问题排查:少走弯路的实战经验
即使按步骤操作,也常卡在几个经典坑位。以下是真实踩坑总结:
7.1 “Connection refused” —— 云服务器端口没放行
现象:--base-url指向云服务器,但main.py报错ConnectionRefusedError
原因:云服务器防火墙(如阿里云安全组、腾讯云网络 ACL)未开放8800端口
解决:登录云控制台 → 找到对应 ECS 实例 → 编辑安全组规则 → 添加入方向规则:端口8800,协议TCP,授权对象0.0.0.0/0(或限制为你的办公 IP)
7.2 “Device offline” —— WiFi 连接掉线
现象:adb devices显示offline,或conn.connect()返回失败
原因:手机 WiFi 省电策略自动断开闲置连接
解决:
- 手机设置 → WLAN → 高级 → 关闭“WLAN 休眠策略”
- 或在终端定期保活:
while true; do adb connect 192.168.1.100:5555; sleep 30; done
7.3 模型返回乱码 / 无动作 —— vLLM 启动参数不匹配
现象:main.py日志显示收到响应,但actions字段为空或格式错误
原因:autoglm-phone-9b对max-model-len和gpu-memory-utilization敏感。若显存不足或上下文截断过短,模型无法生成完整 JSON
解决:启动 vLLM 时务必指定:
python -m vllm.entrypoints.api_server \ --model zai-org/autoglm-phone-9b \ --tensor-parallel-size 1 \ --max-model-len 8192 \ --gpu-memory-utilization 0.95 \ --port 8800
max-model-len 8192是硬性要求,低于此值会导致 JSON 截断;gpu-memory-utilization 0.95确保显存足够加载视觉编码器。
8. 总结:你已掌握手机 AI Agent 的完整控制权
到这里,你已经走完了 Open-AutoGLM 从零到落地的全部关键路径:
- 本地电脑装好了 ADB,能稳定识别手机;
- 手机开启了开发者模式、USB 调试、ADB Keyboard,获得了“被操控”的能力;
- 控制端代码部署完毕,
ADBConnection让远程连接像调用函数一样简单; - 你亲手写了截图、点击、输入的闭环代码,理解了底层交互逻辑;
- 你用
PhoneAgent成功驱动云端大模型,把一句“打开抖音搜博主”变成了真实操作; - 你还掌握了最常见的三个故障点及解法,不再是“报错就懵”。
Open-AutoGLM 的价值,从来不只是“又一个手机自动化工具”。它把大模型从“对话盒子”升级为“数字双手”——你能用它批量测试 App UI、自动生成短视频脚本并执行发布、为视障用户实时描述屏幕、甚至构建无人值守的电商运营机器人。而这一切的起点,就是今天你亲手敲下的这几行adb connect和conn.tap()。
下一步,不妨试试:
把PhoneAgent.run()封装成 Web API,用 Flask 暴露一个/do-task接口;
结合schedule库,每天上午 9 点自动打开企业微信打卡;
用cv2对截图做 OCR 预处理,把模糊文字转成清晰文本再送模型。
技术的边界,永远由动手的人定义。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。