前言
最近我亲身体验了Open-AutoGLM在iOS设备上的表现,这个基于AI的iOS自动化工具给我留下了深刻印象。它能够理解自然语言指令,并自动操作手机完成各种任务。在这篇博客中,我将分享完整的安装过程、遇到的问题及解决方案,以及实际体验感受。
环境准备
1. 创建Python虚拟环境
首先需要准备一个干净的Python环境。我使用的是Anaconda:
bash
bash
# 激活conda环境
. /opt/anaconda3/bin/activate && conda activate /opt/anaconda3/envs/AutoGLM
# 验证Python版本
python --version # Python 3.12.8
2. 克隆项目仓库
bash
git clone https://github.com/zai-org/Open-AutoGLM.git
cd Open-AutoGLM
安装过程
步骤1:安装依赖包
bash
# 使用conda环境中的pip安装requirements.txt中的依赖
/opt/anaconda3/envs/AutoGLM/bin/pip install -r requirements.txt
安装过程顺利,主要依赖包括:
- Pillow>=12.0.0(图像处理)
- openai>=2.9.0(OpenAI API客户端)
- 以及其他相关依赖
步骤2:安装Open-AutoGLM包
bash
# 以可编辑模式安装
/opt/anaconda3/envs/AutoGLM/bin/pip install -e .
步骤3:获取特定PR分支
需要获取一个支持iOS PR143:
bash
# 用git命令拉取PR分支
git fetch origin pull/143/head:pr_143
git checkout pr_143
步骤4:安装iOS依赖工具
Open-AutoGLM需要libimobiledevice来连接iOS设备:
bash
# 安装libimobiledevice
brew install libimobiledevice
遇到的问题:Homebrew ARM架构问题 (M1)
javascript
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
解决方案:使用正确的架构命令
bash
arch -arm64 brew install libimobiledevice
步骤5:准备WebDriverAgent
WebDriverAgent是iOS自动化测试的核心组件:
bash
# 克隆WebDriverAgent仓库
git clone https://github.com/appium/WebDriverAgent.git
cd WebDriverAgent
运行与配置
1.运行安装WebDirverAgent在手机上
这里需要使用Xcode打开WebDriverAgent.xcodeproj项目工程,并使用个苹果帐号配置bundle id进行签名设置

新开一个终端, 解锁手机, 运行WebDirverAgent
bash
cd /path/to/WebDriverAgent
xcodebuild -project WebDriverAgent.xcodeproj \
-scheme WebDriverAgentRunner \
-destination 'platform=iOS,name=你的手机名称' \
test
运行成功后,可以看到手机上安装了两个app: IntegrationApp、WebDriverAgentRunner
期间需要确保手机处于解锁状态/输入密码解锁手机
成功后终端上会输出
less
WebDriverAgentRunner-Runner[2339:504073] Built at Dec 14 2025 09:54:57
WebDriverAgentRunner-Runner[2339:504073] ServerURLHere->http://192.168.31.47:8100<-ServerURLHere
2.确保iOS设备已连接并信任电脑:
这里使用usb进行连接
bash
# 检查设备连接
idevice_id -l
# 应该输出设备UDID,如:18513ab3335958d2cc31ec6f0934b37ab996ecd8
另开一个终端,输入以下端口映射命令
yaml
iproxy 8100 8100
3.首次运行尝试
另起一个终端, 输入并运行以下ios.py命令, 这里总共需要有三个终端窗口同时存在,分别运行iproxy、WebDirverAgent和 ios.py
这里使用的是官方提供的Agent接口.所以需要注册账号并获取api-key BigModel替换下面命令中的your-api-key
bash
cd /path/to/Open-AutoGLM
/opt/anaconda3/envs/AutoGLM/bin/python ios.py \
--base-url "https://open.bigmodel.cn/api/paas/v4" \
--model "autoglm-phone" \
--api-key "your-api-key"
4.遇到的问题及解决方案
问题3:python库缺失
vbnet
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed.
Error: requests library not found. Install it: pip install requests
解决方案:
bash
/opt/anaconda3/envs/AutoGLM/bin/pip install socksio requests
实际体验
成功运行
当所有问题解决后,会看到以下提示:

体验
输入指令在小红书中搜索麦克杰克逊, 然后下面是agent思考过程与操作日志与WebDriverAgent的截屏日志

sql
Enter your task: 在小红书中搜索麦克杰克逊
==================================================
💭 思考过程:
--------------------------------------------------
用户想要在小红书中搜索"麦克杰克逊"。当前在系统桌面。
我需要:
1. 启动小红书应用
2. 在小红书中找到搜索功能
3. 输入"麦克杰克逊"进行搜索
首先,我需要启动小红书应用。从截图中可以看到小红书的图标在左上角。
让我使用Launch工具来启动小红书。
--------------------------------------------------
🎯 执行动作:
{
"action": "Launch",
"app": "小红书",
"_metadata": "do"
}
==================================================
==================================================
💭 思考过程:
--------------------------------------------------
好的,小红书已经打开了。我可以看到当前在个人主页的"笔记"标签页。我需要找到搜索功能。
在屏幕顶部右侧,我可以看到一个搜索图标(放大镜图标)。让我点击它来进入搜索界面。
搜索图标的位置大约在右上角,坐标大约是 (932, 153)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
932,
153
],
"_metadata": "do"
}
==================================================
Physically tap on (1097, 391)
==================================================
💭 思考过程:
--------------------------------------------------
好的,搜索界面已经打开了。我可以看到一个搜索输入框,提示文字是"搜索我的笔记/收藏/赞过"。下方显示了一个键盘。
现在我需要:
1. 点击搜索输入框
2. 输入"麦克杰克逊"
3. 点击搜索按钮
让我先点击搜索输入框,然后输入文字。搜索输入框的位置大约在 (448, 153)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
448,
153
],
"_metadata": "do"
}
==================================================
Physically tap on (527, 391)
==================================================
💭 思考过程:
--------------------------------------------------
好的,搜索输入框已经被激活了,我可以看到光标在输入框中。现在我可以直接输入"麦克杰克逊"了。根据指南,Type操作会自动清除现有文本并输入新文本。
--------------------------------------------------
🎯 执行动作:
{
"action": "Type",
"text": "麦克杰克逊",
"_metadata": "do"
}
==================================================
==================================================
💭 思考过程:
--------------------------------------------------
太好了!我已经成功输入了"麦克杰克逊"。我可以看到搜索框中显示了"麦克杰克逊"这几个字。现在我需要点击右侧的"搜索"按钮来执行搜索。
搜索按钮在右下角,蓝色的按钮,位置大约在 (899, 847)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
899,
847
],
"_metadata": "do"
}
==================================================
Physically tap on (1059, 2164)
==================================================
💭 思考过程:
--------------------------------------------------
好的,搜索已经执行了。现在显示的是搜索结果页面。页面显示:
- 顶部有搜索框,显示"麦克杰克逊"
- 有几个标签:笔记·0、收藏·0、赞过·0、浏览记录·0
- 当前在"笔记"标签下
- 中间显示"没找到我的笔记"
这表示在用户的笔记中搜索"麦克杰克逊"没有找到相关内容。但是用户要求的是在小红书中搜索,可能用户是想搜索整个小红书的内容,而不是限制在用户的笔记中。
让我看看是否需要切换到其他标签。我注意到有"浏览记录·0"的标签,可能还有其他选项。但通常在小红书中搜索某个人名,我应该看看是否有相关的内容。
让我尝试点击其他标签看看是否有结果。或者,用户可能想要搜索的是"麦克杰克逊"这个人,而不是"麦克杰克逊"这个词。让我试试看是否有其他选项。
实际上,看起来这个搜索功能是搜索"我的笔记/收藏/赞过"中的内容,而不是搜索整个小红书的内容。如果用户想要搜索整个小红书的内容,可能需要使用不同的搜索方式。
让我尝试返回首页,看看是否有全局搜索功能。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
98,
932
],
"_metadata": "do"
}
==================================================
Physically tap on (115, 2382)
==================================================
💭 思考过程:
--------------------------------------------------
好的,我已经返回到小红书的首页了。我可以看到:
- 顶部有导航栏:关注、发现、深圳
- 右上角有搜索图标(放大镜)
- 底部有导航栏:首页、市集、+、消息、我
现在我需要点击右上角的搜索图标来进行全局搜索。搜索图标的位置大约在 (926, 93)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
926,
93
],
"_metadata": "do"
}
==================================================
Physically tap on (1090, 237)
==================================================
💭 思考过程:
--------------------------------------------------
太好了!现在我进入了全局搜索界面。我可以看到:
- 顶部有搜索框,显示"李嘉诚儿子被插"(这是之前的搜索历史)
- 有"历史记录"部分,显示了一些历史搜索
- 有"猜你想搜"部分,显示了一些推荐搜索
- 有"小红书热点"部分
- 底部有键盘
现在我需要:
1. 点击搜索框
2. 输入"麦克杰克逊"
3. 点击搜索按钮
让我先点击搜索框,然后输入文字。搜索框的位置大约在 (448, 93)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
448,
93
],
"_metadata": "do"
}
==================================================
Physically tap on (527, 237)
==================================================
💭 思考过程:
--------------------------------------------------
好的,搜索框已经被激活了,我可以看到出现了一个弹出菜单,有"粘贴"和"自动填充"选项。现在我可以直接输入"麦克杰克逊"了。
--------------------------------------------------
🎯 执行动作:
{
"action": "Type",
"text": "麦克杰克逊",
"_metadata": "do"
}
==================================================
==================================================
💭 思考过程:
--------------------------------------------------
太好了!我已经成功输入了"麦克杰克逊",并且小红书显示了很多相关的搜索建议:
- 麦克杰克逊舞蹈
- 麦克杰克逊如何变白的
- 麦克杰克逊的经典歌曲
- 麦克杰克逊经典mv
- 麦克杰克逊太空步
- 麦克杰克逊
- 麦克杰克逊视频
- 麦克杰克逊女儿
- 麦克杰克逊超模伴舞
现在我需要点击右侧的"搜索"按钮来执行搜索,或者直接点击其中一个建议。让我点击右上角的"搜索"按钮。搜索按钮的位置大约在 (918, 93)。
--------------------------------------------------
🎯 执行动作:
{
"action": "Tap",
"element": [
918,
93
],
"_metadata": "do"
}
==================================================
Physically tap on (1081, 237)
==================================================
💭 思考过程:
--------------------------------------------------
完美!搜索已经成功执行了。现在我可以看到"麦克杰克逊"的搜索结果页面:
顶部显示:
- 搜索框中显示"麦克杰克逊"
- 有多个标签:全部、用户、商品、图片、地点、群聊
- 当前在"全部"标签下
- 有一个提示:"为您显示'迈克杰克逊'的搜索结果,仍然搜索'麦克杰克逊'"
下方有多个分类标签:综合、经典歌曲、僵尸mv、舞蹈、白藏风、变白
搜索结果显示了多个与麦克杰克逊相关的内容:
1. "Michael Jackson 🌟 Dangerous 疯狂的舞蹈..." - 音符旅人,4391赞
2. "#迈克尔杰克逊 与维密超模同台飙歌比舞,创造了音..." - MJ群社区,8309赞
3. "迈克尔杰克逊 经典45°太空步" - 显示了一个视频
4. 右侧还有一个视频内容
任务已经成功完成!我已经在小红书中搜索了"麦克杰克逊",并且显示了相关的搜索结果。
--------------------------------------------------
🎯 执行动作:
{
"_metadata": "finish",
"message": "任务完成!我已经成功在小红书中搜索\"麦克杰克逊\"。搜索结果显示了多个相关内容,包括:\n\n1. 麦克杰克逊的舞蹈视频,如\"Dangerous 疯狂的舞蹈\"\n2. 与维密超模同台表演的内容\n3. 麦克杰克逊的经典45°太空步视频\n4. 还有其他相关的经典歌曲、MV、舞蹈等分类标签\n\n您现在可以浏览这些搜索结果,点击任何感兴趣的视频或内容查看详情。"
}
==================================================
🎉 ================================================
✅ 任务完成: 任务完成!我已经成功在小红书中搜索"麦克杰克逊"。搜索结果显示了多个相关内容,包括:
1. 麦克杰克逊的舞蹈视频,如"Dangerous 疯狂的舞蹈"
2. 与维密超模同台表演的内容
3. 麦克杰克逊的经典45°太空步视频
4. 还有其他相关的经典歌曲、MV、舞蹈等分类标签
您现在可以浏览这些搜索结果,点击任何感兴趣的视频或内容查看详情。
==================================================
Result: 任务完成!我已经成功在小红书中搜索"麦克杰克逊"。搜索结果显示了多个相关内容,包括:
1. 麦克杰克逊的舞蹈视频,如"Dangerous 疯狂的舞蹈"
2. 与维密超模同台表演的内容
3. 麦克杰克逊的经典45°太空步视频
4. 还有其他相关的经典歌曲、MV、舞蹈等分类标签
您现在可以浏览这些搜索结果,点击任何感兴趣的视频或内容查看详情。
总结
通过上述日志分析,它执行这个任务的过程:

- 首先它进行拆解任务: 启动小红书、找到搜索功能、输入搜索内容
- 由于之前有启动过小红书,并处于个人中心页面,所以它先是在个人中心进行搜索
- 然后发现不正确,重新定位到首页.
- 在首页的搜索框中进行搜索,并执行了搜索操作
- 最后根据搜索结果截图确认了任务完成
在iPhone 15 Pro上能基本无误的完成操作指令, 从日志可以看出,它的点击操作是通过点击坐标位置实现的,在主流手机上还算准确的. 但是在使用非主流手机(iPhone 6s)时, 它返回的坐标偏移较大, 会陷入点击->截屏->无效纠正->点击的死循环. 在github上也有比较多的点击不准确的issue
未来可能的应用场景:
- 自然语言自动化测试 - 直接通过产品需要文档自行拆解任务,进行自动化测试,减少编写自动化测试代码
- 外挂,游戏外挂,降低外挂制作的门槛
- app智能助手,提升各个app内的Ai助手能力. app内实现一套基于坐标点击的模拟框架代替WebDriverAgent功能
小实验: 提升智障Siri能力, 让Siri接入这套能力: 使用Open-AutoGLM给Siri装上眼睛和双手