Open-AutoGLM结合Python API,开发者扩展更方便
本文介绍了如何在星图GPU平台上自动化部署Open-AutoGLM – 智谱开源的手机端AI Agent框架镜像,实现安卓设备的智能交互自动化。通过Python API,开发者可快速构建如自动打开APP、搜索内容、点击关注等典型手机端任务流,显著提升移动应用测试与RPA场景的开发效率。
Open-AutoGLM结合Python API,开发者扩展更方便
Open-AutoGLM不是又一个“能聊天”的大模型,而是一个真正会动手的AI手机智能助理。它不满足于回答问题,而是盯着你的手机屏幕,理解界面、拆解任务、点击滑动、输入搜索——就像一位随时待命的数字同事。最特别的是,它把这种能力封装成清晰的Python API,让开发者不再需要啃透整个Agent调度逻辑,就能快速接入、定制、集成。本文将带你从零开始,用最自然的方式连接真机、调用服务、编写可扩展的自动化逻辑,重点讲清楚:怎么用Python代码控制它,而不是只靠命令行跑个demo。
1. 它到底是什么?不是模型,是“能做事”的框架
1.1 AutoGLM-Phone 的本质:视觉+语言+动作的闭环
很多人第一次看到“AutoGLM”会下意识以为是另一个大语言模型。其实不然。Open-AutoGLM 是一个端到端的AI Agent框架,它的核心价值在于打通了三个关键环节:
- 看:通过视觉语言模型(VLM)实时分析手机屏幕截图,识别按钮、文字、图标、布局结构;
- 想:用大语言模型(LLM)理解你那句“打开小红书搜美食”的真实意图,并规划出“解锁→找到小红书图标→点击→等待加载→点击搜索框→输入‘美食’→点击搜索”这一连串原子操作;
- 做:通过ADB(Android Debug Bridge)向设备发送精确指令,完成点击坐标、滑动轨迹、文本输入等真实交互。
这三步环环相扣,缺一不可。而Open-AutoGLM把它们组织成一个可配置、可调试、可替换的模块化系统。你不需要自己训练VLM或LLM,但可以自由选择后端服务、修改动作执行器、甚至替换规划策略。
1.2 为什么说“Python API”是开发者真正的入口?
命令行启动(python main.py --device-id ... "打开抖音...")适合快速验证效果,但它像一个黑盒:输入指令,输出结果,中间发生了什么、哪一步卡住了、能不能加个日志、能不能在点击前先截图保存——这些都无从干预。
而Python API则把整个流程“摊开”给你:
ADBConnection类让你像操作一个对象一样管理设备连接、启停TCP/IP、获取IP;PhoneAgent类暴露了plan()、execute_step()、get_screenshot()等方法,你可以逐层调用,也可以跳过自动规划,直接执行你设计好的动作;- 所有核心类都支持继承和重写,比如你想为金融类APP增加“验证码人工确认弹窗”的拦截逻辑,只需重写
execute_step()中的特定分支。
这才是工程落地的关键:可控、可测、可嵌入现有系统。
2. 环境准备:不求一步到位,但求每步可验证
2.1 本地开发机:轻量起步,拒绝环境焦虑
你不需要一台带A100的服务器,一台日常办公的笔记本就足够。
- Python版本:3.10及以上(推荐3.11或3.12)。安装时务必勾选“Add Python to PATH”,这是后续所有命令能被识别的基础。
- 验证方式:打开终端,输入
python --version,看到类似Python 3.12.7即可。 - 为什么不用conda? Open-AutoGLM依赖中包含部分C扩展(如
adb-shell),在conda环境中偶发编译失败。用原生pip更稳定。
2.2 ADB:不是工具,是你的“机械臂驱动”
ADB是连接电脑与安卓设备的唯一通道。它的配置质量,直接决定你后续90%的问题是否出现。
-
Windows用户:
- 下载官方platform-tools;
- 解压到一个无中文、无空格的路径,例如
C:\adb; - 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”中找到
Path,点击“编辑”→“新建”,填入C:\adb; - 重启终端,输入
adb version,看到版本号即成功。
-
macOS用户: 在终端中运行:
# 假设你把platform-tools解压到了 ~/Downloads/platform-tools echo 'export PATH=$PATH:~/Downloads/platform-tools' >> ~/.zshrc source ~/.zshrc adb version
关键验证点:不要跳过
adb devices这一步。它必须返回类似0123456789ABCDEF device的结果。如果显示unauthorized,请检查手机是否弹出了“允许USB调试”的授权弹窗;如果显示offline,请重启ADB服务:adb kill-server && adb start-server。
2.3 手机/模拟器:真机优先,模拟器备选
- 真机推荐:Android 10+,开启开发者模式(设置→关于手机→版本号连点7次)→开发者选项→开启USB调试→安全设置中关闭“仅充电时允许ADB调试”(部分品牌如小米、华为需额外开启)。
- 模拟器备选:Android Studio自带的AVD。创建时选择API Level 30+(Android 11),并确保在“Emulated Performance”中启用“Hardware - GLES 2.0”。启动后,同样需开启USB调试(在模拟器内设置中操作)。
重要提醒:无论真机还是模拟器,必须安装ADB Keyboard。这是实现文本输入的唯一可靠方式。下载APK后,拖入模拟器窗口或用
adb install adb-keyboard.apk安装,然后在手机“设置→系统→语言与输入法→虚拟键盘”中,将默认输入法切换为“ADB Keyboard”。
3. 控制端部署:从克隆到可编程
3.1 获取代码与依赖:两行命令,干净利落
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM
pip install -r requirements.txt
pip install -e .
pip install -r requirements.txt安装所有第三方库(requests,Pillow,adb-shell,openai等);pip install -e .是关键:它以“可编辑模式”安装本项目,意味着你修改phone_agent/下的任何Python文件,都不需要重新安装,下次运行立即生效。这对调试和二次开发至关重要。
3.2 设备连接:USB是起点,WiFi是常态
USB直连(首次必做)
adb devices
# 输出应为:List of devices attached
# 0123456789ABCDEF device
WiFi远程(日常主力)
- 先用USB线连接,执行:
adb tcpip 5555 - 拔掉USB线,确保手机与电脑在同一WiFi下;
- 查找手机IP(设置→关于手机→状态→IP地址),假设为
192.168.1.100,执行:adb connect 192.168.1.100:5555 - 验证:
adb devices # 输出应为:192.168.1.100:5555 device
为什么推荐WiFi? USB线缆易松动,ADB连接会频繁中断;而WiFi连接稳定,且支持多设备同时管理。一次配置,长期受益。
4. Python API实战:告别命令行,拥抱可编程
4.1 连接管理:用代码代替手动adb connect
命令行里敲 adb connect 192.168.1.100:5555 很简单,但如果你要写一个Web服务,让用户自己填IP来控制设备呢?这时,你需要的是可编程的连接管理。
from phone_agent.adb import ADBConnection, list_devices
# 创建全局连接管理器
conn = ADBConnection()
# 尝试连接指定设备
success, message = conn.connect("192.168.1.100:5555")
print(f"连接状态: {message}") # 成功时输出 "Connected to 192.168.1.100:5555"
# 列出所有已连接设备(包括USB和WiFi)
devices = list_devices()
for device in devices:
print(f"{device.device_id} - {device.connection_type.value}")
# 输出示例:192.168.1.100:5555 - wifi | 0123456789ABCDEF - usb
# 断开连接
conn.disconnect("192.168.1.100:5555")
这段代码的价值在于:它把ADB的底层命令封装成了面向对象的接口。你可以把它集成进Flask/FastAPI路由中,前端传一个IP,后端就自动连接,无需用户懂ADB。
4.2 截图与感知:让AI“看见”屏幕
所有智能操作的前提,是AI能准确理解当前界面。PhoneAgent 提供了直接获取屏幕截图的方法:
from phone_agent.agent import PhoneAgent
from phone_agent.adb import ADBConnection
conn = ADBConnection()
conn.connect("192.168.1.100:5555")
# 初始化Agent,指定后端服务地址(这里用智谱BigModel)
agent = PhoneAgent(
base_url="https://open.bigmodel.cn/api/paas/v4",
model="autoglm-phone-9b",
api_key="your_api_key_here"
)
# 获取当前屏幕截图(返回PIL.Image对象)
screenshot = agent.get_screenshot()
screenshot.save("current_screen.png") # 保存用于调试
print(f"截图尺寸: {screenshot.size}") # 例如 (1080, 2400)
get_screenshot()返回的是标准的PIL.Image对象,你可以用OpenCV处理、用matplotlib显示、或者直接传给其他视觉模型;- 这个方法是同步阻塞的,调用后会立刻返回最新画面,非常适合做状态监控或异常检测。
4.3 规划与执行:拆解“打开抖音搜博主”这句指令
命令行里一句 "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!" 看似简单,背后是复杂的多步推理。Python API让你能看到每一步:
# 让Agent分析指令,生成执行计划
plan = agent.plan("打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!")
print("生成的执行步骤:")
for i, step in enumerate(plan.steps, 1):
print(f"{i}. {step.action} -> {step.description}")
# 示例输出:
# 1. LAUNCH_APP -> 启动抖音应用
# 2. CLICK -> 点击底部导航栏“搜索”图标
# 3. INPUT_TEXT -> 在搜索框中输入“dycwo11nt61d”
# 4. CLICK -> 点击搜索结果中第一个用户头像
# 5. CLICK -> 点击“关注”按钮
plan() 方法返回一个结构化的Plan对象,其中每个Step都包含:
action: 标准动作类型(CLICK,INPUT_TEXT,SWIPE,LAUNCH_APP等);description: 人类可读的描述,便于日志记录和调试;target: 可选,指向UI元素的坐标或文本标识。
有了这个计划,你就可以选择全量执行,也可以只执行其中某几步:
# 只执行第3步:输入文本
result = agent.execute_step(plan.steps[2])
print(f"输入结果: {result.success}, 错误信息: {result.error}")
# 或者执行全部
full_result = agent.run(plan)
print(f"全流程完成: {full_result.success}")
4.4 定制化扩展:三分钟添加一个“敏感操作确认”钩子
官方框架已内置敏感操作确认(如支付、删除),但它的触发逻辑是固定的。如果你想为自己的业务加一个规则——比如“当操作涉及‘银行’、‘转账’、‘密码’等关键词时,强制暂停并通知管理员”,只需重写PhoneAgent的一个方法:
from phone_agent.agent import PhoneAgent
class MySecureAgent(PhoneAgent):
SENSITIVE_WORDS = ["银行", "转账", "密码", "支付", "提现"]
def plan(self, instruction: str):
# 先检查指令是否含敏感词
if any(word in instruction for word in self.SENSITIVE_WORDS):
raise RuntimeError(f"检测到敏感指令: '{instruction}',需人工审核")
return super().plan(instruction)
# 使用自定义Agent
my_agent = MySecureAgent(
base_url="https://open.bigmodel.cn/api/paas/v4",
model="autoglm-phone-9b",
api_key="your_api_key"
)
try:
my_agent.run("给我查一下招商银行的余额")
except RuntimeError as e:
print(f"拦截成功: {e}") # 输出:拦截成功: 检测到敏感指令: '给我查一下招商银行的余额',需人工审核
这就是Python API带来的最大自由度:你不是使用者,而是架构师。所有逻辑都在你掌控之中。
5. 常见问题与工程化建议:让自动化真正稳定运行
5.1 连接不稳定?别怪网络,先看ADB权限
- 现象:
adb devices时而显示device,时而显示unauthorized或offline。 - 根因:手机端的ADB授权弹窗被忽略,或USB调试开关被系统自动关闭(尤其在息屏后)。
- 方案:
- 真机:在“开发者选项”中,找到“USB调试(安全设置)”,关闭“仅充电时允许ADB调试”;
- 模拟器:在AVD设置中,勾选“Enable ADB authentication”并重启;
- 统一命令:每次运行前加一句
adb kill-server && adb start-server && adb connect <ip>,确保连接干净。
5.2 模型“瞎操作”?不是AI不行,是截图没传对
- 现象:Agent反复点击空白区域,或找不到“搜索”按钮。
- 根因:
get_screenshot()获取的图片分辨率与手机实际屏幕不一致,导致坐标映射错误。 - 方案:
- 在
main.py或你的脚本开头,强制设置ADB截图参数:import os os.environ["ADB_SCREENSHOT_QUALITY"] = "100" # 最高画质 os.environ["ADB_SCREENSHOT_SCALE"] = "1.0" # 1:1原始比例 - 或者,在调用
get_screenshot()后,打印其尺寸并与手机规格核对(如Pixel 6是1080x2400)。
- 在
5.3 如何让自动化“长周期”运行?加超时与重试
官方run()方法默认最多执行100步,但没有时间限制。一个卡死的页面可能让它无限等待。
import time
from phone_agent.agent import PhoneAgent
class RobustAgent(PhoneAgent):
def run(self, plan, timeout_seconds=120, max_retries=3):
start_time = time.time()
for attempt in range(max_retries):
try:
result = super().run(plan)
if result.success:
return result
except Exception as e:
print(f"第{attempt+1}次尝试失败: {e}")
if time.time() - start_time > timeout_seconds:
raise TimeoutError(f"任务超时 {timeout_seconds} 秒")
time.sleep(2) # 重试前等待2秒
raise RuntimeError("所有重试均失败")
这个RobustAgent类,把超时、重试、日志全部封装好,一行robust_agent.run(plan)就能获得企业级稳定性。
6. 总结:API不是接口,是你的新工作台
Open-AutoGLM的Python API,远不止是一组函数调用。它是一套完整的手机自动化开发工作台:
- 连接层(
ADBConnection)让你摆脱命令行,用面向对象方式管理设备集群; - 感知层(
get_screenshot())为你提供标准图像接口,无缝对接CV生态; - 决策层(
plan())输出结构化步骤,让AI的“思考过程”变得可审计、可干预; - 执行层(
execute_step())支持原子操作,让你能精准控制每一个点击、每一次滑动; - 扩展层(继承
PhoneAgent)开放所有核心逻辑,定制化成本低至几行代码。
这意味着,你不必再纠结“怎么让AI帮我点外卖”,而是可以思考:“如何把这个能力嵌入我们的电商客服系统,让客户说‘帮我看看订单123456的物流’,系统就自动打开淘宝APP,截图物流页,OCR提取信息,再语音播报给客户?”——这才是Open-AutoGLM真正释放的生产力。
技术的价值,不在于它多炫酷,而在于它能否被开发者轻松握在手中,变成解决真实问题的工具。现在,工具已经放在你面前,接下来,该你动手了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)