从命令行到API:Open-AutoGLM两种调用方式实操
你有没有想过,手机能听懂你说话,还能自己点开App、输入关键词、滑动屏幕、完成任务?不是科幻电影,是今天就能跑起来的现实——Open-AutoGLM,一个真正能“看”手机屏幕、“想”操作路径、“动”手指执行的AI手机智能体。它不依赖预设脚本,不靠固定坐标点击,而是用视觉语言模型理解界面、用推理能力规划动作、用ADB精准操控真机。
更关键的是,它不只停留在演示视频里。你可以在本地电脑上,用一条命令让它帮你刷抖音、比价下单、发微信消息;也可以写几行Python代码,把它嵌入自己的自动化流程中。本文不讲原理、不堆参数,只聚焦一件事:怎么真正用起来。我们将完整走通两种最常用、最实用的调用路径——命令行快速验证,和Python API工程集成,并全程基于真实设备环境,避开文档里没说清的坑。
1. 环境准备:让电脑和手机“握手成功”
再强的AI,也得先连上手机。这一步看似简单,却是90%失败案例的起点。我们跳过“理论上可行”的描述,直击实操要点。
1.1 你的设备必须满足这三点
- 电脑系统:Windows 10/11 或 macOS Sonoma 及以上(Linux同理,但本文以Win/macOS为主)
- Python版本:严格建议使用Python 3.10.12(不是3.11或3.12)。vLLM对Python版本敏感,3.11+在部分系统会报
ModuleNotFoundError: No module named 'vllm._C' - 安卓手机:Android 8.0以上(Android 7勉强可用,但部分新机型权限策略会导致ADB拒绝连接),且必须是真实手机——模拟器无法获取真实屏幕图像,视觉理解直接失效
1.2 ADB配置:别被“环境变量”吓住
ADB不是软件,是工具链。配置核心就两件事:让电脑认出ADB命令,让手机信任电脑。
Windows用户:
- 下载官方platform-tools,解压到
C:\adb Win + R→ 输入sysdm.cpl→ 高级 → 环境变量 → 在“系统变量”里找到Path→ 编辑 → 新建 → 粘贴C:\adb- 重启命令行窗口(重要!旧窗口不读新环境变量),输入
adb version,看到类似Android Debug Bridge version 1.0.41即成功
- 下载官方platform-tools,解压到
macOS用户:
- 解压后进入Terminal,执行:
echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc source ~/.zshrc - 输入
adb version验证
- 解压后进入Terminal,执行:
常见卡点:
adb devices返回空或unauthorized。这不是ADB问题,是手机没授权。请检查:① 开发者模式已开启(设置→关于手机→版本号连点7次);② USB调试已打开(设置→开发者选项→USB调试);③ 手机弹出“允许USB调试吗?”对话框,务必勾选“始终允许”,再点确定。若无弹窗,尝试换USB线或USB口——很多线只充电不传数据。
1.3 手机端关键设置:不止是“打开USB调试”
Open-AutoGLM要“看”屏幕、“点”图标、“输”文字,三步缺一不可:
- 屏幕捕获:依赖ADB
screencap命令,无需额外设置 - 点击与滑动:依赖ADB
input tap/input swipe,无需额外设置 - 文字输入:这是最容易被忽略的环节。安卓原生输入法不支持ADB指令输入,必须安装ADB Keyboard:
- 从GitHub Release页下载最新版APK(如
ADBKeyboard_v1.0_all.deb.apk) - 用USB线传输到手机,安装
- 进入手机“设置→系统管理→语言与输入法→虚拟键盘”,将默认输入法切换为“ADB Keyboard”
- 返回桌面,长按任意输入框,确认弹出软键盘——此时才算真正就绪
- 从GitHub Release页下载最新版APK(如
2. 控制端部署:三分钟跑通本地代码
环境配好,下一步是把控制大脑装到你电脑上。Open-AutoGLM的控制端是纯Python项目,没有编译,只有依赖。
2.1 克隆与安装:别跳过-e参数
git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM pip install -r requirements.txt pip install -e .注意最后的-e(editable mode)。它让Python把当前目录当作已安装包,后续修改代码(如调试日志)无需重复安装。跳过它,你会遇到ModuleNotFoundError: No module named 'phone_agent'。
2.2 连接设备:USB是底线,WiFi是进阶
USB直连(推荐新手):
adb devices # 正常输出示例: # List of devices attached # 1234567890abcdef device设备ID
1234567890abcdef就是你的--device-id值。WiFi无线连接(适合远程调试):
- 先用USB线连接,执行
adb tcpip 5555 - 拔掉USB线,确保手机和电脑在同一WiFi下
- 查看手机IP:手机设置→关于手机→状态信息→IP地址(通常是
192.168.x.x) - 电脑执行:
adb connect 192.168.x.x:5555 - 再次
adb devices,应显示192.168.x.x:5555 device
- 先用USB线连接,执行
提示:WiFi连接不稳定是常态。如果
adb shell卡住或断连,立刻切回USB——这不是模型问题,是网络问题。
3. 命令行调用:一句话启动,任务自动完成
这是最快验证效果的方式。你不需要写代码,只要一条命令,AI就开始工作。
3.1 基础命令结构:记住这四个必填项
python main.py \ --device-id <设备ID或IP:端口> \ --base-url <模型服务地址> \ --model "autoglm-phone-9b" \ "你的自然语言指令"--device-id:来自adb devices的输出,如1234567890abcdef或192.168.1.100:5555--base-url:模型服务的API入口。新手强烈推荐用智谱BigModel在线服务,省去本地部署麻烦:- 地址:
https://open.bigmodel.cn/api/paas/v4 - 模型名:
autoglm-phone - 需配合
--apikey(去智谱AI官网申请免费API Key)
- 地址:
--model:指定模型名称,线上服务填autoglm-phone,本地vLLM服务填autoglm-phone-9b- 最后的字符串:你的指令,用英文双引号包裹,必须是完整、明确的中文句子
3.2 实战案例:从“打开抖音”到“关注博主”
我们用一个真实场景贯穿全流程:
python main.py \ --device-id 1234567890abcdef \ --base-url https://open.bigmodel.cn/api/paas/v4 \ --apikey your_actual_api_key_here \ --model "autoglm-phone" \ "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!"执行后,你会看到终端实时打印AI的思考过程:
[INFO] 截取当前屏幕... [INFO] 将屏幕图像发送至模型... [INFO] 模型返回:{"action": "LAUNCH_APP", "app_name": "抖音"} [INFO] 执行:启动抖音应用... [INFO] 截取屏幕...检测到搜索框... [INFO] 模型返回:{"action": "INPUT_TEXT", "text": "dycwo11nt61d"} [INFO] 执行:输入文本... [INFO] 模型返回:{"action": "TAP", "x": 520, "y": 180} [INFO] 执行:点击搜索结果... [INFO] 模型返回:{"action": "TAP", "x": 890, "y": 210} [INFO] 执行:点击关注按钮... [INFO] 任务完成!整个过程约20-40秒,取决于网络和手机性能。关键观察点:
- AI是否准确识别了抖音图标?(看第一屏截图)
- 搜索框定位是否正确?(看坐标x/y是否落在输入框内)
- 关注按钮是否点中?(看最终界面是否有“已关注”字样)
如果某一步失败,比如点错了位置,大概率是屏幕分辨率适配问题。此时加参数--scale-factor 1.0强制重置缩放(默认会根据设备DPI自动计算,但部分国产ROM有偏差)。
3.3 命令行进阶技巧:不只是“执行一次”
交互模式:去掉最后的指令字符串,进入循环模式:
python main.py --device-id 1234567890abcdef --base-url ... --apikey ... # 终端出现 > 符号,可连续输入多条指令,如: # > 打开小红书搜咖啡 # > 切换到微信给张三发截图查看支持应用:避免指令超纲,先查白名单:
python main.py --list-apps # 输出:微信、抖音、淘宝、美团、小红书、京东、支付宝、Chrome...启用详细日志:排查问题必备:
python main.py --verbose --device-id ... "指令" # 显示每张截图的Base64编码、模型原始JSON响应、ADB执行命令
4. Python API调用:把AI变成你程序里的一个函数
命令行适合验证,但工程落地需要API。Open-AutoGLM提供了简洁的Python接口,让你像调用普通函数一样驱动手机。
4.1 核心四行:初始化、配置、运行、收果
from phone_agent import PhoneAgent from phone_agent.model import ModelConfig # 1. 配置模型服务 model_config = ModelConfig( base_url="https://open.bigmodel.cn/api/paas/v4", model_name="autoglm-phone", api_key="your_actual_api_key_here" ) # 2. 创建Agent实例(绑定设备) agent = PhoneAgent( model_config=model_config, device_id="1234567890abcdef" # 或 "192.168.1.100:5555" ) # 3. 执行任务(同步阻塞,等待完成) result = agent.run("打开淘宝搜索无线耳机") # 4. 获取结果 print("任务状态:", result.status) # success / failed print("执行步骤数:", len(result.steps)) print("最终截图路径:", result.final_screenshot)这段代码的核心价值在于:它把复杂的多模态推理、ADB通信、异常重试全部封装了。你只需关心输入(指令)和输出(结果对象)。
4.2 结果对象详解:不只是“成功/失败”
result不是布尔值,而是一个结构化对象,包含所有关键信息:
| 属性 | 类型 | 说明 |
|---|---|---|
status | str | "success"或"failed" |
steps | list | 每步操作的字典列表,含action,description,screenshot_path |
final_screenshot | str | 最终界面截图保存路径(如./screenshots/final_20241205_142233.png) |
error_message | str | 失败时的详细错误(如"未找到'关注'按钮") |
total_time | float | 从开始到结束的总耗时(秒) |
这意味着你可以轻松实现:
- 自动化测试报告:统计100次任务的成功率、平均耗时、常见失败点
- 截图存档:每次任务生成带时间戳的截图,用于审计或复盘
- 失败自动重试:
if result.status == "failed": agent.run("重新执行相同指令")
4.3 自定义回调:接管敏感操作,安全第一
Open-AutoGLM内置了安全机制,当检测到支付、登录、验证码等高风险操作时,会暂停并等待人工确认。你可以通过回调函数接管这个过程:
def on_sensitive_action(action_info): """当AI准备执行敏感操作时触发""" print(f" 检测到敏感操作:{action_info['action']}") print(f" 描述:{action_info['description']}") print(f" 当前截图:{action_info['screenshot_path']}") # 这里可以弹窗、发邮件、或直接返回True允许执行 user_input = input("是否允许执行?(y/n): ") return user_input.lower() == "y" # 创建Agent时注册回调 agent = PhoneAgent( model_config=model_config, device_id="1234567890abcdef", on_sensitive_action=on_sensitive_action # 注册函数 ) result = agent.run("登录微信") # 程序会在登录页暂停,等待你输入y/n这个设计让Open-AutoGLM既能全自动运行,又能在关键时刻交还控制权,完美平衡效率与安全。
5. 故障排除:那些文档没写的“真实世界”问题
部署顺利是理想,出错才是常态。以下是我们在真实设备上踩过的坑及解法:
5.1 “Connection refused” —— 不是模型挂了,是端口没通
现象:requests.exceptions.ConnectionError: HTTPConnectionPool(host='...', port=8000): Max retries exceeded with url: /v1/chat/completions
原因:90%是云服务器防火墙未开放端口。即使你telnet ip 8000不通,也不代表模型没跑——可能只是防火墙拦截。
解决:
- 阿里云/腾讯云:进入安全组,添加入方向规则,协议类型
TCP,端口范围8000/8000 - 本地vLLM:确认启动命令中
--host 0.0.0.0(不是127.0.0.1),否则只监听本地
5.2 “No response from model” —— 模型在“思考”,你在“干等”
现象:终端卡在[INFO] 将屏幕图像发送至模型...,1分钟后报超时。
原因:vLLM显存不足或max-model-len设置过小,导致大图(如1080p截图)被截断,模型无法解析。
解决:
- 启动vLLM时,必须显式增大
--max-model-len:python3 -m vllm.entrypoints.openai.api_server \ --max-model-len 32768 \ # 原25480不够,至少32K --model zai-org/AutoGLM-Phone-9B \ --port 8000 - 检查GPU显存:
nvidia-smi,9B模型需≥16GB显存(A10/A100)
5.3 “Click not working” —— 点错了?其实是坐标系偏移
现象:AI说“点击坐标(520,180)”,但实际点到了状态栏。
原因:部分安卓ROM(尤其华为、小米)启用了“全面屏手势”,隐藏了底部导航栏,导致ADB坐标系与屏幕像素不一致。
解决:强制关闭手势,改用传统三键导航:
- 华为:设置→系统和更新→系统导航→“屏幕内三键导航”
- 小米:设置→桌面→系统导航方式→“经典导航键”
重启手机后重试,坐标精度立即提升。
6. 总结:你已经掌握了AI手机助理的钥匙
我们从零开始,完成了Open-AutoGLM的完整实操闭环:
- 环境层:明确了Windows/macOS、Python 3.10、真实安卓机、ADB Keyboard这四大硬性条件;
- 连接层:用
adb devices和adb connect打通了电脑与手机的数据通道; - 命令行层:用一条
python main.py ...命令,让AI自动完成“打开App→搜索→点击→关注”的全链路; - API层:用四行Python代码,将AI封装成可编程、可监控、可回调的工程组件;
- 排障层:直面了防火墙、显存、坐标偏移等真实部署障碍,并给出可立即执行的解法。
Open-AutoGLM的价值,不在于它多炫酷,而在于它把“手机自动化”这件事,从需要写死坐标的脚本时代,推进到了用自然语言指挥的智能体时代。你现在拥有的,不是一段代码,而是一个能理解你意图、能看见你屏幕、能替你动手的数字分身。
下一步,你可以:
- 把它接入你的RPA流程,让客服机器人自动查订单;
- 用它批量测试App新版本,覆盖50+主流应用;
- 甚至开发一个“老人模式”:语音说“帮我给儿子发微信”,AI自动完成。
技术的终点,永远是让人更自由。而自由的第一步,就是亲手敲下那条命令。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。