从零开始部署Open-AutoGLM:Python环境配置到首次调用
1. 这不是普通AI,是能“看见”并“操作”手机的智能助理
你有没有想过,让AI真正理解你手机屏幕上正在发生什么?不是截图发给它看,而是它自己“睁眼”看、自己“动手”点——打开App、输入文字、滑动页面、点击按钮,全程无需你碰一下屏幕。
Open-AutoGLM 就是这样一套框架。它由智谱开源,专为手机端设计,核心定位不是“回答问题”,而是“执行任务”。它不依赖预设脚本,也不靠固定UI路径,而是用视觉语言模型实时理解当前界面状态,再结合大模型的推理能力,把一句“打开小红书搜美食”拆解成:识别小红书图标 → 点击启动 → 等待首页加载 → 定位搜索框 → 输入“美食” → 点击搜索 → 滚动浏览结果。整个过程像一个熟练的真人操作员,但比人更快、更不知疲倦。
更关键的是,它不是纯本地运行的轻量模型——它把“思考”交给云端高性能推理服务(比如vLLM托管的autoglm-phone-9b),把“感知”和“执行”留在手机侧,通过ADB精准控制。这种云边协同架构,既保证了决策的智能深度,又规避了手机端算力瓶颈。你不需要换新机,只要一部Android 7.0+的设备,就能拥有一个随时待命的AI手机管家。
2. 先搞懂它怎么工作:三块拼图缺一不可
Phone Agent 的能力不是凭空而来,而是由三个关键模块紧密咬合实现的:
2.1 视觉感知层:让AI“看见”屏幕
它不是靠OCR识别文字,也不是靠坐标硬编码找按钮。而是把手机当前截屏(screen capture)作为图像输入,送入多模态视觉语言模型(VLM)。这个模型能同时理解画面中的布局结构、文字内容、图标语义、甚至按钮状态(比如“已关注”变灰、“未关注”高亮)。它输出的不是一堆坐标,而是一段结构化描述:“顶部有搜索栏,中间是3个横向滚动卡片,右下角悬浮着红色‘+’号按钮”。
2.2 智能规划层:把一句话变成可执行动作链
当你输入“打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!”,模型首先要解析意图:这是个复合任务,包含启动App、执行搜索、定位用户、触发关注四个子目标。接着,它会结合当前屏幕状态(比如是否已在抖音首页?是否已登录?是否有网络?),动态生成一条动作序列:tap(坐标X1,Y1)→wait(2s)→input("dycwo11nt61d")→tap(搜索按钮坐标)→scroll_to_text("dycwo11nt61d")→tap(关注按钮坐标)。每一步都带条件判断和容错机制。
2.3 自动执行层:用ADB做最可靠的“手指”
所有动作最终都转化为ADB命令下发。ADB(Android Debug Bridge)是安卓官方调试工具,权限极高、稳定性极强。Open-AutoGLM 通过它完成:
- 截图获取屏幕状态(
adb shell screencap -p) - 模拟触摸(
adb shell input tap X Y) - 输入文字(
adb shell input text "xxx") - 滑动操作(
adb shell input swipe X1 Y1 X2 Y2) - 启动应用(
adb shell am start -n package/activity)
这套组合拳,让它既能处理常规操作,也能在登录页、验证码弹窗等敏感场景主动暂停,等待你人工确认——安全与自动化,第一次真正做到了兼顾。
3. 本地电脑准备:装好“指挥官”的办公桌
服务端(AI大脑)我们先假设已部署在云服务器上,现在要把本地电脑变成“指挥中心”。这不是装几个软件就行,而是要打通从代码、环境到物理设备的全链路。
3.1 硬件与基础环境清单
| 项目 | 要求 | 为什么重要 |
|---|---|---|
| 操作系统 | Windows 10/11 或 macOS Monterey+ | ADB官方支持最稳定,Linux同理但非本文重点 |
| Python版本 | 3.10 或 3.11(强烈推荐3.10.12) | Open-AutoGLM依赖的pydantic<2.0与新版Python兼容性存在已知问题,3.10是目前最稳妥选择 |
| 安卓设备 | Android 7.0+ 真机(模拟器仅限开发测试) | 需要完整ADB调试权限,部分模拟器对input tap支持不完善 |
| ADB工具包 | Platform-tools 最新版(含adb、fastboot) | 所有设备通信的基础,版本太旧会导致adb connect失败 |
3.2 ADB环境变量配置:让系统“认识”你的调试工具
这一步看似简单,却是后续所有命令能跑起来的前提。很多人卡在这里,反复执行adb devices却提示“command not found”。
Windows用户请这样做:
- 去Android开发者官网下载
platform-tools-latest-windows.zip,解压到一个固定路径,比如C:\platform-tools。 Win + R输入sysdm.cpl→ “高级”选项卡 → “环境变量” → 在“系统变量”中找到Path→ “编辑” → “新建” → 粘贴你解压的完整路径C:\platform-tools。- 重启命令行窗口(非常重要!新环境变量不会自动加载到已打开的终端),然后输入:
adb version如果看到类似Android Debug Bridge version 1.0.41的输出,说明成功。
macOS用户请这样做:
- 下载
platform-tools-latest-darwin.zip,解压到~/Downloads/platform-tools(路径可自定义)。 - 打开终端,输入以下命令(注意:
~代表你的用户主目录):
echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc source ~/.zshrc- 验证:
adb version同样看到版本号即为成功。
关键提醒:不要跳过“重启终端”或“source配置文件”这步。很多用户配置完环境变量却仍报错,90%是因为没刷新终端会话。
4. 手机端设置:给AI配一把“万能钥匙”
电脑是指挥室,手机就是前线士兵。要让士兵听从指挥,必须先给它配发“通行密钥”——也就是开启调试权限和专用输入法。
4.1 开启开发者选项与USB调试
这是安卓系统的“后门开关”,不同品牌路径略有差异,但核心逻辑一致:
- 通用路径:
设置→关于手机→ 连续点击版本号(或MIUI版本、EMUI版本等)7次 → 弹出“您现在是开发者!”提示。 - 开启调试:返回上一级,进入
开发者选项→ 找到USB调试→开启开关。 - 授权提示:首次连接电脑时,手机会弹出“允许USB调试吗?”对话框,务必勾选
始终允许并点确定。这个授权会记住你的电脑,下次连接不再弹窗。
4.2 安装ADB Keyboard:解决“无法输入文字”的终极方案
这是最容易被忽略、却最影响体验的一环。安卓原生输入法在ADB模式下,常因权限限制无法接收adb shell input text指令,导致AI能点、能滑、就是输不了字。
正确做法:
- 去GitHub搜索
ADBKeyBoard,下载最新版APK(如ADBKeyBoard_v1.5.apk)。 - 在手机上安装该APK(需开启
设置→安全→未知来源应用安装)。 - 安装完成后,进入
设置→语言与输入法→ 找到ADB Keyboard→启用它→ 再将其设为默认键盘。
完成这一步,你的AI才能真正“打字”,而不是对着搜索框干瞪眼。
5. 部署控制端:克隆、安装、验证三步到位
现在,指挥室和前线都准备好了,该部署“指挥官”软件本身了。
5.1 获取代码与安装依赖
打开你的终端(Windows用CMD/PowerShell,macOS用Terminal),依次执行:
# 1. 克隆官方仓库(别用fork,确保获取最新主干) git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM # 2. 创建并激活虚拟环境(强烈推荐,避免污染全局Python) python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate # Windows # 3. 安装核心依赖(注意顺序:先requirements,再本地包) pip install --upgrade pip pip install -r requirements.txt pip install -e .为什么用
pip install -e .?
这个命令以“开发模式”安装当前包,意味着你修改phone_agent/下的任何Python文件,都不需要重新install,直接生效。对调试和二次开发极其友好。
5.2 验证安装是否成功
在同一个终端里,运行一个最小检查命令:
python -c "from phone_agent.adb import ADBConnection; print(' ADB模块导入成功'); conn = ADBConnection(); print(' ADB连接管理器创建成功')"如果看到两行 输出,说明Python环境和核心模块已就绪。如果报错ModuleNotFoundError,请回到上一步,确认pip install -e .是否执行成功且虚拟环境已激活。
6. 连接你的手机:USB直连 or WiFi远程?
Open-AutoGLM支持两种连接方式,各有优劣。新手建议从USB开始,稳定可靠;进阶用户可尝试WiFi,摆脱线缆束缚。
6.1 USB连接:最稳的第一步
确保手机已开启USB调试,并用数据线连接电脑。在终端执行:
adb devices正常输出应类似:
List of devices attached 8A9X123456789ABC device其中8A9X123456789ABC就是你的设备ID(device-id),后面启动命令会用到。如果显示unauthorized,请检查手机是否点了“允许USB调试”;如果为空,检查数据线是否为“传输文件”模式(非仅充电)。
6.2 WiFi远程连接:无线自由的进阶玩法
前提:手机和电脑在同一局域网(比如连同一个WiFi)。分三步走:
首次用USB建立信任:
adb tcpip 5555此命令将手机ADB服务切换到TCP/IP模式,监听5555端口。
断开USB线,用WiFi连接:
在手机设置里查看IP地址(通常在设置→关于手机→状态信息或WLAN→已连接网络→详情),然后执行:adb connect 192.168.1.100:5555(把
192.168.1.100替换成你手机的真实IP)验证连接:
adb devices应显示
192.168.1.100:5555 device。
WiFi连接常见坑:
- 手机IP变化:路由器DHCP分配的IP可能变动,建议在路由器后台为手机MAC地址绑定固定IP。
- 防火墙拦截:部分公司/学校网络会屏蔽5555端口,此时请切回USB模式。
7. 首次调用:让AI为你打开抖音、搜索并关注
万事俱备,现在下达第一条自然语言指令。记住,这不是测试API,而是启动一个真实任务。
7.1 命令行一键启动(推荐新手)
在Open-AutoGLM项目根目录下,执行:
python main.py \ --device-id 8A9X123456789ABC \ --base-url http://192.168.3.10:8800/v1 \ --model "autoglm-phone-9b" \ "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!"参数详解:
--device-id:从adb devices获取的ID,USB连接用ID,WiFi连接用IP:端口(如192.168.1.100:5555)--base-url:指向你云服务器上vLLM服务的地址。格式必须是http://IP:PORT/v1,末尾/v1不能省略--model:指定模型名称,必须与vLLM启动时注册的名称完全一致- 最后引号内的字符串:你的自然语言指令,越具体越好(包含App名、搜索词、操作动词)
执行后,你会看到终端滚动输出日志:
[INFO] Capturing screen...→ AI正在截图[INFO] Sending image to VLM...→ 图像已上传分析[INFO] Planning action: tap(520, 1240)→ 动作规划中[INFO] Executing: adb shell input tap 520 1240→ 正在执行点击
几秒后,你的手机屏幕会自动亮起、启动抖音、输入ID、点击搜索、找到博主、完成关注——整个过程一气呵成。
7.2 Python API调用:嵌入你自己的脚本
如果你希望把Phone Agent集成到自己的自动化流程中,可以使用其提供的Python SDK:
from phone_agent.adb import ADBConnection, list_devices from phone_agent.agent import PhoneAgent # 1. 初始化ADB连接管理器 conn = ADBConnection() # 2. 连接设备(支持USB ID或WiFi IP) success, msg = conn.connect("8A9X123456789ABC") print(f"连接结果: {msg}") # 3. 初始化AI代理(指向你的云服务) agent = PhoneAgent( base_url="http://192.168.3.10:8800/v1", model_name="autoglm-phone-9b" ) # 4. 下达指令(同步阻塞,等待任务完成) result = agent.run("打开微信,给张三发消息:今天会议改到下午三点了") print(f"任务结果: {result.status} | {result.message}")这段代码展示了如何将AI代理封装为一个可复用的对象,方便你在爬虫、测试脚本、RPA流程中调用。
8. 排查常见问题:遇到报错别慌,先看这三处
部署过程中,90%的问题都集中在以下三个环节。按顺序排查,能快速定位:
8.1 设备连接类问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
adb devices无输出或显示offline | USB线仅充电、驱动未安装、手机未授权 | 换线、重装驱动(小米/华为官网有专用ADB驱动)、重新授权 |
adb connect IP:5555显示failed to connect | 手机未开启adb tcpip、IP错误、网络不通 | 用USB执行adb tcpip 5555后再试;用ping IP确认连通性 |
adb shell input text无反应 | ADB Keyboard未启用或未设为默认 | 进入手机设置→语言与输入法,确认ADB Keyboard已启用并设为默认 |
8.2 服务通信类问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
Connection refused错误 | 云服务器防火墙未开放端口、vLLM服务未启动、URL写错 | 检查服务器ufw status或iptables;curl http://localhost:8800/v1/models测试本地访问;确认URL末尾有/v1 |
Model not found错误 | --model参数与vLLM注册名不一致、模型未加载成功 | 登录服务器,执行curl http://localhost:8800/v1/models,核对返回的model_name字段 |
8.3 模型行为类问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| AI一直重复点击同一位置,不推进任务 | 屏幕截图失败(黑屏)、VLM理解错误、动作规划逻辑缺陷 | 检查adb shell screencap能否正常截图;观察日志中[DEBUG] Screen captured后的图片尺寸是否为0;尝试简化指令(如先只做“打开抖音”) |
| 执行到验证码/登录页直接卡住 | 敏感操作确认机制生效,等待人工接管 | 查看手机屏幕,如有弹窗提示“请手动操作”,说明安全机制正常工作;完成操作后,AI会自动继续 |
9. 总结:你刚刚部署的,是一个能自主行动的AI伙伴
回顾整个过程,我们没有写一行复杂的调度逻辑,没有配置晦涩的模型参数,甚至没碰过CUDA或显存优化。仅仅通过:
配置好ADB这个“通用遥控器”
给手机装上“看得见”的眼睛(ADB Keyboard + 截图权限)
把本地电脑变成“指挥中枢”(克隆代码、安装依赖)
用一句自然语言下达指令
就让一个AI,真正具备了在真实手机环境中“感知-思考-行动”的闭环能力。这不再是实验室里的Demo,而是可立即用于自动化测试、无障碍辅助、数字员工培训的生产力工具。
下一步,你可以尝试:
- 把指令换成“截取当前屏幕,识别图中二维码并打开链接”
- 用
--log-level DEBUG参数查看更详细的决策日志 - 修改
phone_agent/planner/下的策略文件,定制自己的任务分解规则
技术的价值,从来不在炫技,而在于让复杂变得简单,让不可能成为日常。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。