Python API怎么用?Open-AutoGLM远程连接示例
你有没有想过,不用手动点屏幕,只说一句“打开小红书搜西安美食”,手机就自动完成打开App、输入关键词、点击搜索、滚动浏览的全过程?这不是科幻电影,而是 Open-AutoGLM 正在做的事——它把你的安卓手机变成一个能听懂人话、看得清界面、下得了手的AI智能助理。
Open-AutoGLM 是智谱开源的手机端 AI Agent 框架,核心模型 autoglm-phone-9b 专为多模态手机操作设计。它不依赖 Root,不修改系统,只靠 ADB + 视觉语言模型 + 自动化规划,就能让普通安卓机获得接近“豆包手机”的体验。而真正让它灵活落地的关键,不是命令行那几行启动指令,而是背后可编程、可集成、可嵌入业务系统的 Python API。
本文不讲概念、不堆参数,只聚焦一件事:如何用 Python 代码,稳定、可控、可复用地远程连接并驱动 Open-AutoGLM 手机代理。你会看到从零配置设备到调用 API 发送指令的完整链路,所有代码均可直接运行,所有步骤都经过真机实测验证。
1. 理解 Open-AutoGLM 的通信架构
在动手写代码前,先理清它怎么工作。Open-AutoGLM 不是单体应用,而是一个清晰分层的远程协作系统:
- 手机端:负责截图、执行点击/滑动/输入等操作,通过 ADB 与电脑通信
- 服务端(云端或本地):运行 autoglm-phone-9b 模型,接收截图和指令,输出操作序列
- 控制端(你的 Python 脚本):作为“大脑指挥官”,协调两端——它向服务端发自然语言指令,再把服务端返回的操作指令,翻译成 ADB 命令发给手机
关键点在于:Python API 不是直接调用大模型,而是作为控制端与服务端通信的桥梁,并封装了 ADB 设备管理逻辑。这意味着你可以把它嵌入自动化测试平台、客服工单系统,甚至做成企业内部的“手机操作中台”。
所以,当你看到from phone_agent.adb import ADBConnection,这不是在调用模型,而是在初始化一个“手机遥控器”。真正的 AI 推理发生在--base-url指向的服务端。
2. 环境准备:三步打通本地与手机的通道
API 再好,设备连不上就是空谈。这里不重复文档里的碎片步骤,而是按真实调试顺序,给出最简、最稳的配置路径。
2.1 ADB 必须能识别设备(USB 或 WiFi)
无论后续用哪种方式连接,第一步永远是让adb devices能稳定列出你的设备:
# 在终端执行,确保输出类似: # List of devices attached # 1234567890ABCDEF device adb devices- USB 连接:开启开发者模式 + USB 调试后,用原装数据线直连。如果显示
unauthorized,请在手机弹窗点“允许”;如果显示offline,重启 ADB 服务:adb kill-server && adb start-server - WiFi 连接(推荐用于长期运行):
# 1. 先用 USB 连接,启用 TCP/IP 模式 adb tcpip 5555 # 2. 拔掉 USB,连接同一 WiFi 后获取手机 IP(设置 → 关于手机 → 状态信息里找) # 3. 连接 WiFi 设备(替换为你的手机 IP) adb connect 192.168.1.100:5555
验证成功标志:
adb shell getprop ro.build.version.release能返回 Android 版本号(如14),说明 ADB 通道已通。
2.2 安装 ADB Keyboard(解决输入问题)
Open-AutoGLM 需要向 App 输入文字(比如搜索关键词),但默认输入法无法被 ADB 控制。ADB Keyboard 就是为此而生:
- 下载 APK:https://github.com/senzhk/ADBKeyBoard/releases
- 安装后进入手机「设置 → 语言与输入法 → 当前输入法」,切换为ADB Keyboard
- 验证:在终端执行
adb shell input text "hello",手机屏幕应出现 “hello”
注意:部分 Android 13+ 设备需额外授权。若无反应,在「设置 → 应用 → ADB Keyboard → 权限」中开启“显示在其他应用上层”和“无障碍服务”。
2.3 克隆并安装 Open-AutoGLM 控制端
这一步不是部署模型,而是安装 Python SDK:
git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM pip install -r requirements.txt pip install -e .安装完成后,你就能在任意 Python 脚本中导入phone_agent模块了。它提供的不是黑盒接口,而是清晰可读的类结构,比如ADBConnection管理设备,PhoneAgentClient封装服务端通信。
3. Python API 实战:从连接设备到执行指令
现在进入核心——用 Python 代码替代命令行,实现完全可控的远程操作。我们分四步走:连接设备 → 初始化代理客户端 → 发送指令 → 解析结果。
3.1 连接并管理设备(ADBConnection)
这是所有操作的前提。ADBConnection类帮你屏蔽了底层adb命令的复杂性:
from phone_agent.adb import ADBConnection, list_devices # 创建连接管理器实例 conn = ADBConnection() # 方式一:连接 WiFi 设备(推荐用于远程场景) success, message = conn.connect("192.168.1.100:5555") print(f"WiFi 连接状态: {message}") # 成功时输出 "Connected to 192.168.1.100:5555" # 方式二:连接 USB 设备(自动识别第一个 device) usb_success, usb_msg = conn.connect() print(f"USB 连接状态: {usb_msg}") # 列出当前所有已连接设备(含类型:usb / wifi) devices = list_devices() for device in devices: print(f"设备ID: {device.device_id} | 连接类型: {device.connection_type.value}")这段代码做了三件事:
- 主动建立与手机的 ADB 连接(支持 IP 或自动发现)
- 返回结构化结果,让你知道连接是否成功、失败原因是什么
- 提供
list_devices()这样的工具函数,方便你在多设备环境中精准选择目标
小技巧:
conn.disconnect()可随时断开连接;conn.get_device_ip()能自动获取 WiFi 设备 IP,避免硬编码。
3.2 初始化代理客户端(PhoneAgentClient)
设备连上了,下一步是告诉 AI “你要干什么”。PhoneAgentClient就是那个把自然语言指令发给服务端、并等待操作序列返回的“传声筒”:
from phone_agent.client import PhoneAgentClient # 初始化客户端(指向你的服务端) client = PhoneAgentClient( base_url="http://192.168.1.200:8800/v1", # 替换为你的云服务器IP和端口 model="autoglm-phone-9b", timeout=300 # 设置超时,防止长任务卡死 ) # 发送指令(字符串即自然语言) instruction = "打开高德地图,搜索最近的火锅店" response = client.run(instruction) print(f"任务ID: {response.task_id}") print(f"状态: {response.status}") print(f"耗时: {response.elapsed_time:.1f} 秒")client.run()返回的是一个PhoneAgentResponse对象,包含:
task_id:唯一任务标识,可用于日志追踪status:success/failed/timeoutelapsed_time:端到端耗时(从发送指令到收到最终操作序列)steps:详细的操作步骤列表(稍后详解)
关键参数说明:
base_url必须带/v1后缀,这是 Open-AutoGLM 服务端的标准 API 路径model参数必须与服务端加载的模型名严格一致(如autoglm-phone-9b)timeout强烈建议设置,因为视觉理解+规划可能耗时较长(尤其首次加载)
3.3 解析并执行操作序列(steps)
服务端返回的不是最终结果,而是一系列可执行的原子操作。这才是 Open-AutoGLM 的“智能”所在——它把“搜火锅店”这个高层意图,拆解为机器能懂的底层动作:
# 继续上面的 response if response.status == "success": print("\n--- 操作步骤分解 ---") for i, step in enumerate(response.steps, 1): print(f"{i}. {step.action}: {step.parameters}") # 示例输出: # 1. Launch: {'package': 'com.autonavi.minimap'} # 2. Wait: {'duration': 3} # 3. Tap: {'x': 520, 'y': 120} # 4. Type: {'text': '火锅店'} # 5. Tap: {'x': 980, 'y': 180}每个step是一个字典,包含:
action:操作类型(Launch,Tap,Type,Swipe,Back等)parameters:执行所需参数(坐标、文本、包名等)
你完全可以基于这些步骤做二次开发:
- 记录每一步耗时,分析性能瓶颈
- 对
Tap步骤加坐标偏移校准(适配不同分辨率) - 遇到
Take_over步骤时,自动暂停并通知人工介入(如验证码)
3.4 完整可运行示例:一键执行全流程
把以上三步组合,就是一个生产就绪的脚本:
#!/usr/bin/env python3 # 文件名: auto_phone_task.py import time from phone_agent.adb import ADBConnection from phone_agent.client import PhoneAgentClient def main(): # Step 1: 连接设备 conn = ADBConnection() success, msg = conn.connect("192.168.1.100:5555") # 使用 WiFi if not success: print(f"设备连接失败: {msg}") return # Step 2: 初始化客户端 client = PhoneAgentClient( base_url="http://192.168.1.200:8800/v1", model="autoglm-phone-9b", timeout=300 ) # Step 3: 发送指令 instruction = "打开小红书,搜索‘北京秋天拍照圣地’,保存前三条笔记封面图" print(f"正在执行: {instruction}") try: response = client.run(instruction) print(f"\n 任务完成!耗时 {response.elapsed_time:.1f} 秒") print(f"共生成 {len(response.steps)} 个操作步骤") # Step 4: 打印关键步骤摘要 for step in response.steps[:3]: # 只看前3步 print(f" → {step.action} {step.parameters}") except Exception as e: print(f"❌ 执行异常: {e}") if __name__ == "__main__": main()运行它,你会看到:
- 设备连接状态实时反馈
- 指令发送后等待响应(期间手机屏幕会自动操作)
- 最终输出步骤数和首几步动作,便于快速验证逻辑
这个脚本的价值在于:它把原本需要记忆命令行参数、手动复制粘贴的流程,变成了一个可版本管理、可单元测试、可集成进 CI/CD 的 Python 模块。
4. 远程调试的三大避坑指南
在真实环境中,90% 的失败不是模型问题,而是环境配置细节。以下是高频问题的根因和解法:
4.1 “Connection refused” 错误
现象:Python 报错ConnectionRefusedError: [Errno 111] Connection refused
根因:base_url指向的服务端未运行,或防火墙拦截了端口
解法:
- 在服务端机器执行
curl http://localhost:8800/v1/health,确认服务存活 - 检查云服务器安全组,放行
8800端口(TCP 协议) - 若用内网穿透(如 frp),确认穿透配置正确,且
base_url使用穿透后的域名
4.2 “Device not found” 或 ADB 操作无响应
现象:list_devices()返回空列表,或Tap指令手机无反应
根因:ADB 连接不稳定,或 ADB Keyboard 未生效
解法:
- 执行
adb devices后,立刻运行adb shell getprop ro.product.model,确认能读取设备型号 - 若 WiFi 连接偶尔掉线,添加重连逻辑:
for _ in range(3): success, msg = conn.connect("192.168.1.100:5555") if success: break time.sleep(2)
4.3 指令执行卡在“Wait”或“Take_over”
现象:任务长时间无进展,response.steps中出现大量Wait,或最后一步是Take_over
根因:服务端视觉模型未能识别当前界面元素(如按钮文字模糊、广告遮挡)
解法:
- 在
client.run()中增加max_retries=2参数,让客户端自动重试 - 对关键步骤(如搜索框)添加显式等待:在
Tap前插入Wait步骤,确保页面加载完成 - 遇到
Take_over时,主动捕获并提示人工:“请手动输入验证码,完成后按回车继续”
5. 进阶用法:让 API 更贴合你的业务场景
基础 API 已足够强大,但若想深度集成,还需掌握这些扩展能力:
5.1 自定义操作回调(hook)
你可以在每一步操作执行前后插入自定义逻辑,比如截图存档、性能打点:
def on_step_start(step): print(f"[HOOK] 即将执行: {step.action}") def on_step_end(step, result): if result == "success": print(f"[HOOK] {step.action} 完成") else: print(f"[HOOK] ❌ {step.action} 失败: {result}") # 初始化客户端时注册回调 client = PhoneAgentClient( base_url="http://192.168.1.200:8800/v1", model="autoglm-phone-9b", on_step_start=on_step_start, on_step_end=on_step_end )5.2 批量任务调度
用一个脚本驱动多台手机并行执行不同任务:
from concurrent.futures import ThreadPoolExecutor tasks = [ ("192.168.1.101:5555", "打开美团搜咖啡"), ("192.168.1.102:5555", "打开抖音关注科技博主"), ("192.168.1.103:5555", "打开小红书搜穿搭"), ] def run_task(device_info): device_id, instruction = device_info conn = ADBConnection() conn.connect(device_id) client = PhoneAgentClient(base_url="http://192.168.1.200:8800/v1", model="autoglm-phone-9b") return client.run(instruction) # 并行执行 with ThreadPoolExecutor(max_workers=3) as executor: results = list(executor.map(run_task, tasks))5.3 与企业系统对接(伪代码示意)
# 从企业微信 webhook 接收用户指令 def handle_wechat_message(msg): user_id = msg["sender"] instruction = msg["text"] # 调用 Open-AutoGLM 执行 client = PhoneAgentClient(...) response = client.run(instruction) # 将结果推送回用户 send_to_wechat(user_id, f"已完成:{instruction},耗时{response.elapsed_time}s")6. 总结:API 是通往自动化手机的真正钥匙
回到最初的问题:Python API 怎么用?答案很朴素——它不是炫技的玩具,而是把“手机自动化”这件事,从命令行的一次性操作,变成可编程、可维护、可扩展的工程能力。
你学会了:
- 如何用
ADBConnection稳定管理设备连接,告别adb devices的不确定性 - 如何用
PhoneAgentClient封装服务端通信,让自然语言指令变成结构化响应 - 如何解析
steps操作序列,把 AI 的“思考过程”变成可审计、可干预的执行流 - 如何绕过三大典型坑,让脚本在真实网络和设备环境下可靠运行
- 如何用回调、并发、系统集成,把 API 融入你的业务毛细血管
Open-AutoGLM 的价值,不在于它多像豆包手机,而在于它把曾经属于大厂的“系统级自动化”能力,以开源、开放、可编程的方式,交到了每一个开发者手中。而 Python API,正是你握住这把钥匙的第一步。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。