用自然语言控制手机?Open-AutoGLM真实体验分享

本文基于智谱AI开源项目 Open-AutoGLM 的实际部署与使用过程,记录从零开始到成功让AI自动操作手机的完整体验。不讲空泛原理,只说真实踩坑、有效技巧和可复现结果。

1. 第一次让AI替我点开抖音:我的真实上手过程

说实话,第一次运行 python main.py "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!" 前,我心里是打鼓的——这真能行?不是又一个“演示视频很丝滑,本地跑起来全报错”的项目?

但三小时后,我看着手机屏幕自动亮起、解锁、打开抖音、输入ID、点击搜索、进入主页、悬停在“关注”按钮上……那一刻,我截图发了朋友圈,配文:“今天起,我的手指退休了。”

这不是玄学,是 Open-AutoGLM —— 智谱开源的手机端 AI Agent 框架,把“用说话控制手机”这件事,做成了普通人也能搭起来、跑通、真正用上的工具。

它不依赖Root,不强制云服务,不卖SaaS订阅,核心逻辑就一句话:你说话,它看屏,它思考,它动手。

下面,我就用自己从连不上ADB到让AI帮我订外卖的全过程,带你走一遍这条“自然语言操控手机”的真实路径。

2. 环境准备:比想象中简单,但有3个关键细节不能错

别被“多模态”“视觉语言模型”这些词吓住。Open-AutoGLM 的控制端(也就是你电脑上跑的部分)其实非常轻量,真正烧显存的是云端的模型服务——而你完全可以用别人已部署好的API,先跳过本地推理这个最重的环节。

2.1 我的硬件配置(实测可用)

  • 本地电脑:MacBook Pro M1(16GB内存),系统 macOS Sonoma
  • 安卓手机:小米12(Android 14),已开启开发者模式
  • 网络:手机和电脑在同一WiFi下(USB连接也行,但我全程用WiFi,更接近真实场景)

提示:不需要NVIDIA显卡,不需要CUDA环境,Python装对版本就行。

2.2 安装步骤(精简版,跳过所有冗余操作)

第一步:装好ADB(5分钟搞定)

Mac用户直接终端执行:

# 下载platform-tools(约30MB)
curl -O https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
unzip platform-tools-latest-darwin.zip

# 加入PATH(永久生效)
echo 'export PATH=$PATH:$(pwd)/platform-tools' >> ~/.zshrc
source ~/.zshrc

# 验证
adb version  # 应输出 Android Debug Bridge version 34.x.x

Windows用户请按文档里“环境变量”四步走,重点是:解压路径不要含中文和空格,否则后续90%的报错都源于此。

第二步:手机设置(3个动作,缺一不可)
  1. 开启开发者模式:设置 → 关于手机 → 连续点击“版本号”7次 → 输入锁屏密码 → 出现“您现在处于开发者模式”
  2. 开启USB调试:设置 → 更多设置 → 开发者选项 → 打开“USB调试”(务必勾选“USB调试(安全设置)”,否则无法截图)
  3. 安装ADB Keyboard
    • GitHub Release页 下载最新 ADBKeyboard.apk
    • 手机安装 → 设置 → 语言与输入法 → 当前键盘 → 切换为“ADB Keyboard”

关键细节:很多用户卡在“中文输不出”,90%是因为没切换输入法;剩下10%是APK版本太老,换成v1.3+即可。

第三步:克隆代码 & 装依赖(无坑版)
git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM

# 创建干净虚拟环境(强烈推荐)
python3 -m venv venv
source venv/bin/activate  # Mac/Linux;Windows用 venv\Scripts\activate

pip install --upgrade pip
pip install -r requirements.txt
pip install -e .

验证是否成功:

python -c "from phone_agent.adb import list_devices; print(list_devices())"

如果输出空列表,说明ADB未识别设备;如果报错ModuleNotFoundError,说明-e安装失败,重试pip install -e .

3. 连接手机:WiFi方式实测比USB更稳

官方文档写了USB和WiFi两种,但我实测发现:WiFi连接反而更可靠。原因很简单——USB线松动、驱动冲突、手机休眠断连,都是真实痛点;而同一局域网下的ADB TCP/IP连接,只要WiFi不断,就能稳定维持数小时。

3.1 一次配好,永久可用的WiFi连接法

  1. 首次用USB线连接手机(仅需这一次)
    adb devices  # 确认看到设备ID,如 1234567890abcdef
    adb tcpip 5555  # 将手机ADB切到TCP模式
    
  2. 拔掉USB线,查手机IP
    设置 → WLAN → 点击当前WiFi → 查看“IP地址”(如 192.168.31.123
  3. 电脑连接该IP
    adb connect 192.168.31.123:5555
    # 输出:connected to 192.168.31.123:5555
    adb devices  # 应显示 192.168.31.123:5555 device
    

成功标志:adb shell getprop ro.build.version.release 能返回Android版本号。
常见失败:防火墙拦截(Mac系统偏好设置→隐私与安全性→防火墙→关闭或放行adb)、路由器AP隔离(关闭即可)。

3.2 测试截图功能:这是整个流程的“眼睛”

Agent要操作手机,第一步必须看清屏幕。我们手动验证:

adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png ./test_screen.png

打开 test_screen.png,如果是一张清晰截图,恭喜,你的“眼睛”已就位;如果是纯黑图,大概率是进入了支付/密码等敏感页面(系统级屏蔽),换到桌面或微信聊天页再试。

4. 调用云端模型:不用自己搭vLLM,也能跑起来

这才是新手最关心的问题:我需要买A100服务器吗?

答案是:完全不需要。Open-AutoGLM 的设计默认对接 OpenAI 兼容 API,你可以:

  • 使用智谱官方提供的免费测试API(本文实测所用)
  • 使用他人部署的公开API(社区常分享)
  • 后期再自行部署vLLM(进阶需求)

4.1 我用的免费API配置(亲测可用)

访问 智谱AI开放平台 注册账号 → 进入“API Key管理” → 创建新Key → 复制Key。

然后运行命令:

python main.py \
  --device-id 192.168.31.123:5555 \
  --base-url https://open.bigmodel.cn/api/llm/v1 \
  --model glm-4v-plus \
  --api-key YOUR_API_KEY_HERE \
  "打开小红书,搜索'北京咖啡探店',保存前3篇笔记封面"

注意:这里用的是 glm-4v-plus(智谱最新多模态模型),不是文档里的 autoglm-phone-9b。后者需自建服务,而前者官方已开放,效果更稳、响应更快。

4.2 第一次运行时,我在日志里看到了什么?

启动后,终端会逐行打印:

[INFO] Connected to device: 192.168.31.123:5555
[INFO] Taking screenshot...
[INFO] Current app: System Home
[INFO] Sending multimodal request (image + text)...
<think>当前在手机桌面,需要启动小红书应用。查找小红书图标并点击。</think>
<answer>do(action="Tap", element=[450, 720])</answer>
[INFO] Executing Tap at (450, 720)
[INFO] Waiting for app to launch...

看到 <think><answer> 交替出现,你就知道:AI真的在“看”、在“想”、在“动”。

5. 实战效果:5个真实任务,成功率与耗时实录

我连续测试了10个日常任务,以下是5个典型场景的原始记录(非剪辑,非提词优化):

任务描述 是否成功 耗时 关键观察
“打开微信,找到‘李四’,发消息‘会议改到下午3点’” 28秒 自动识别通讯录,精准点击头像,输入框光标定位准确
“打开美团,搜‘海底捞’,选第1家,点‘立即预订’” 41秒 搜索结果页滚动加载,AI等待元素出现后才点击,不抢跑
“打开淘宝,搜‘无线耳机’,把第2个商品加入购物车” 53秒 商品图加载慢时,AI主动执行Wait指令,不报错
“打开知乎,搜‘大模型入门’,点开第1篇文章,下滑3次” 36秒 滑动坐标计算合理,未误触广告位
“打开支付宝,点‘扫一扫’,扫桌面上的二维码” 黑屏截图 → 触发人工接管:“请手动完成扫码”

成功率:4/5(80%)
平均单步耗时:2.3秒(从截图到动作执行)
最大步数:7步(淘宝加购任务)

真实体验总结:

  • 它不怕APP更新:界面微调不影响识别(靠视觉理解,非UI控件ID)
  • 它会“等”:遇到加载动画、弹窗、网络延迟,自动插入Wait,不狂点
  • 它懂“常识”:比如“打开小红书”=先找图标,“搜索美食”=先点放大镜图标再输字
  • 它守边界:支付、扫码、人脸识别等场景,绝不越界,立刻交还给你

6. 常见问题与我的解决方案(非官方FAQ,纯经验)

这些不是文档里写的,是我边踩坑边记下的“血泪清单”:

6.1 问题:运行时报错 ConnectionRefusedError: [Errno 61] Connection refused

原因--base-url 指向的API服务不可达。
我的解法

  • 检查URL末尾是否有 /v1(必须有)
  • 在浏览器打开 https://open.bigmodel.cn/api/llm/v1,看是否返回401(说明URL正确但key错)或404(URL错)
  • 用curl测试:curl -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" -d '{"model":"glm-4v-plus","messages":[{"role":"user","content":"hi"}]}' https://open.bigmodel.cn/api/llm/v1/chat/completions

6.2 问题:AI一直点错位置,比如该点搜索框却点了返回键

原因:屏幕分辨率高(如2K屏),归一化坐标映射失真。
我的解法

  • phone_agent/config/prompts_zh.py 中,将坐标范围从 0-999 改为 0-1999(适配更高清屏)
  • 或临时降分辨率:手机设置 → 显示 → 屏幕分辨率 → 调至“高清”而非“超清”

6.3 问题:中文输入全是乱码或空格

原因:ADB Keyboard未设为默认,或APK版本不兼容Android 14。
我的解法

  • 卸载旧版,安装 ADBKeyboard v1.4
  • 手动设置:设置 → 语言与输入法 → 虚拟键盘 → ADB Keyboard → 开启
  • 终端执行:adb shell ime set com.android.adbkeyboard/.AdbIME

6.4 问题:任务执行到一半卡住,日志停在 Taking screenshot...

原因:手机息屏或锁屏。
我的解法

  • 设置 → 显示 → 睡眠 → 设为“永不”
  • 或执行:adb shell settings put global stay_on_while_plugged_in 3(充电时保持唤醒)

6.5 问题:想让它记住“我常用快递单号”,下次自动填

现状:Open-AutoGLM 默认无跨任务记忆。
我的变通方案

  • 写个简单脚本,把每次任务结果存入本地JSON:
    # save_result.py
    import json
    result = {"task": "查快递", "tracking_no": "SF123456789CN"}
    with open("memory.json", "w") as f:
        json.dump(result, f)
    
  • 下次任务前,用Python读取并拼入指令:
    "打开菜鸟裹裹,输入单号${tracking_no}查询物流"

7. 它能做什么?—— 从“能用”到“好用”的3个进阶玩法

跑通基础任务只是开始。结合我的使用习惯,提炼出3个真正提升效率的用法:

7.1 批量处理:1条指令,干完10件事

比如运营同学每天要检查10个竞品APP的首页Banner。传统做法:手动点开→截图→保存→命名。
用Open-AutoGLM,写个循环脚本:

apps = ["小红书", "得物", "闲鱼", "京东", "拼多多"]
for app in apps:
    cmd = f'python main.py --device-id 192.168.31.123:5555 --base-url ... "打开{app},截取首页顶部横幅,保存为{app}_banner.png"'
    os.system(cmd)

10分钟,10张图,自动按名存好。这才是自动化该有的样子。

7.2 与IFTTT联动:语音指令触发手机操作

家里有小爱同学?用IFTTT的Webhook功能:

  • 小爱说“帮我点外卖” → IFTTT触发Webhook → Webhook调用你的Python脚本 → 脚本执行Open-AutoGLM命令
    从此,动口不动手,真正解放双手。

7.3 教AI“学新APP”:不用改代码,只改提示词

某天我想让它操作一个新APP“飞书会议”。
我不用碰一行代码,只需在 prompts_zh.py 里加一句:

# 在SYSTEM_PROMPT末尾追加
- 飞书会议:主界面有“快速会议”按钮,点击后进入会议列表

再告诉AI:“打开飞书会议,创建快速会议”,它就能照做。
这就是Prompt Engineering的力量——用语言教AI,而不是用代码训模型

8. 它不是万能的:坦诚说说它的边界在哪里

作为真实使用者,我必须说清楚它的局限,避免你产生不切实际的期待:

  • 不擅长“模糊指令”:说“帮我处理一下待办事项”会失败;必须具体,如“打开滴答清单,把‘买牛奶’标记为完成”
  • 不处理动态验证码:短信验证码、图形验证码、滑块验证,一律交由人工接管
  • 不支持iOS:目前仅限Android,iOS需WebDriverAgent+XCUITest,架构完全不同
  • 不替代专业UI测试:它适合高频重复操作,但复杂业务流(如电商下单全流程)仍需人工校验
  • 不保证100%成功率:网络抖动、APP闪退、元素加载异常时,可能中断,需加重试逻辑

但它在80%的日常手机操作场景里,已经足够可靠——而这,正是技术落地最珍贵的价值。

9. 总结:为什么值得你花2小时试试它?

回到最初那个问题:用自然语言控制手机,是噱头还是刚需?

我的答案是:它是数字生活里,第一块真正可用的“智能积木”

  • 它不绑架你换手机、不强制你学编程、不让你充会员;
  • 它把前沿的多模态AI,封装成一条命令、一个API、一次点击;
  • 它证明了一件事:当AI真正“看见”屏幕、“理解”意图、“动手”执行,人机协作的形态,就真的变了。

如果你也厌倦了每天重复点开APP、复制粘贴、来回切换……不妨就今晚,花两小时,按本文步骤,亲手让AI替你点开第一个APP。

那声“叮”的通知音响起时,你会听见未来正在敲门。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐