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用户

    1. 下载官方platform-tools
    2. 解压到一个无中文、无空格的路径,例如 C:\adb
    3. 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”中找到Path,点击“编辑”→“新建”,填入 C:\adb
    4. 重启终端,输入 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远程(日常主力)
  1. 先用USB线连接,执行:
    adb tcpip 5555
    
  2. 拔掉USB线,确保手机与电脑在同一WiFi下;
  3. 查找手机IP(设置→关于手机→状态→IP地址),假设为 192.168.1.100,执行:
    adb connect 192.168.1.100:5555
    
  4. 验证:
    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,时而显示 unauthorizedoffline
  • 根因:手机端的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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐