ARTICLE · 1150410
动动嘴就能操控手机?这个开源AI助手让我彻底解放双手
你有没有算过,每天在手机上重复点击了多少次?
早上闹钟响了,解锁、打开天气App、看一眼今天要不要带伞;中午点外卖,打开App、搜索、比价、下单;晚上想追剧,又得翻半天找到那个视频App……这些操作单次不过几秒钟,但一天累积下来,可能比你喝咖啡的时间还长。
如果我告诉你,现在只需要对着电脑说一句“帮我打开设置把WiFi关了”,手机就真的自己动起来了——你信吗?
今天要聊的这个开源项目 PhoneDriver,就能做到这件事。它把视觉大模型和安卓调试工具捏在了一起,让AI帮你“看”手机屏幕,然后帮你“动手”操作。

项目亮点
🔹 视觉驱动自动化:基于Qwen3-VL视觉语言模型,AI能真正“看懂”手机屏幕上有什么按钮、什么输入框,而不是靠写死的坐标去点击。屏幕布局变了?App更新了?都不影响。
🔹 ADB无缝集成:通过安卓调试桥直接控制设备,截屏、点击、滑动、输入文字,一条龙搞定。不需要root,不需要装额外的App。
🔹 自然语言下任务:你只需要用大白话说“打开相机”或者“搜索一下明天北京的天气”,剩下的交给AI去规划执行步骤。
🔹 内置Web界面:自带Gradio可视化面板,实时显示手机截图和执行日志,看着AI一步步操作,心里踏实。
🔹 多模型可选:支持Qwen3-VL的4B、8B、30B等多个版本,显卡不够也能跑,24GB显存就能流畅运行8B模型。

解决什么痛点?
先讲个我自己的故事。
上个月我妈给我打电话,说手机里不知道怎么多了一堆App,桌面乱得找不到微信。我在电话里指挥她:“长按那个图标……不对不对,是长按……然后拖到上面那个垃圾桶……”折腾了二十分钟,她还是在电话那头一脸茫然。
那一刻我就在想,如果有个工具能让我远程“接管”她的手机屏幕,或者直接让AI根据我的描述去操作,是不是就不用这么费劲了?
PhoneDriver解决的正是这类问题。它把“人操作手机”这件事,变成了“人告诉AI要做什么,AI去操作手机”。对于下面这些场景特别有用:
- 重复性任务:
每天打卡、定时签到、批量给文件重命名 - 远程协助:
帮不会用智能手机的长辈完成复杂设置 - 自动化测试:
开发者需要频繁验证App在不同界面的表现 - 无障碍操作:
行动不便的用户可以通过语音指令控制手机
说白了,它就像给你的手机配了一个“数字替身”,你动嘴,它动手。

手把手教程
好了,说了这么多,咱们直接上手试试。
➤ 第一步:环境准备
首先你得有一台安卓手机,并且开启USB调试模式。具体操作是:设置 → 关于手机 → 连续点击“版本号”七次,然后回到设置 → 开发者选项 → 打开“USB调试”。
然后用数据线把手机连到电脑上,安装ADB工具:
Linux/Ubuntu用户直接:
sudo apt updatesudo apt install adb
Mac用户可以用Homebrew:
brew install android-platform-tools
装好后在终端输入:
adb devices
如果看到设备列表里出现了你的手机,恭喜你,第一步搞定。
➤ 第二步:安装PhoneDriver
把项目克隆到本地,然后创建虚拟环境:
git clone https://github.com/OminousIndustries/PhoneDriver.gitcd PhoneDriverpython -m venv phonedriversource phonedriver/bin/activate
接下来安装依赖。注意这里transformers需要从源码安装,因为Qwen3-VL的支持还在更新中:
pip install git+https://github.com/huggingface/transformerspip install pillow gradio qwen_vl_utils requests
➤ 第三步:配置模型和分辨率
PhoneDriver默认用的是Qwen3-VL-8B模型,如果你显卡显存比较紧张,可以换成4B版本。打开qwen_vl_agent.py,找到这一行:
model_name: str = "Qwen/Qwen3-VL-8B-Instruct"
改成:
model_name: str = "Qwen/Qwen3-VL-4B-Instruct"
屏幕分辨率也需要确认一下,在终端输入:
adb shell wm size
你会看到类似“Physical size: 1080x2340”的输出,把这个数值记下来,和config.json里的screen_width、screen_height对应上就行。
➤ 第四步:启动Web界面
一切就绪后,运行:
python ui.py
然后在浏览器打开 http://localhost:7860,你会看到一个清爽的界面。左侧是手机实时截图,右侧是任务输入框和日志输出。
在输入框里敲入“打开Chrome浏览器”,点击运行,你就能看到AI开始工作了:它先截屏,然后分析屏幕上哪个图标是Chrome,接着计算出点击坐标,通过ADB发送点击指令,再截屏确认……整个过程行云流水。
➤ 第五步:命令行玩法
如果你更喜欢在终端里操作,也可以直接用命令行模式:
python phone_agent.py "打开设置并开启WiFi"
AI会自动拆解步骤:先找到设置图标、点击进入、滚动找到WiFi选项、点击开关。每一步都会截图确认,如果点错了还会自动重试。

同类项目对比
市面上做安卓自动化的工具不少,PhoneDriver的独特之处在哪?咱们拉个表格看看:
| 核心原理 | ||||
| 任务定义 | ||||
| 适应界面变化 | ||||
| 学习成本 | ||||
| 硬件要求 | ||||
| 生态成熟度 |
简单来说,Appium和Airtest更像是给专业测试人员用的“手术刀”,精准但需要专业知识;PhoneDriver则更像是一个“智能管家”,你告诉它要做什么,它自己去想办法。当然,代价是需要一块还不错的显卡来跑视觉模型。

一些实用小技巧
用了一段时间后,我总结了几个让PhoneDriver更好用的经验:
技巧一:任务描述越具体越好。与其说“帮我点外卖”,不如说“打开美团,搜索附近的肯德基”。AI虽然聪明,但太模糊的指令它也抓瞎。
技巧二:step_delay别设太小。默认1.5秒是有道理的,有些App加载慢,你给AI的反应时间不够,它截到的图还是上一页,自然就点错了。网络不好的时候可以调到2-3秒。
技巧三:开启visual_debug。在config.json里把enable_visual_debug设为true,AI会在截图上标注它识别到的元素和点击位置,方便你排查问题。
技巧四:显存不够就用4B模型。实测4B模型在大多数日常任务上表现已经很不错了,没必要非得追求30B。省下来的显存还能干点别的。
背后的技术原理
可能有朋友好奇,AI是怎么“看懂”手机屏幕的?
简单来说分三步:首先通过ADB截取当前屏幕画面,然后把这张图连同你的任务描述一起发给Qwen3-VL模型。模型会分析图像内容,识别出“这是一个搜索框”“那是一个返回按钮”,然后输出一个结构化的动作指令,比如“点击坐标(540, 1200)”。PhoneDriver拿到指令后,通过ADB的input tap命令执行点击,接着截下一张图,循环往复直到任务完成。
这就像你教一个新人用手机:你先告诉他“打开微信”,他看了一眼屏幕找到绿色图标,点进去,你再告诉他下一步。只不过PhoneDriver的这个“新人”,眼神特别好,而且不知疲倦。

写在最后
PhoneDriver目前还是个比较年轻的项目,但它的思路很有意思:把大模型的视觉理解能力,直接转化成对物理设备的控制能力。这不仅仅是“自动化”那么简单,而是在探索AI如何与真实世界交互。
当然,它也不是万能的。复杂的滑动操作、需要精确手势的游戏、涉及支付的敏感操作,目前还是人工更靠谱。但对于那些日复一日的重复点击,它确实能帮你省下不少时间。
如果你家里有不太会用智能手机的长辈,或者你自己每天被各种签到打卡折磨得不行,不妨试试这个项目。毕竟,能让AI干的活,何必自己动手呢?
项目地址在下方,感兴趣的可以去看看:
https://github.com/OminousIndustries/PhoneDriver