👋 加入我们的 微信 社区
Phone Agent 是一个基于 AutoGLM 构建的手机端智能助理框架,它能够以多模态方式理解手机屏幕内容,并通过自动化操作帮助用户完成任务。系统通过 ADB(Android Debug Bridge)来控制设备,以视觉语言模型进行屏幕感知,再结合智能规划能力生成并执行操作流程。用户只需用自然语言描述需求,如“打开小红书搜索美食”,Phone Agent 即可自动解析意图、理解当前界面、规划下一步动作并完成整个流程。系统还内置敏感操作确认机制,并支持在登录或验证码场景下进行人工接管。同时,它提供远程 ADB 调试能力,可通过 WiFi 或网络连接设备,实现灵活的远程控制与开发。
⚠️ 本项目仅供研究和学习使用。严禁用于非法获取信息、干扰系统或任何违法活动。请仔细审阅 使用条款。
| Model | Download Links |
|---|---|
| AutoGLM-Phone-9B | 🤗 Hugging Face 🤖 ModelScope |
| AutoGLM-Phone-9B-Multilingual | 🤗 Hugging Face 🤖 ModelScope |
其中,AutoGLM-Phone-9B 是针对中文手机应用优化的模型,而 AutoGLM-Phone-9B-Multilingual 支持英语场景,适用于包含英文等其他语言内容的应用。
建议使用 Python 3.10 及以上版本。
- 下载官方 ADB 安装包,并解压到自定义路径
- 配置环境变量
-
MacOS 配置方法:在
Terminal或者任何命令行工具里# 假设解压后的目录为 ~/Downlaods/platform-tools。如果不是请自行调整命令。 export PATH=${PATH}:~/Downloads/platform-tools
-
Windows 配置方法:可参考 第三方教程 进行配置。
- 开发者模式启用:通常启用方法是,找到
设置-关于手机-版本号然后连续快速点击 10 次左右,直到弹出弹窗显示“开发者模式已启用”。不同手机会有些许差别,如果找不到,可以上网搜索一下教程。 - USB 调试启用:启用开发者模式之后,会出现
设置-开发者选项-USB 调试,勾选启用 - 部分机型在设置开发者选项以后, 可能需要重启设备才能生效. 可以测试一下: 将手机用USB数据线连接到电脑后,
adb devices查看是否有设备信息, 如果没有说明连接失败.
请务必仔细检查相关权限
下载 安装包 并在对应的安卓设备中进行安装。
注意,安装完成后还需要到 设置-输入法 或者 设置-键盘列表 中启用 ADB Keyboard 才能生效
pip install -r requirements.txt
pip install -e .确认 USB数据线具有数据传输功能, 而不是仅有充电功能
确保已安装 ADB 并使用 USB数据线 连接设备:
# 检查已连接的设备
adb devices
# 输出结果应显示你的设备,如:
# List of devices attached
# emulator-5554 device- 下载模型,并按照
requirements.txt中For Model Deployment章节自行安装推理引擎框架。 - 通过 SGlang / vLLM 启动,得到 OpenAI 格式服务。这里提供一个 vLLM部署方案,请严格遵循我们提供的启动参数:
- vLLM:
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 zai-org/AutoGLM-Phone-9B \
--port 8000-
该模型结构与
GLM-4.1V-9B-Thinking相同, 关于模型部署的详细内容,你也以查看 GLM-V 获取模型部署和使用指南。 -
运行成功后,将可以通过
http://localhost:8000/v1访问模型服务。 如果您在远程服务器部署模型, 使用该服务器的IP访问模型.
根据你部署的模型, 设置 --base-url 和 --model 参数. 例如:
# 交互模式
python main.py --base-url http://localhost:8000/v1 --model "autoglm-phone-9b"
# 指定模型端点
python main.py --base-url http://localhost:8000/v1 "打开美团搜索附近的火锅店"
# 使用英文 system prompt
python main.py --lang en --base-url http://localhost:8000/v1 "Open Chrome browser"
# 列出支持的应用
python main.py --list-appsfrom phone_agent import PhoneAgent
from phone_agent.model import ModelConfig
# Configure model
model_config = ModelConfig(
base_url="http://localhost:8000/v1",
model_name="autoglm-phone-9b",
)
# 创建 Agent
agent = PhoneAgent(model_config=model_config)
# 执行任务
result = agent.run("打开淘宝搜索无线耳机")
print(result)Phone Agent 支持通过 WiFi/网络进行远程 ADB 调试,无需 USB 连接即可控制设备。
确保手机和电脑在同一个WiFi中,如图所示
# 通过 WiFi 连接, 改成手机显示的 IP 地址和端口
adb connect 192.168.1.100:5555
# 验证连接
adb devices
# 应显示:192.168.1.100:5555 device# 列出所有已连接设备
adb devices
# 连接远程设备
adb connect 192.168.1.100:5555
# 断开指定设备
adb disconnect 192.168.1.100:5555
# 指定设备执行任务
python main.py --device-id 192.168.1.100:5555 --base-url http://localhost:8000/v1 --model "autoglm-phone-9b" "打开抖音刷视频"from phone_agent.adb import ADBConnection, list_devices
# 创建连接管理器
conn = ADBConnection()
# 连接远程设备
success, message = conn.connect("192.168.1.100:5555")
print(f"连接状态: {message}")
# 列出已连接设备
devices = list_devices()
for device in devices:
print(f"{device.device_id} - {device.connection_type.value}")
# 在 USB 设备上启用 TCP/IP
success, message = conn.enable_tcpip(5555)
ip = conn.get_device_ip()
print(f"设备 IP: {ip}")
# 断开连接
conn.disconnect("192.168.1.100:5555")连接被拒绝:
- 确保设备和电脑在同一网络
- 检查防火墙是否阻止 5555 端口
- 确认已启用 TCP/IP 模式:
adb tcpip 5555
连接断开:
- WiFi 可能断开了,使用
--connect重新连接 - 部分设备重启后会禁用 TCP/IP,需要通过 USB 重新启用
多设备:
- 使用
--device-id指定要使用的设备 - 或使用
--list-devices查看所有已连接设备
系统提供中英文两套 prompt,通过 --lang 参数切换:
--lang cn- 中文 prompt(默认),配置文件:phone_agent/config/prompts_zh.py--lang en- 英文 prompt,配置文件:phone_agent/config/prompts_en.py
可以直接修改对应的配置文件来增强模型在特定领域的能力,或通过注入 app 名称禁用某些 app。
| 变量 | 描述 | 默认值 |
|---|---|---|
PHONE_AGENT_BASE_URL |
模型 API 地址 | http://localhost:8000/v1 |
PHONE_AGENT_MODEL |
模型名称 | autoglm-phone-9b |
PHONE_AGENT_MAX_STEPS |
每个任务最大步数 | 100 |
PHONE_AGENT_DEVICE_ID |
ADB 设备 ID | (自动检测) |
PHONE_AGENT_LANG |
语言 (cn 或 en) |
cn |
from phone_agent.model import ModelConfig
config = ModelConfig(
base_url="http://localhost:8000/v1",
api_key="EMPTY", # API 密钥(如需要)
model_name="autoglm-phone-9b", # 模型名称
max_tokens=3000, # 最大输出 token 数
temperature=0.1, # 采样温度
frequency_penalty=0.2, # 频率惩罚
)from phone_agent.agent import AgentConfig
config = AgentConfig(
max_steps=100, # 每个任务最大步数
device_id=None, # ADB 设备 ID(None 为自动检测)
lang="cn", # 语言选择:cn(中文)或 en(英文)
verbose=True, # 打印调试信息(包括思考过程和执行动作)
)当 verbose=True 时,Agent 会在每一步输出详细信息:
==================================================
💭 思考过程:
--------------------------------------------------
当前在系统桌面,需要先启动小红书应用
--------------------------------------------------
🎯 执行动作:
{
"_metadata": "do",
"action": "Launch",
"app": "小红书"
}
==================================================
... (执行动作后继续下一步)
==================================================
💭 思考过程:
--------------------------------------------------
小红书已打开,现在需要点击搜索框
--------------------------------------------------
🎯 执行动作:
{
"_metadata": "do",
"action": "Tap",
"element": [500, 100]
}
==================================================
🎉 ================================================
✅ 任务完成: 已成功搜索美食攻略
==================================================
这样可以清楚地看到 AI 的推理过程和每一步的具体操作。
Phone Agent 支持 50+ 款主流中文应用:
| 分类 | 应用 |
|---|---|
| 社交通讯 | 微信、QQ、微博 |
| 电商购物 | 淘宝、京东、拼多多 |
| 美食外卖 | 美团、饿了么、肯德基 |
| 出行旅游 | 携程、12306、滴滴出行 |
| 视频娱乐 | bilibili、抖音、爱奇艺 |
| 音乐音频 | 网易云音乐、QQ音乐、喜马拉雅 |
| 生活服务 | 大众点评、高德地图、百度地图 |
| 内容社区 | 小红书、知乎、豆瓣 |
运行 python main.py --list-apps 查看完整列表。
Agent 可以执行以下操作:
| 操作 | 描述 |
|---|---|
Launch |
启动应用 |
Tap |
点击指定坐标 |
Type |
输入文本 |
Swipe |
滑动屏幕 |
Back |
返回上一页 |
Home |
返回桌面 |
Long Press |
长按 |
Double Tap |
双击 |
Wait |
等待页面加载 |
Take_over |
请求人工接管(登录/验证码等) |
处理敏感操作确认和人工接管:
def my_confirmation(message: str) -> bool:
"""敏感操作确认回调"""
return input(f"确认执行 {message}?(y/n): ").lower() == "y"
def my_takeover(message: str) -> None:
"""人工接管回调"""
print(f"请手动完成: {message}")
input("完成后按回车继续...")
agent = PhoneAgent(
confirmation_callback=my_confirmation,
takeover_callback=my_takeover,
)查看 examples/ 目录获取更多使用示例:
basic_usage.py- 基础任务执行- 单步调试模式
- 批量任务执行
- 自定义回调
二次开发需要使用开发依赖:
pip install -e ".[dev]"pytest tests/phone_agent/
├── __init__.py # 包导出
├── agent.py # PhoneAgent 主类
├── adb/ # ADB 工具
│ ├── connection.py # 远程/本地连接管理
│ ├── screenshot.py # 屏幕截图
│ ├── input.py # 文本输入 (ADB Keyboard)
│ └── device.py # 设备控制 (点击、滑动等)
├── actions/ # 操作处理
│ └── handler.py # 操作执行器
├── config/ # 配置
│ ├── apps.py # 支持的应用映射
│ ├── prompts_zh.py # 中文系统提示词
│ └── prompts_en.py # 英文系统提示词
└── model/ # AI 模型客户端
└── client.py # OpenAI 兼容客户端
我们列举了一些常见的问题,以及对应的解决方案:
尝试通过重启 ADB 服务来解决:
adb kill-server
adb start-server
adb devices- 确保设备已安装 ADB Keyboard
- 在设置 > 系统 > 语言和输入法 > 虚拟键盘 中启用
- Agent 会在需要输入时自动切换到 ADB Keyboard
这通常意味着应用正在显示敏感页面(支付、密码、银行类应用)。Agent 会自动检测并请求人工接管。
报错信息形如 UnicodeEncodeError gbk code
解决办法: 在运行代码的命令前面加上环境变量: PYTHONIOENCODING=utf-8
报错形如: EOF when reading a line
解决办法: 使用非交互模式直接指定任务, 或者切换到 TTY 模式的终端应用.
如果你觉得我们的工作有帮助,请引用以下论文:
@article{liu2024autoglm,
title={Autoglm: Autonomous foundation agents for guis},
author={Liu, Xiao and Qin, Bo and Liang, Dongzhu and Dong, Guang and Lai, Hanyu and Zhang, Hanchen and Zhao, Hanlin and Iong, Iat Long and Sun, Jiadai and Wang, Jiaqi and others},
journal={arXiv preprint arXiv:2411.00820},
year={2024}
}
@article{xu2025mobilerl,
title={MobileRL: Online Agentic Reinforcement Learning for Mobile GUI Agents},
author={Xu, Yifan and Liu, Xiao and Liu, Xinghan and Fu, Jiaqi and Zhang, Hanchen and Jing, Bohao and Zhang, Shudan and Wang, Yuting and Zhao, Wenyi and Dong, Yuxiao},
journal={arXiv preprint arXiv:2509.18119},
year={2025}
}
