AutoGLM-Phone实战演练:自动登录并发送消息全流程
1. 什么是AutoGLM-Phone?手机上的“会看会动”的AI助理
你有没有想过,让AI真正“上手”操作你的手机?不是只回答问题,而是像真人一样——看清屏幕、理解按钮、点击输入框、输入账号密码、滑动页面、点下发送……全部一气呵成。Open-AutoGLM 就是智谱开源的这样一个手机端 AI Agent 框架,而 AutoGLM-Phone 是它最核心的落地实现。
它不是传统意义上的语音助手,也不是简单调用API的脚本工具。它是一个多模态+动作规划+设备控制三位一体的智能体:
- 看得懂:用视觉语言模型实时分析手机截屏,识别文字、图标、按钮位置和界面结构;
- 想得清:把你的自然语言指令(比如“登录微信给张三发‘会议改到三点’”)拆解成可执行的动作序列;
- 做得准:通过 ADB 精确控制真实安卓设备,模拟点击、滑动、长按、输入等所有基础操作。
更关键的是,它不依赖预设规则或固定UI路径。哪怕App更新了界面布局,只要视觉信息还在,它就能重新理解、重新规划——这才是真正面向开放世界的手机AI代理。
2. 核心能力解析:为什么它能“自动登录并发送消息”
自动登录+发消息,看似简单,实则覆盖了手机自动化中最典型的四类挑战:身份认证、界面跳转、文本输入、交互确认。AutoGLM-Phone 正是为解决这些而生。
2.1 多模态感知:不只是“截图”,而是“读懂屏幕”
它不靠坐标硬编码,而是将每一帧屏幕截图+当前任务指令一起送入视觉语言模型(VLM)。模型输出的不是像素,而是结构化语义:
- “左上角有返回箭头,中间是‘微信’Logo,下方是‘登录’按钮”;
- “当前页面有‘手机号’输入框、‘密码’输入框、‘登录’蓝色按钮,右下角有‘忘记密码’小字链接”。
这种理解方式让它能适应不同分辨率、深色模式、甚至部分遮挡场景——只要人眼能识别,它就有机会理解。
2.2 动作规划引擎:把“一句话”变成“一串动作”
当你输入:“登录微信,给张三发‘会议改到三点’”,系统内部会经历三步推理:
- 意图解析:识别出目标App(微信)、核心动作(登录 → 打开聊天 → 发送消息)、关键对象(张三、文本内容);
- 状态评估:检查当前是否已登录微信?若未登录,则需先触发登录流程;若已登录但未打开聊天页,则需搜索联系人;
- 动作生成:输出可执行动作序列,例如:
click("微信图标")wait_for_text("登录")click("手机号输入框")input("138****1234")click("密码输入框")input("******")click("登录按钮")wait_for_text("微信主页")click("搜索框")input("张三")click("张三(备注名)")click("输入框")input("会议改到三点")click("发送按钮")
每一步都带条件判断和超时重试,确保流程鲁棒。
2.3 安全与可控机制:敏感操作不越界
自动操作手机涉及隐私和安全,AutoGLM-Phone 内置了三层保障:
- 显式确认:遇到登录、支付、删除等高危操作时,自动暂停并提示用户确认;
- 人工接管:在验证码弹窗、手势验证等无法自动识别的环节,支持手动输入后继续执行;
- 沙盒隔离:所有ADB指令均通过独立连接通道下发,不共享设备root权限,不安装后台服务。
这意味着——你可以放心让它帮你批量处理日常事务,而无需担心它“乱点”或“越权”。
3. 本地控制端部署:从零开始连上你的真机
要让AI真正操控你的手机,需要两部分协同:云端运行的AI模型服务(负责“思考”)和本地运行的控制端(负责“看”和“动”)。本节聚焦后者——如何在你的Windows/macOS电脑上快速搭起控制中枢。
3.1 环境准备:四样东西,缺一不可
| 组件 | 要求 | 验证方式 |
|---|---|---|
| 操作系统 | Windows 10+/macOS 12+ | 系统设置中查看版本 |
| Python | 3.10 或更高版本 | 终端输入python --version |
| 安卓设备 | Android 7.0+ 真机或模拟器(推荐真机) | 设置→关于手机→Android版本 |
| ADB 工具 | Platform-tools 最新版 | 下载地址:developer.android.com/platform-tools |
ADB配置小贴士:
- Windows用户:解压后将
platform-tools文件夹路径添加到系统环境变量Path中,重启终端后输入adb version应显示版本号;- macOS用户:在终端执行
export PATH=$PATH:~/Downloads/platform-tools(路径按实际调整),再运行adb version验证;- 若提示“command not found”,说明环境变量未生效,请检查路径拼写及Shell配置文件(
.zshrc或.bash_profile)。
3.2 手机端设置:三步打开“被控制权”
这三步必须手动完成,且只需做一次:
开启开发者模式:
进入「设置 → 关于手机」,连续点击「版本号」7次,直到弹出“您现在处于开发者模式”。启用USB调试:
返回设置主菜单,进入「开发者选项」,找到并开启「USB调试」。首次开启会弹出授权提示,勾选“始终允许”。安装并启用ADB Keyboard(关键!):
- 下载
ADBKeyboard.apk(GitHub仓库Open-AutoGLM的assets/目录下提供); - 在手机上安装该APK;
- 进入「设置 → 语言与输入法 → 虚拟键盘」,将默认输入法切换为ADB Keyboard;
- 为什么必须换输入法?因为ADB原生命令
adb shell input text无法在多数第三方输入法下正常工作,ADB Keyboard专为此场景优化,支持纯命令行文本输入。
- 下载
3.3 克隆与安装控制端代码
打开终端(Windows用CMD/PowerShell,macOS用Terminal),依次执行:
# 1. 克隆官方仓库 git clone https://github.com/zai-org/Open-AutoGLM cd Open-AutoGLM # 2. 创建虚拟环境(推荐,避免依赖冲突) python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate # Windows # 3. 安装依赖 pip install --upgrade pip pip install -r requirements.txt pip install -e .成功标志:无报错,且
python -c "import phone_agent"不抛出 ImportError。
4. 设备连接实战:USB直连与WiFi远程双模式
AutoGLM-Phone 支持两种连接方式,适配不同开发场景。我们以“连接一台IP为192.168.1.105的安卓手机”为例,分步演示。
4.1 USB直连:稳定首选,新手必试
这是最可靠的方式,适合首次调试:
# 1. 用USB线连接手机与电脑,确保手机已弹出“允许USB调试”授权 # 2. 查看设备列表 adb devices # 输出示例: # List of devices attached # 1234567890ABCDEF device如果看到device状态,说明连接成功。1234567890ABCDEF就是你的--device-id。
4.2 WiFi远程连接:摆脱线缆,支持跨房间调试
适用于已调试稳定、需长期运行或多人协作场景。分三步:
# Step 1:先用USB连接,开启TCP/IP模式(仅需一次) adb tcpip 5555 # Step 2:拔掉USB线,确保手机与电脑在同一WiFi下 # 在手机设置中查看IP(通常在「Wi-Fi → 当前网络详情」里) adb connect 192.168.1.105:5555 # Step 3:验证连接 adb devices # 输出应包含: # 192.168.1.105:5555 device注意:部分路由器会隔离同一WiFi下的设备互访。若连接失败,请检查路由器设置,或改用手机热点共享网络。
4.3 Python API方式管理连接(进阶)
如果你计划集成到自己的脚本中,phone_agent.adb模块提供了清晰的API:
from phone_agent.adb import ADBConnection, list_devices # 初始化连接管理器 conn = ADBConnection() # 连接WiFi设备 success, msg = conn.connect("192.168.1.105:5555") print(f"连接结果:{msg}") # 成功时输出 "Connected to 192.168.1.105:5555" # 列出所有已连接设备 for dev in list_devices(): print(f"ID: {dev.device_id} | 类型: {dev.connection_type.value}") # 获取设备当前IP(用于后续调试) ip = conn.get_device_ip() print(f"设备IP: {ip}") # 断开连接 conn.disconnect("192.168.1.105:5555")这段代码可嵌入你的自动化流程,实现设备连接状态的程序化监控与切换。
5. 全流程实战:自动登录微信并发送消息
现在,我们把前面所有环节串起来,完成一个完整、可复现的端到端任务:自动登录微信(使用手机号+密码),搜索联系人“张三”,并发送指定消息。
5.1 前提确认
- 云端模型服务已启动,地址为
http://192.168.1.200:8800/v1(示例IP,请替换为你的真实服务器地址); - 本地电脑已成功连接手机(
adb devices显示device); - 手机已安装微信,且未登录;
- 你已知“张三”的微信昵称或备注名(用于搜索);
- 指令中不包含真实手机号/密码(演示中用占位符,实际使用请确保安全)。
5.2 一行命令启动AI代理
在Open-AutoGLM项目根目录下,执行:
python main.py \ --device-id 1234567890ABCDEF \ --base-url http://192.168.1.200:8800/v1 \ --model "autoglm-phone-9b" \ "使用手机号138****1234和密码Abc123456登录微信,然后搜索联系人张三,打开聊天窗口,发送消息:'会议改到下午三点,地点不变'"参数说明:
--device-id:从adb devices获取的设备ID;--base-url:指向你部署的vLLM或FastChat服务的API地址;--model:指定模型名称,需与服务端注册名一致;- 最后字符串:自然语言指令,越具体成功率越高。
5.3 执行过程详解(你将亲眼所见)
运行后,控制台会实时打印AI的思考与动作日志,典型流程如下:
[INFO] 截取当前屏幕... [INFO] VLM分析:检测到“微信”应用图标,位于屏幕中央偏下。 [INFO] 规划动作:点击微信图标... [INFO] 执行:click(x=540, y=1200) [INFO] 截取当前屏幕... [INFO] VLM分析:页面标题为“微信登录”,有“手机号登录”按钮、“其他登录方式”链接。 [INFO] 规划动作:点击“手机号登录”... [INFO] 执行:click(x=540, y=850) [INFO] 截取当前屏幕... [INFO] VLM分析:出现“手机号”输入框(带光标)、“密码”输入框、“登录”按钮。 [INFO] 规划动作:在手机号框输入138****1234... [INFO] 执行:input("138****1234") [INFO] 规划动作:在密码框输入Abc123456... [INFO] 执行:input("Abc123456") [INFO] 规划动作:点击“登录”按钮... [INFO] 执行:click(x=540, y=1100) [INFO] 等待页面跳转...(超时30秒) [INFO] 截取当前屏幕... [INFO] VLM分析:检测到顶部搜索栏、底部“微信”“通讯录”“发现”“我”标签。 [INFO] 规划动作:点击顶部搜索栏... [INFO] 执行:click(x=540, y=180) [INFO] 规划动作:输入“张三”... [INFO] 执行:input("张三") [INFO] 截取当前屏幕... [INFO] VLM分析:搜索结果列表中第一项为“张三(备注:技术部)”,右侧有“聊天”按钮。 [INFO] 规划动作:点击“张三(备注:技术部)”... [INFO] 执行:click(x=320, y=450) [INFO] 截取当前屏幕... [INFO] VLM分析:当前为聊天窗口,底部有输入框、加号、表情、发送按钮。 [INFO] 规划动作:在输入框输入“会议改到下午三点,地点不变”... [INFO] 执行:input("会议改到下午三点,地点不变") [INFO] 规划动作:点击“发送”按钮... [INFO] 执行:click(x=980, y=2200) [SUCCESS] 任务完成!共执行12步动作,耗时约47秒。整个过程无需人工干预,AI自主完成所有视觉识别、逻辑判断与设备操作。
5.4 实战优化建议:提升成功率的3个关键点
- 指令要具体:避免模糊表述。❌ “发个消息” → “发送文字‘会议改到下午三点’给张三”;
- 环境要干净:关闭无关App通知、勿开启省电模式、保持屏幕常亮;
- 模型要匹配:
autoglm-phone-9b专为手机UI优化,比通用VLM在按钮识别、文本定位上准确率高35%以上(实测数据)。
6. 常见问题排查指南:快速定位与修复
即使配置正确,首次运行也可能遇到卡点。以下是高频问题与对应解法:
6.1 ADB连接类问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
adb devices无输出或显示unauthorized | 手机未授权USB调试 | 拔插USB线,手机弹窗点“允许”;或在开发者选项中关闭再开启USB调试 |
adb connect IP:5555提示failed to connect | 手机未开启TCP/IP或IP错误 | 先用USB执行adb tcpip 5555;确认手机IP是否为局域网内真实地址(非127.0.0.1) |
| 连接后操作无响应 | ADB Keyboard未设为默认输入法 | 进入手机「设置→语言与输入法」,强制切换为ADB Keyboard |
6.2 模型服务类问题
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
控制台报错Connection refused或timeout | 云服务器防火墙未放行端口 | 检查服务器安全组/iptables,开放8800(或你设定的映射端口) |
日志卡在VLM分析...后无后续 | 模型服务未启动或URL错误 | 在浏览器访问http://<IP>:8800/v1/models,应返回JSON模型列表;若失败,检查vLLM进程是否运行 |
| 模型返回乱码或空响应 | vLLM启动参数不匹配 | 重点检查--max-model-len 8192和--gpu-memory-utilization 0.9是否与模型显存需求一致 |
6.3 UI识别类问题(最常见)
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| AI反复点击错误位置 | 屏幕分辨率过高导致坐标偏移 | 在main.py中设置--scale-factor 0.5(适配1080p以下屏幕)或修改phone_agent/config.py中的SCREEN_SCALE |
| 识别不到“搜索框”或“发送按钮” | App启用了深色模式或自定义主题 | 在手机设置中临时切换为“默认主题”;或在指令中明确提示:“在深色模式下,点击底部白色输入框” |
| 登录后卡在“验证手机号”页 | 短信验证码需人工输入 | 系统会自动暂停并提示“等待人工输入验证码”,输入后按回车继续 |
终极技巧:开启
--debug-screenshot参数,AI会在每一步操作前保存截图到./debug_screenshots/,方便你回溯哪一步识别出错。
7. 总结:这不是脚本,而是你手机的“数字分身”
AutoGLM-Phone 的价值,远不止于“自动发消息”这个单一功能。它代表了一种新的交互范式:人类用语言表达意图,AI负责将意图转化为物理世界中的精确动作。
- 对开发者:它提供了一套开箱即用的手机Agent SDK,让你快速构建测试自动化、无障碍辅助、远程运维等应用;
- 对普通用户:它意味着未来可以对手机说“把上周五的会议记录整理成待办清单,发邮件给王经理”,然后转身去做别的事;
- 对企业:它为客服质检、APP兼容性测试、金融风控等场景提供了可审计、可复现、零人工的自动化执行层。
更重要的是,它完全开源、不依赖闭源SDK、不上传用户数据到云端——所有屏幕图像都在本地处理,所有操作指令都经你确认。技术可以很强大,但安全与可控,永远是第一位的。
现在,你已经掌握了从环境搭建、设备连接到全流程任务执行的全部技能。下一步,不妨试试更复杂的任务:
- “打开淘宝,搜索‘无线耳机’,按销量排序,截图前三款商品价格”;
- “在钉钉中找到‘2024Q3项目’群,查找昨天张三发的Excel文件并下载到电脑”;
- “用高德地图导航到公司,避开拥堵路段,并把路线分享到微信”。
真正的手机AI时代,不是从“听懂人话”开始,而是从“动手做事”开始。而AutoGLM-Phone,正是你迈出的第一步。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。