开发者必看:Open-AutoGLM API接入Python项目实战
本文介绍了如何在星图GPU平台上自动化部署智谱开源的手机端AI Agent框架Open-AutoGLM,并实现其API接入Python项目的实战方法。通过该平台,开发者可以快速搭建环境,利用该框架的核心能力——让AI智能体“看懂”手机屏幕并自动执行操作,轻松实现例如“自动打开社交App进行搜索、点赞、收藏”等自动化任务,显著提升开发与测试效率。
开发者必看:Open-AutoGLM API接入Python项目实战
想象一下,你正在开发一个自动化测试脚本,需要模拟用户在手机上的复杂操作流程。或者,你有一个创意,想做一个能自动帮你刷短视频、管理社交账号的智能助手。传统的方法是什么?写一堆基于坐标的点击、滑动代码,界面一变,脚本就全废了。
现在,情况变了。你只需要告诉AI:“打开小红书,搜索‘周末露营攻略’,把点赞最高的视频收藏一下。” 剩下的,AI会自己看屏幕、理解界面、规划步骤、执行操作。这听起来像科幻电影,但今天,通过智谱开源的 Open-AutoGLM 框架,我们就能在Python项目里实现它。
Open-AutoGLM,特别是其核心应用 AutoGLM-Phone,是一个专为手机端设计的AI智能体框架。它的核心能力是“看懂”和“操作”:通过视觉语言模型理解手机屏幕上的内容(图标、文字、布局),然后通过ADB(Android调试桥)自动执行点击、输入、滑动等操作。整个过程,你只需要用最自然的语言下达指令。
本文将带你从零开始,完成Open-AutoGLM API的接入,并编写一个完整的Python控制端,让你亲手体验让AI接管手机的魔力。我们会涵盖环境搭建、设备连接、核心API调用以及一个实战项目。
1. 项目核心:理解Open-AutoGLM Phone Agent
在写代码之前,我们先搞清楚我们要用的工具到底是什么。这能帮你更好地理解后续的每一步操作。
1.1 它是什么?能做什么?
简单说,Phone Agent是一个基于大模型的“手机遥控器”。但它不是简单的录屏回放,而是一个有“眼睛”和“大脑”的智能体。
- 眼睛(多模态理解):它能“看到”你的手机屏幕截图,并理解上面的所有元素。比如,它能识别出哪个是“微信”图标,哪个是“搜索框”,哪段文字是“登录按钮”。
- 大脑(意图解析与规划):它能听懂你的自然语言指令。当你说“给我妈妈微信转账100元”,它会分解成:打开微信 -> 进入聊天框 -> 点击加号 -> 点击转账 -> 输入金额 -> 点击确认。
- 手(自动化执行):通过ADB,它能把大脑规划出的步骤,转化成真实的屏幕点击、文字输入和滑动操作,在真机或模拟器上执行。
一个典型的工作流如下:
- 你:下达指令
“打开抖音,搜索搞笑视频并点赞第一个。” - Phone Agent:
- 解析:理解你要打开“抖音”App,进行“搜索”,关键词是“搞笑视频”,然后对结果进行“点赞”。
- 感知:通过ADB获取当前手机屏幕截图。
- 规划:判断当前屏幕。如果在桌面,就点击抖音图标;如果在抖音内,就找到搜索框点击,输入文字...
- 执行:通过ADB发送一系列点击、输入命令,完成整个流程。
1.2 技术架构速览
对于开发者,了解其架构有助于调试:
- 服务端:运行着强大的视觉语言模型(如
autoglm-phone-9b)。它接收屏幕截图和用户指令,输出下一步的操作规划(如tap(500, 800)点击坐标)。通常部署在GPU服务器上。 - 客户端(本文重点):你的Python程序。负责通过ADB连接手机、截图、将截图和指令发送给服务端、接收操作规划、并通过ADB执行。
- 通信桥梁:ADB。它既是获取屏幕画面的“摄像头”,也是执行操作的“机械手”。
接下来,我们开始动手搭建。
2. 环境准备:客户端与真机连接
我们的战斗将在本地电脑(Windows/Mac)上打响,目标是控制一台安卓手机。云端服务端的部署假设已经完成(通常由运维同事或通过云服务提供),我们拥有一个可访问的API地址,例如 http://your-server-ip:8800/v1。
2.1 硬件与基础软件
请确保准备好以下“装备”:
- 一台电脑:Windows 10/11 或 macOS均可。
- Python环境:推荐使用Python 3.10或更高版本。建议使用
conda或venv创建独立的虚拟环境,避免包冲突。 - 一部安卓手机:系统版本Android 7.0以上。备用选择:可以使用Android模拟器(如夜神、雷电模拟器),设置步骤类似。
- ADB工具包:这是与手机通信的核心工具。
安装与配置ADB(以Windows为例):
- 下载:从安卓开发者官网下载
platform-tools包并解压,例如解压到D:\platform-tools。 - 配置环境变量:
- 右键点击“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
- 在“系统变量”中找到并选中
Path,点击“编辑”。 - 点击“新建”,将你的ADB解压路径(如
D:\platform-tools)添加进去。 - 一路点击“确定”保存。
- 验证:打开命令提示符(CMD)或PowerShell,输入
adb version。如果显示版本号,则配置成功。
Mac用户配置更简单: 打开终端(Terminal),如果你把platform-tools解压到了Downloads文件夹,可以临时添加路径:
export PATH=$PATH:~/Downloads/platform-tools
想让配置永久生效,可以将上面这行命令添加到 ~/.zshrc 或 ~/.bash_profile 文件中。
2.2 手机端设置
要让电脑控制手机,需要在手机上开几个“权限门”。
- 开启开发者模式:
- 进入手机的
设置->关于手机(或我的设备)。 - 连续点击
版本号7次,直到出现“您已处于开发者模式”的提示。
- 进入手机的
- 开启USB调试:
- 返回设置,现在你会看到新增的
开发者选项。 - 进入
开发者选项,找到并开启USB调试。
- 返回设置,现在你会看到新增的
- 安装ADB Keyboard(关键步骤):
- 这是一个特殊的输入法,允许电脑通过ADB直接向手机输入文本,绕过手机自带输入法。
- 下载 ADB Keyboard 的APK文件,传输到手机并安装。
- 安装后,进入手机
设置->系统->语言与输入法->虚拟键盘->管理键盘,开启ADB Keyboard。 - 然后,在
语言与输入法的默认输入法中,将其切换为ADB Keyboard。
3. 部署控制端代码
环境就绪,现在来部署我们真正的“指挥官”——Open-AutoGLM的客户端代码。
打开你的终端或命令行,执行以下命令:
# 1. 克隆官方代码仓库到本地
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM
# 2. 安装项目依赖包
# 使用国内镜像源可以加速下载
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 3. 以“可编辑”模式安装当前项目,方便后续修改和调试
pip install -e .
这几行命令会下载所有必要的Python库,包括与ADB交互的、处理图像的、以及调用API的库。
4. 连接你的安卓设备
代码有了,现在让它和手机“握手”。连接方式有两种:USB直连和WiFi无线连接。无线连接在真机自动化时更方便。
4.1 USB连接(最简单)
用数据线将手机连接到电脑。在终端执行:
adb devices
你会看到类似以下的输出:
List of devices attached
abcdef123456 device
这个 abcdef123456 就是你的设备ID。如果显示的是 unauthorized,请在手机弹出的“允许USB调试吗?”对话框中点击“确定”。
4.2 WiFi连接(更灵活)
如果你想摆脱线缆束缚,可以设置无线连接:
# 步骤1:先用USB线连接一次,开启手机的TCP/IP监听模式
adb tcpip 5555
# 看到 `restarting in TCP mode port: 5555` 表示成功
# 步骤2:断开USB线,查看手机的IP地址(通常在设置->关于手机->状态信息里)
# 假设你的手机IP是 192.168.1.100
# 步骤3:通过WiFi连接
adb connect 192.168.1.100:5555
# 成功会显示 `connected to 192.168.1.100:5555`
# 再次验证
adb devices
# 此时应该能看到一个通过 `192.168.1.100:5555` 连接的设备
注意:手机和电脑必须在同一个局域网(WiFi)下。
5. 启动AI代理:两种实战方式
激动人心的时刻到了!我们将用两种方式给AI下命令:命令行快速测试和Python API集成开发。
5.1 方式一:命令行快速运行
在项目根目录(Open-AutoGLM)下,打开终端。这是一个完整的命令示例:
python main.py \
--device-id "192.168.1.100:5555" \
--base-url "http://your-server-ip:8800/v1" \
--model "autoglm-phone-9b" \
"打开抖音,搜索抖音号为'dycwo11nt61d'的博主并关注他!"
参数解释:
--device-id:填写你通过adb devices看到的设备ID或IP地址。--base-url:替换为你部署好的云端模型API地址。--model:指定要使用的模型名称,与服务器端启动的模型一致。- 最后的字符串:就是你用自然语言下达的指令。
运行后,你会看到终端开始打印日志,同时你的手机会像被一个隐形人操作一样,自动亮屏、解锁(如果未设密码)、打开抖音、执行搜索和关注。第一次看到这个过程,会感觉非常奇妙。
5.2 方式二:Python API集成(推荐)
对于想要集成到自家项目里的开发者,直接调用Python API是更优雅的方式。下面我们构建一个更健壮、功能更完整的控制脚本。
创建一个新文件,比如叫做 my_phone_agent.py:
import time
import logging
from phone_agent.adb import ADBConnection, list_devices
from phone_agent.agent import PhoneAgent
from phone_agent.config import AgentConfig
# 设置日志,方便查看运行过程
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
class MyPhoneAssistant:
def __init__(self, server_url, model_name):
"""
初始化手机助手
:param server_url: 云端模型API地址,如 "http://10.0.0.1:8800/v1"
:param model_name: 模型名称,如 "autoglm-phone-9b"
"""
self.config = AgentConfig(
base_url=server_url,
model=model_name,
# 可以调整其他参数,如操作间隔、超时时间等
action_interval=1.0,
request_timeout=30
)
self.adb_conn = ADBConnection()
self.agent = None
self.device_id = None
def connect_device(self, device_identifier):
"""
连接设备
:param device_identifier: 设备ID或IP地址(如 "192.168.1.100:5555")
"""
logger.info(f"正在尝试连接设备: {device_identifier}")
# 方法1:直接连接
success, message = self.adb_conn.connect(device_identifier)
if success:
self.device_id = device_identifier
logger.info(f"设备连接成功: {message}")
return True
else:
# 方法2:如果直接连接失败,尝试通过USB启用TCP/IP后再连接(适用于无线连接初始化)
logger.warning(f"直接连接失败: {message},尝试通过USB初始化...")
# 这里假设你已通过USB连接,并知道设备ID(如通过`adb devices`获取的USB设备ID)
usb_device_id = "abcdef123456" # 请替换为你的USB设备ID
success_enable, _ = self.adb_conn.enable_tcpip(usb_device_id, 5555)
if success_enable:
time.sleep(2)
success_connect, msg = self.adb_conn.connect(device_identifier)
if success_connect:
self.device_id = device_identifier
logger.info(f"通过USB初始化后,无线连接成功: {msg}")
return True
logger.error(f"所有连接尝试均失败")
return False
def list_available_devices(self):
"""列出所有可用的ADB设备"""
devices = list_devices()
if devices:
logger.info("发现以下设备:")
for dev in devices:
logger.info(f" - ID: {dev.device_id}, 类型: {dev.connection_type.value}")
else:
logger.info("未发现任何已连接的ADB设备。")
return devices
def initialize_agent(self):
"""初始化Phone Agent"""
if not self.device_id:
logger.error("请先连接设备!")
return False
logger.info(f"正在为设备 {self.device_id} 初始化AI Agent...")
try:
self.agent = PhoneAgent(self.device_id, self.config)
logger.info("AI Agent初始化成功!")
return True
except Exception as e:
logger.error(f"初始化Agent失败: {e}")
return False
def run_task(self, instruction, max_steps=20):
"""
执行一个自然语言指令任务
:param instruction: 自然语言指令
:param max_steps: 最大执行步骤,防止无限循环
"""
if not self.agent:
logger.error("Agent未初始化!")
return
logger.info(f"开始执行指令: {instruction}")
for step in range(max_steps):
logger.info(f"--- 步骤 {step+1} ---")
try:
# 执行单步操作
result = self.agent.step(instruction if step == 0 else None)
if result.is_terminal:
logger.info("任务完成!")
break
elif result.error:
logger.warning(f"步骤执行出错: {result.error}")
# 这里可以添加错误处理逻辑,比如重试或暂停
time.sleep(2)
else:
logger.info(f"AI执行了操作: {result.action}")
except Exception as e:
logger.error(f"执行过程中发生异常: {e}")
break
else:
logger.warning(f"达到最大步骤限制({max_steps}),任务可能未完成。")
def safe_shutdown(self):
"""安全关闭,断开连接"""
if self.device_id:
self.adb_conn.disconnect(self.device_id)
logger.info(f"已断开设备连接: {self.device_id}")
logger.info("手机助手已关闭。")
# ====== 实战示例:一个自动化任务流程 ======
if __name__ == "__main__":
# 1. 配置你的服务器和模型
SERVER_URL = "http://your-server-ip:8800/v1" # 务必替换成你的真实地址
MODEL_NAME = "autoglm-phone-9b"
DEVICE_IP = "192.168.1.100:5555" # 替换成你的设备IP或ID
assistant = MyPhoneAssistant(SERVER_URL, MODEL_NAME)
try:
# 2. 列出当前设备(可选,用于检查)
assistant.list_available_devices()
# 3. 连接设备
if not assistant.connect_device(DEVICE_IP):
exit("连接设备失败,程序退出。")
# 4. 初始化AI Agent
if not assistant.initialize_agent():
exit("初始化AI Agent失败,程序退出。")
# 5. 执行一系列自动化任务
tasks = [
"解锁手机屏幕", # 如果屏幕有密码,这个指令可能无效,需提前手动解锁
"打开微信",
"找到和‘妈妈’的聊天窗口",
"给她发一句‘我今晚回家吃饭’",
"然后回到手机桌面",
]
for task in tasks:
assistant.run_task(task)
time.sleep(2) # 任务间稍作停顿
# 6. 也可以执行一个复杂的长指令
# complex_task = "打开小红书,搜索‘减脂餐’,点开点赞数第一的笔记,收藏它,然后截图。"
# assistant.run_task(complex_task, max_steps=30)
except KeyboardInterrupt:
logger.info("用户中断操作。")
except Exception as e:
logger.error(f"程序运行出错: {e}")
finally:
# 7. 安全关闭
assistant.safe_shutdown()
这个脚本提供了一个面向对象的、易于扩展的框架。你可以轻松地修改run_task方法,添加错误重试机制、结果验证(比如通过截图检查是否真的关注成功)、或者将多个任务串联成一个工作流。
6. 常见问题与排查指南
在实战中,你可能会遇到一些“坑”。这里是一些常见问题的排查思路:
-
问题:连接被拒绝 (Connection refused)
- 排查:检查你的
--base-url或SERVER_URL是否正确。确保云服务器的防火墙放行了对应的端口(如8800)。在服务器上可以用curl http://localhost:8800/v1测试API是否本地可通。
- 排查:检查你的
-
问题:ADB连接不稳定或掉线
- 排查:WiFi连接容易受网络波动影响。如果进行重要自动化任务,建议使用USB连接。执行
adb kill-server然后adb start-server有时能解决ADB守护进程的异常。
- 排查:WiFi连接容易受网络波动影响。如果进行重要自动化任务,建议使用USB连接。执行
-
问题:模型无响应或返回乱码
- 排查:首先确认服务端模型是否成功启动且显存足够。检查客户端
--model参数是否与服务端启动的模型名称完全一致。查看服务端日志,看是否有OOM(内存溢出)错误。
- 排查:首先确认服务端模型是否成功启动且显存足够。检查客户端
-
问题:AI执行点击的位置不对
- 排查:这通常是屏幕分辨率或缩放问题。确保ADB获取的屏幕分辨率与模型训练时适配的分辨率大致相符。可以尝试在
AgentConfig中调整相关参数,或者更换不同分辨率的模拟器测试。
- 排查:这通常是屏幕分辨率或缩放问题。确保ADB获取的屏幕分辨率与模型训练时适配的分辨率大致相符。可以尝试在
-
问题:无法输入中文或文本
- 排查:确保手机默认输入法已切换为
ADB Keyboard。这是最关键的一步。可以在连接后,手动用adb shell input text "hello"命令测试文本输入是否正常。
- 排查:确保手机默认输入法已切换为
7. 总结
通过本文的实战演练,你已经掌握了将Open-AutoGLM Phone Agent集成到Python项目中的核心技能。我们从理解其“看懂屏幕、规划操作”的核心原理开始,一步步完成了环境配置、设备连接,并最终通过命令行和Python API两种方式,实现了用自然语言控制手机的自动化操作。
这个技术的想象空间巨大:
- 自动化测试:编写自然语言用例,让AI自动遍历App功能。
- 个人助手:自动完成每日签到、信息收集、社交账号管理等重复性手机操作。
- 无障碍应用:帮助行动不便的用户通过语音指令操作手机。
- RPA(机器人流程自动化):将手机操作与电脑端工作流结合,实现跨设备自动化。
目前框架仍在快速发展中,你可以关注其GitHub仓库,获取最新的功能和模型更新。最重要的建议是:多动手,多尝试。从简单的“打开设置”开始,逐步尝试更复杂的多步指令,观察AI的决策逻辑,你会对它强大的理解和规划能力有更深的体会。现在,就去创造你的第一个手机AI智能体吧!
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)