目录
- 一、安装
-
- android环境准备
- 部署准备工作
-
- [1. 安装依赖](#1. 安装依赖)
- [2. 配置 ADB 或 HDC](#2. 配置 ADB 或 HDC)
-
- [对于 Android 设备](#对于 Android 设备)
- [3. 启动模型服务](#3. 启动模型服务)
-
- [选项 A: 使用第三方模型服务](#选项 A: 使用第三方模型服务)
- [选项 B: 自行部署模型](#选项 B: 自行部署模型)
- 二、运行
一、安装
登入官网:https://github.com/zai-org/Open-AutoGLM
android环境准备
-
安装 Android Studio:https://developer.android.com/studio?hl=zh-cn
官网暂时上不去,根据这个下载platform:https://blog.csdn.net/gitblog_06766/article/details/147694542
或者brew install android-platform-tools

-
在 Terminal 或者任何命令行工具里
#假设解压后的目录为 ~/Downloads/platform-tools。如果不是请自行调整命令。
export PATH=${PATH}:~/Downloads/platform-tools -
Android 7.0+ 或 HarmonyOS 设备,并启用
开发者模式和USB调试
- 开发者模式启用:通常启用方法是,找到 设置-关于手机-版本号 然后连续快速点击 10 次左右,直到弹出弹窗显示"开发者模式已启用"。不同手机会有些许差别,如果找不到,可以上网搜索一下教程。
- USB 调试启用:启用开发者模式之后,会出现 设置-开发者选项-USB 调试,勾选启用
- 部分机型在设置开发者选项以后, 可能需要重启设备才能生效. 可以测试一下: 将手机用USB数据线连接到电脑后, adb devices 查看是否有设备信息, 如果没有说明连接失败.
- 安装 ADB Keyboard(仅 Android 设备需要,用于文本输入)
下载 安装包 并在对应的安卓设备中进行安装。
注意,安装完成后还需要到设置-输入法或者设置-键盘列表中启用ADB Keyboard才能生效(或使用命令adb shell ime enable com.android.adbkeyboard/.AdbIMEHow-to-use)
部署准备工作
1. 安装依赖
bash
pip install -r requirements.txt
pip install -e .
2. 配置 ADB 或 HDC
对于 Android 设备
确认 USB数据线具有数据传输功能, 而不是仅有充电功能
确保已安装 ADB 并使用 USB数据线 连接设备:
bash
# 检查已连接的设备
adb devices
# 输出结果应显示你的设备,如:
# List of devices attached
# emulator-5554 device
3. 启动模型服务
你可以选择自行部署模型服务,或使用第三方模型服务商。
选项 A: 使用第三方模型服务
如果你不想自行部署模型,可以使用以下已部署我们模型的第三方服务:
1. 智谱 BigModel
- 文档: https://docs.bigmodel.cn/cn/api/introduction
--base-url:https://open.bigmodel.cn/api/paas/v4--model:autoglm-phone--apikey: 在智谱平台申请你的 API Key
2. ModelScope(魔搭社区)
- 文档: https://modelscope.cn/models/ZhipuAI/AutoGLM-Phone-9B
--base-url:https://api-inference.modelscope.cn/v1--model:ZhipuAI/AutoGLM-Phone-9B--apikey: 在 ModelScope 平台申请你的 API Key
使用第三方服务的示例:
bash
# 使用智谱 BigModel
python main.py --base-url https://open.bigmodel.cn/api/paas/v4 --model "autoglm-phone" --apikey "your-bigmodel-api-key" "打开美团搜索附近的火锅店"
# 使用 ModelScope
python main.py --base-url https://api-inference.modelscope.cn/v1 --model "ZhipuAI/AutoGLM-Phone-9B" --apikey "your-modelscope-api-key" "打开美团搜索附近的火锅店"
选项 B: 自行部署模型
如果你希望在本地或自己的服务器上部署模型:
- 按照
requirements.txt中For Model Deployment章节自行安装推理引擎框架。
对于SGLang, 除了使用pip安装,你也可以使用官方docker:
shelldocker pull lmsysorg/sglang:v0.5.6.post1进入容器,执行
pip install nvidia-cudnn-cu12==9.16.0.29
对于 vLLM,除了使用pip 安装,你也可以使用官方docker:
shelldocker pull vllm/vllm-openai:v0.12.0进入容器,执行
pip install -U transformers --pre
注意: 上述步骤出现的关于 transformers 的依赖冲突可以忽略。
- 在对应容器或者实体机中(非容器安装)下载模型,通过 SGlang / vLLM 启动,得到 OpenAI 格式服务。这里提供一个 vLLM部署方案,请严格遵循我们提供的启动参数:
- vLLM:
shell
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
- SGLang:
shell
python3 -m sglang.launch_server --model-path zai-org/AutoGLM-Phone-9B \
--served-model-name autoglm-phone-9b \
--context-length 25480 \
--mm-enable-dp-encoder \
--mm-process-config '{"image":{"max_pixels":5000000}}' \
--port 8000
-
该模型结构与
GLM-4.1V-9B-Thinking相同, 关于模型部署的详细内容,你也以查看 GLM-V获取模型部署和使用指南。
-
运行成功后,将可以通过
http://localhost:8000/v1访问模型服务。 如果您在远程服务器部署模型, 使用该服务器的IP访问模型.
二、运行

问题1:怎么截图?
这是官方文档中agent的可用操作,并没有截图,或者是同时按两个按钮的操作。
| 操作 | 描述 |
|---|---|
Launch |
启动应用 |
Tap |
点击指定坐标 |
Type |
输入文本 |
Swipe |
滑动屏幕 |
Back |
返回上一页 |
Home |
返回桌面 |
Long Press |
长按 |
Double Tap |
双击 |
Wait |
等待页面加载 |
Take_over |
请求人工接管(登录/验证码等) |
1. ADB 截图函数
文件 : phone_agent/adb/device.py
python
def save_screenshot(filename: str | None = None, device_id: str | None = None) -> str:
"""
Save a screenshot to the device's gallery.
Args:
filename: Optional filename (without extension). If None, uses timestamp.
device_id: Optional ADB device ID.
Returns:
The path where the screenshot was saved.
"""
import datetime
adb_prefix = _get_adb_prefix(device_id)
if filename is None:
filename = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
save_path = f"/sdcard/Pictures/AutoGLM/{filename}.png"
# 创建目录
subprocess.run(
adb_prefix + ["shell", "mkdir", "-p", "/sdcard/Pictures/AutoGLM"],
capture_output=True,
)
# 截图
subprocess.run(
adb_prefix + ["shell", "screencap", "-p", save_path],
capture_output=True,
)
# 注册到媒体库(让相册能显示)
media_path = save_path.replace("/sdcard/", "/storage/emulated/0/")
subprocess.run(
adb_prefix + ["shell", "content", "insert",
"--uri", "content://media/external/images/media",
"--bind", f"_data:s:{media_path}",
"--bind", "mime_type:s:image/png"],
capture_output=True,
)
return save_path
2. 模块导出
文件 : phone_agent/adb/__init__.py
python
from phone_agent.adb.device import (
...
save_screenshot,
...
)
__all__ = [
...
"save_screenshot",
...
]
3. 工厂方法
文件 : phone_agent/device_factory.py
python
def save_screenshot(self, filename: str | None = None, device_id: str | None = None) -> str:
"""Save screenshot to device gallery."""
return self.module.save_screenshot(filename, device_id)
4. Action 处理器
文件 : phone_agent/actions/handler.py
python
# 在 _get_handler 方法中注册
handlers = {
...
"Screenshot": self._handle_screenshot,
}
# 处理方法
def _handle_screenshot(self, action: dict, width: int, height: int) -> ActionResult:
"""Handle screenshot save action."""
filename = action.get("filename")
device_factory = get_device_factory()
save_path = device_factory.save_screenshot(filename, self.device_id)
return ActionResult(True, False, message=f"Screenshot saved: {save_path}")
5. Prompt 配置
文件 : phone_agent/config/prompts_zh.py
操作指令:
- do(action="Screenshot", filename="xxx")
Screenshot是直接截取当前屏幕并保存到手机相册的操作。这是一个系统级命令,无需在界面上寻找截图按钮。
【截图示例】用户说"搜索火锅店并截图2家",正确做法是:
1. 搜索火锅店
2. 点击第一家店 → do(action="Screenshot", filename="火锅店1")
3. 返回 → 点击第二家店 → do(action="Screenshot", filename="火锅店2")
4. finish
错误做法:只看屏幕不执行Screenshot就finish
规则:
1. 【重要】当用户指令中包含"截图"、"截屏"、"保存屏幕"等词时,你必须执行 do(action="Screenshot") 操作。
系统自动发送给你的屏幕图片仅供你分析使用,不会保存到手机相册。只有执行Screenshot操作才能真正保存截图。
6. 自动截图保底逻辑
文件 : phone_agent/agent.py
python
def run(self, task: str) -> str:
self._screenshot_taken = False # 追踪是否执行过截图
# ... 执行任务 ...
if result.finished:
self._auto_screenshot_if_needed(task) # 任务结束时检查
return result.message
def _auto_screenshot_if_needed(self, task: str) -> None:
"""如果用户要求截图但模型没执行,自动补一个"""
screenshot_keywords = ["截图", "截屏", "保存屏幕", "screenshot"]
if any(kw in task.lower() for kw in screenshot_keywords) and not self._screenshot_taken:
device_factory = get_device_factory()
save_path = device_factory.save_screenshot(device_id=self.agent_config.device_id)
print(f"📸 自动截图已保存: {save_path}")
def _execute_step(self, ...):
# ... 执行 action ...
# 追踪 Screenshot action 是否被执行
if action.get("action") == "Screenshot":
self._screenshot_taken = True
使用方式
AI 主动截图
bash
python main.py --base-url https://open.bigmodel.cn/api/paas/v4 \
--model "autoglm-phone" \
--apikey "your-key" \
"打开美团搜索附近的火锅店并截图2家"
AI 会在找到每家店时执行:
do(action="Screenshot", filename="火锅店1")
do(action="Screenshot", filename="火锅店2")
截图保存位置
截图保存到手机的:
/sdcard/Pictures/AutoGLM/
即 /storage/emulated/0/Pictures/AutoGLM/,会在相册中显示为 "AutoGLM" 文件夹。
调用链路
用户指令 "截图xxx"
↓
AI 模型输出 do(action="Screenshot", filename="xxx")
↓
handler.py - parse_action() 解析
↓
handler.py - _handle_screenshot() 处理
↓
device_factory.save_screenshot() 转发
↓
adb/device.py - save_screenshot() 执行 ADB 命令
↓
截图保存到 /sdcard/Pictures/AutoGLM/xxx.png
↓
注册到 MediaStore(相册可见)