Open-AutoGLM 部署指南:本地大模型控制 Android 手机自动化

前言

Open-AutoGLM 是一个创新的开源项目,它将本地/服务器上的大语言模型与 Android 手机的自动化控制相结合,实现了基于自然语言指令的智能设备操作。通过结合 vLLM/SGlang 高性能推理框架和 ADB 远程调试协议,该项目为开发者和技术爱好者提供了一个强大的平台,可以轻松构建和部署跨设备的智能自动化应用。

本指南旨在为用户提供完整的 Open-AutoGLM 部署流程,从硬件系统要求到具体安装步骤,再到常见问题排查和进阶技巧,帮助您快速上手并充分利用这一技术。无论您是希望在本地 PC 上部署小规模测试环境,还是在服务器上搭建生产级应用,本指南都将为您提供详细的指导和最佳实践。

一、整体架构

Open-AutoGLM 采用「本地 PC/服务器运行大模型 + ADB 远程控制 Android 手机」的架构:

scss 复制代码
┌──────────────┐     HTTP/OpenAI API    ┌─────────────┐
│  vLLM/SGlang │◄──────────────────────►│ phone_agent │
│ (模型推理)   │                        │ (PythonSDK) │
└──────────────┘                        └──────┬──────┘
                                               │ ADB (USB/Wi-Fi)
                                               ▼
                                        Android 手机/模拟器

架构说明

  • 推理端:在本地 GPU 服务器上运行 vLLM 或 SGlang,提供与大模型对话的 OpenAI 兼容 API
  • 控制端:phone_agent 通过 HTTP API 与推理端通信,使用 ADB 协议控制手机
  • 设备端:Android 手机通过 ADB 接收指令,执行自动化操作

二、硬件 & 系统要求

2.1 推理端(服务器/PC)

最低配置

  • GPU :CUDA 12+ 兼容显卡(推荐 ≥40 GB 显存)
    • NVIDIA RTX 3090/4090(24GB)
    • NVIDIA A100(40GB)
    • 或其他 CUDA 12+ 兼容显卡
  • 内存:≥64 GB RAM
  • 存储:≥100 GB 可用空间(用于模型缓存)
  • 操作系统:Ubuntu 20.04+ / CentOS 7+ / Windows 10+ / macOS 12+

推荐配置(用于生产环境):

  • GPU:双卡 A100 80GB 或四卡 4090
  • 内存:128 GB RAM
  • 存储:≥500 GB NVMe
  • 网络:千兆网卡以上

2.2 控制端(操作电脑)

  • 操作系统:Windows 10+ / macOS 12+ / Linux 任意发行版
  • Python:3.10+(推荐使用 conda 或 pyenv 管理)
  • ADB:Android Platform Tools 1.x.x
  • 可选工具
    • scrcpy(屏幕镜像,实时观察手机操作)
    • Android Studio(用于调试和开发者选项)

2.3 设备端(Android 手机/模拟器)

  • 系统版本:Android 7.0+(推荐 Android 10+)
  • 开发者选项:已启用
  • USB 调试:已开启
  • 输入法:需安装 ADB Keyboard
  • 网络:可选 Wi-Fi 调试(端口 5555)

三、本地安装详细步骤

3.1 安装基础依赖环境

步骤 1:检查 Python 版本

bash 复制代码
# 检查 Python 版本(需要 ≥3.10)
python --version
python3 --version

# 如果未安装 Python 3.10+,请先安装
# Ubuntu/Debian:
sudo apt update && sudo apt install python3.10 python3.10-venv python3.10-distutils

# CentOS/RHEL:
sudo yum install python3.10 python3.10-pip python3.10-devel

# Windows: 下载安装 python.org
# macOS: 使用 Homebrew
brew install python@3.10

注意事项

  • 建议使用 conda 创建虚拟环境以避免依赖冲突
  • Windows 用户需确保长路径支持(启用 fsutil behavior set disablelastaccess 1

步骤 2:克隆仓库

bash 复制代码
# 克隆 Open-AutoGLM 仓库
git clone https://github.com/zai-org/Open-AutoGLM.git
cd Open-AutoGLM

# 查看分支信息
git branch -a
git log --oneline -5

目录结构说明

bash 复制代码
Open-AutoGLM/
├── main.py              # 主程序入口
├── requirements.txt     # Python 依赖
├── scripts/             # 辅助脚本
│   ├── check_deployment_cn.py  # 部署检查
│   └── ...
├── src/                 # 源代码
├── models/              # 模型存储目录
└── README.md            # 官方文档

步骤 3:创建 Python 虚拟环境(推荐)

bash 复制代码
# 使用 conda 创建环境
conda create -n autoglm python=3.10 -y
conda activate autoglm

# 或使用 venv
python3 -m venv autoglm_env
source autoglm_env/bin/activate  # Linux/macOS
# autoglm_env\Scripts\activate    # Windows

步骤 4:安装运行时依赖

bash 复制代码
# 升级 pip
pip install --upgrade pip

# 安装基础依赖
pip install -r requirements.txt

# 安装 Open-AutoGLM 本身(开发模式)
pip install -e .

# 验证安装
python -c "import phone_agent; print('phone-agent/Open-AutoGLM 安装成功')"

依赖说明

  • vllm:高性能模型推理框架
  • openai:OpenAI API 客户端
  • adbutils:ADB 设备管理
  • pillow:图像处理
  • numpy:数值计算
  • requests:HTTP 请求

3.2 配置 ADB 调试环境

步骤 1:下载 Android Platform Tools

方式 A:直接下载

bash 复制代码
# 创建目录
mkdir -p ~/android-sdk/platform-tools
cd ~/android-sdk

# 下载 platform-tools(Linux/macOS)
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip

# 解压
unzip platform-tools-latest-linux.zip

方式 B:使用 SDK Manager

bash 复制代码
# 安装 Android SDK Command-line Tools
wget https://dl.google.com/android/repository/commandlinetools-latest-linux.zip
unzip commandlinetools-latest-linux.zip -d ~/android-sdk

步骤 2:配置环境变量

Linux(~/.bashrc 或 ~/.zshrc)

bash 复制代码
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin

Windows(系统属性 -> 环境变量)

perl 复制代码
变量名:ANDROID_HOME
变量值:C:\Users\YourName\android-sdk

Path 添加:
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\emulator
%ANDROID_HOME%\tools
%ANDROID_HOME%\tools\bin

macOS(~/.zshrc)

bash 复制代码
export ANDROID_HOME=~/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin

步骤 3:验证 ADB 安装

bash 复制代码
# 检查 ADB 版本
adb version

# 应显示类似:
# Android Debug Bridge version 1.x.x
# Version 31.0.1 etc.

# 测试 ADB 连接
adb devices
# 应显示:List of devices attached(无设备是正常的)

常见问题

  • 如果提示 command not found,请检查环境变量是否正确配置
  • Windows 用户可能需要安装 Android USB 驱动

3.3 手机端准备

步骤 1:启用开发者选项

  1. 开启开发者模式

    • 进入「设置」→「关于手机」
    • 连续点击「版本号」约 7-10 次
    • 会提示「您已处于开发者模式」
  2. 验证开发者选项

    • 进入「设置」→「系统」→「开发者选项」
    • 确保可以看到各种调试选项

步骤 2:启用 USB 调试

  1. 打开 USB 调试

    • 进入「设置」→「系统」→「开发者选项」
    • 找到「USB 调试」选项并勾选
  2. 配置 USB 调试选项(推荐)

    • 勾选「USB 调试(安全设置)」
    • 勾选「通过 USB 安装应用」
    • 勾选「USB 配置」

不同品牌特殊说明

  • 小米/MIUI:需要在「开发者选项」里找到「USB 调试(安全设置)」并单独勾选
  • 华为/EMUI:可能需要在「设置」→「系统和更新」→「开发者选项」中启用
  • 三星:One UI 中开发者选项位置可能不同

步骤 3:连接手机到电脑

  1. 使用 USB 数据线连接

    • 使用原装或高质量数据线
    • 确保数据线支持数据传输(非仅充电)
  2. 验证连接

bash 复制代码
# 检查设备连接状态
adb devices

# 应显示类似:
# List of devices attached
# device_id    device

# 如果无设备,尝试:
# 1. 更换 USB 端口
# 2. 重新插拔数据线
# 3. 在手机上确认 USB 调试授权对话框
  1. 授权调试
    • 首次连接时,手机会弹出「允许 USB 调试吗?」对话框
    • 勾选「始终允许来自这台计算机的 USB 调试」
    • 点击「确定」

步骤 4:安装并配置 ADB Keyboard

  1. 下载 ADB Keyboard
bash 复制代码
# 使用 adb 安装
adb shell pm install -r /path/to/ADBKeyboard.apk

# 或让脚本自动安装(首次运行时会自动处理)
  1. 启用 ADB Keyboard

    • 进入「设置」→「系统」→「语言和输入法」
    • 找到「ADB Keyboard」并启用
    • 设为默认输入法(可选但推荐)
  2. 验证 ADB Keyboard

bash 复制代码
# 测试输入
adb shell input text "Hello World"

# 应该能在手机上看到文本输入

3.4 下载并启动模型

Open-AutoGLM 支持多种模型部署方式,根据您的硬件情况选择合适的方式。

方式 A:本地 vLLM 部署(推荐,需要 GPU)

步骤 1:安装 vLLM

bash 复制代码
# 安装 vLLM(支持 CUDA 12+)
pip install vllm

# 验证安装
pip show vllm 或 vllm --version

步骤 2:下载模型

bash 复制代码
# 创建模型目录
mkdir -p models/autoglm-phone-9b

# 下载模型(约 20GB)
# 方式 1:使用 HuggingFace CLI
huggingface-cli download zai-org/AutoGLM-Phone-9B \
  --local-dir models/autoglm-phone-9b \
  --local-dir-use-symlinks False

# 方式 2:使用 git clone
git clone https://huggingface.co/zai-org/AutoGLM-Phone-9B \
  models/autoglm-phone-9b

步骤 3:启动 vLLM 服务器

bash 复制代码
# 基础启动命令
python3 -m vllm.entrypoints.openai.api_server \
  --served-model-name autoglm-phone-9b \
  --model models/autoglm-phone-9b \
  --port 8000 \
  --host 0.0.0.0

# 推荐的生产环境配置
python3 -m vllm.entrypoints.openai.api_server \
  --served-model-name autoglm-phone-9b \
  --allowed-local-media-path / \
  --mm-encoder-tp-mode data \
  --mm_processor_cache_type shm \
  --mm_processor_kwargs '{"max_pixels":5000000}' \
  --max-model-len 25480 \
  --chat-template-content-format string \
  --limit-mm-per-prompt '{"image":10}' \
  --model models/autoglm-phone-9b \
  --port 8000 \
  --host 0.0.0.0 \
  --tensor-parallel-size 1 \
  --max-num-seqs 256 \
  --max-num-batched-tokens 8192

参数说明

  • --served-model-name:服务名称,用于 API 调用
  • --model:模型本地路径或 HuggingFace ID
  • --port:API 服务端口
  • --host:监听地址,0.0.0.0 表示所有网卡
  • --mm-encoder-tp-mode:多模态编码器张量并行模式
  • --max-model-len:最大序列长度
  • --tensor-parallel-size:张量并行大小(单卡=1,双卡=2)

步骤 4:验证模型服务

bash 复制代码
# 使用官方检查脚本
python scripts/check_deployment_cn.py \
  --base-url http://localhost:8000/v1 \
  --model autoglm-phone-9b

# 或使用 curl 直接测试
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "autoglm-phone-9b",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下自己"}
    ],
    "temperature": 0.7,
    "max_tokens": 512
  }'

预期输出

erlang 复制代码
✅ 模型服务正常
思考:我需要:1. 先启动京东...

方式 B:使用云端 API(无本地 GPU)

如果您没有本地 GPU,可以使用智谱开放平台的 API。

步骤 1:注册并获取 API Key

  1. 访问 智谱开放平台
  2. 注册账号并登录
  3. 进入「API 密钥」页面获取 API Key

步骤 2:使用 API 部署

bash 复制代码
# 直接使用 main.py,指定云端 API
python main.py \
  --base-url https://open.bigmodel.cn/api/paas/v4 \
  --model autoglm-phone-9b \
  --api-key YOUR_API_KEY_HERE

环境变量配置(可选):

bash 复制代码
export OPENAI_API_KEY=YOUR_API_KEY_HERE
export OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4

3.5 验证完整部署

测试 1:模型推理测试

bash 复制代码
# 创建测试脚本 cat test_model.py
python << 'EOF'
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="dummy"  # 本地部署可使用任意密钥
)

response = client.chat.completions.create(
    model="autoglm-phone-9b",
    messages=[
        {"role": "user", "content": "你好,请简单介绍一下自己"}
    ],
    temperature=0.7,
    max_tokens=256
)

print("模型回复:", response.choices[0].message.content)
EOF

python test_model.py

测试 2:ADB 设备测试

bash 复制代码
# 测试 ADB 连接
adb devices

# 测试输入
adb shell input text "测试输入"

# 测试截图
adb shell screencap -p /sdcard/screenshot.png
# 拉取截图到电脑
adb pull /sdcard/screenshot.png ./screenshot.png

测试 3:完整集成测试

bash 复制代码
# 交互模式测试
python main.py \
  --base-url http://localhost:8000/v1 \
  --model autoglm-phone-9b

# 在提示符后输入测试命令
> 打开计算器,计算 123+456
> 打开微信,给"文件传输助手"发送"你好"

四、常见问题与排查

症状 可能原因 详细处理办法
adb devices 无设备 1. 数据线仅充电 2. 驱动未装 3. 调试未开 1. 更换数据线为数据传输线 2. Windows: 安装 Android USB 驱动 3. 确认开发者选项和 USB 调试已开启
模型启动 OOM 1. 显存不足 2. 共享内存未配置 1. 减小 --max-model-len(如改为 8192) 2. 使用 4bit/8bit 量化 3. 增加 --mm_processor_cache_type 配置
截图黑屏 1. 应用处于隐私页面 2. 支付页面 3. 截图权限被拒 1. Agent 会自动请求人工接管 2. 手动操作后继续自动化 3. 检查手机截图权限设置
文本输入无效 1. 未启用 ADB Keyboard 2. 输入法配置错误 1. 在手机设置-输入法中勾选 ADB Keyboard 2. 重启输入法服务 3. 确认 ADB Keyboard 有默认权限
Wi-Fi 远程 ADB 失败 1. 防火墙阻拦 5555 端口 2. 手机和电脑不在同一网段 1. 放行 5555 端口(Windows 防火墙、macOS 防火墙) 2. 确保设备在同一 Wi-Fi 网络 3. 改用 USB 连接
vLLM 启动失败 1. CUDA 版本不兼容 2. 模型路径错误 3. 依赖缺失 1. 检查 CUDA 版本(需要 12+) 2. 确认模型路径正确 3. 重新安装 vllm 和相关依赖
模型推理无响应 1. API 地址错误 2. 模型未正确加载 3. 请求超时 1. 检查 --base-url 和端口 2. 查看启动日志 3. 增加 --max-num-seqs 配置

详细排查步骤

问题 1:ADB 连接问题

bash 复制代码
# 1. 检查 USB 数据线
# 尝试更换 USB 端口和数据线

# 2. 重置 ADB
adb kill-server
adb start-server
adb devices

# 3. 检查手机端授权
# 手机上应该弹出"允许 USB 调试"对话框

# 4. 强制重新连接
adb disconnect
adb connect 127.0.0.1:5555  # 如果使用 Wi-Fi

问题 2:显存不足

bash 复制代码
# 检查显存使用
nvidia-smi

# 调整 vLLM 参数
python3 -m vllm.entrypoints.openai.api_server \
  --model models/autoglm-phone-9b \
  --port 8000 \
  --max-model-len 8192 \        # 减小序列长度
  --mm_processor_kwargs '{"max_pixels":2000000}' \  # 减小图像处理分辨率
  --quantization awq \           # 使用 AWQ 量化(如果支持)
  --tensor-parallel-size 1       # 单卡运行

问题 3:模型加载失败

bash 复制代码
# 检查模型文件完整性
ls -lh models/autoglm-phone-9b/
# 应该看到 config.json, pytorch_model.bin 等文件

# 重新下载模型
rm -rf models/autoglm-phone-9b
huggingface-cli download zai-org/AutoGLM-Phone-9B \
  --local-dir models/autoglm-phone-9b \
  --local-dir-use-symlinks False

# 检查模型格式
file models/autoglm-phone-9b/pytorch_model.bin

五、进阶技巧

5.1 使用 Wi-Fi 远程调试(无需 USB)

通过 Wi-Fi 连接可以摆脱数据线束缚,更适合长期运行。

步骤 1:手机端开启 Wi-Fi 调试

bash 复制代码
# 在手机上执行(通过 adb shell)
adb shell settings put global adb_wifi_enabled 1

# 或在手机端开启 TCP/IP 模式
adb tcpip 5555

步骤 2:电脑端连接

bash 复制代码
# 查看手机 IP 地址(手机上执行)
adb shell netcfg | grep wlan0

# 电脑端连接
adb connect 192.168.1.100:5555

# 验证连接
adb devices

步骤 3:运行 Open-AutoGLM

bash 复制代码
python main.py \
  --base-url http://localhost:8000/v1 \
  --model autoglm-phone-9b \
  --device-id 192.168.1.100:5555

注意事项

  • 确保手机和电脑在同一 Wi-Fi 网络
  • 防火墙需放行 5555 端口
  • 连接可能不如 USB 稳定

5.2 多 GPU 张量并行

对于多卡服务器,可以使用张量并行大幅降低显存占用。

配置示例(双卡 A100 80GB)

bash 复制代码
python3 -m vllm.entrypoints.openai.api_server \
  --served-model-name autoglm-phone-9b \
  --model models/autoglm-phone-9b \
  --port 8000 \
  --host 0.0.0.0 \
  --tensor-parallel-size 2 \        # 使用 2 张卡
  --mm-encoder-tp-mode data \       # 多模态编码器也使用数据并行
  --max-model-len 25480 \
  --mm_processor_kwargs '{"max_pixels":5000000}' \
  --chat-template-content-format string \
  --limit-mm-per-prompt '{"image":10}'

效果

  • 显存占用降低约 50%
  • 推理速度提升约 30-50%
  • 适合 80GB+ 的大模型

四卡配置

bash 复制代码
--tensor-parallel-size 4 \
--mm-encoder-tp-mode data \

5.3 量化与低成本部署

选项 1:使用 llama.cpp

bash 复制代码
# 编译 llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make LLAMA_CUBLAS=1

# 下载 GGUF 格式模型
# (需要等待官方发布或自行转换)

# 运行
./main -m model.gguf -p "你好"

选项 2:使用 4bit/8bit 量化

bash 复制代码
# vLLM 自动量化(如果支持)
python3 -m vllm.entrypoints.openai.api_server \
  --model models/autoglm-phone-9b \
  --port 8000 \
  --quantization awq \    # 或 exllama, marlin 等
  --max-model-len 8192

量化效果对比

方案 显存占用 推理速度 准确率下降
FP16 ~20 GB 基准 -
INT8 ~10 GB +20% <1%
INT4 ~5 GB +40% 2-5%

5.4 使用屏幕镜像(scrcpy)

实时观察手机操作,便于调试和展示。

安装 scrcpy

bash 复制代码
# Ubuntu/Debian
sudo apt install scrcpy

# Windows
winget install Gsquared.Scrcpy

# macOS
brew install scrcpy

启动镜像

bash 复制代码
# 基础启动
scrcpy

# 高级选项
scrcpy --max-size=1920  # 限制分辨率
scrcpy --bit-rate=8M    # 限制码率
scrcpy --lock-video=landscape  # 锁定横屏

与 Open-AutoGLM 配合使用

bash 复制代码
# 终端 1:启动模型
python3 -m vllm.entrypoints.openai.api_server --model models/autoglm-phone-9b --port 8000 &

# 终端 2:启动 scrcpy
scrcpy &

# 终端 3:运行 Open-AutoGLM
python main.py --base-url http://localhost:8000/v1 --model autoglm-phone-9b

5.5 批量任务执行

创建任务脚本,批量执行自动化任务。

创建任务文件 tasks.txt

arduino 复制代码
打开微信,给"文件传输助手"发送"你好"
打开支付宝,查看余额
打开淘宝,搜索"iPhone 15"

批量执行脚本

python 复制代码
import subprocess

def run_task(command):
    print(f"执行任务: {command}")
    result = subprocess.run(
        ["python", "main.py"] + command.split(),
        capture_output=True,
        text=True
    )
    print(result.stdout)
    return result.returncode == 0

with open("tasks.txt", "r", encoding="utf-8") as f:
    for line in f:
        task = line.strip()
        if task:
            run_task(task)

六、参考与延伸阅读

官方文档

社区资源

相关技术

相关推荐
阳光是sunny4 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
EMA10 小时前
Docker虚拟化失败解决方案
架构
李斯维10 小时前
从历史的角度看 Android 软件架构
android·架构·android jetpack
JouYY12 小时前
聊一下多 Agent 编排架构的应用实践
架构·llm·agent
Sunia13 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi2 天前
Q01-高并发点赞系统架构设计
架构
笨鸟飞不快2 天前
从 MVC 到 DDD:一次真实的渐进式迁移实录
后端·架构
这个DBA有点耶2 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下2 天前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构