做移动端自动化的朋友,这些年应该没少跟 UI Automator、Espresso、Appium 这些框架打交道。脚本写起来倒不复杂,真正让人头疼的是设备碎片化带来的兼容性调整,以及页面改版后一堆选择器失效的维护成本。ARTEMIS 这个谷歌开源的移动端 AI 自动化框架,思路跟传统自动化完全不在一个维度——它让 AI 助手像人一样“看”屏幕、“理解”界面,然后用自然语言描述任务就能操作手机。我第一时间把它跑起来做了验证,今天把整个框架的拆解、实操过程和踩坑记录整理出来,给想尝试或已经在关注移动端自动化新方向的朋友一个参考。
1. 项目定位与设计思路拆解
1.1 传统自动化测试的痛点在哪里
先说清楚我们面临的问题。传统 UI 自动化测试框架,无论用的是 ID、XPath 还是 Accessibility 属性定位元素,本质都是“程序化”地告诉设备:去点坐标 (x,y) 或者找resource-id为com.example:id/button_login的控件。这种方式在页面结构稳定的时候很可靠,但只要版本迭代改了布局、换了控件层级,或者出现 A/B 测试导致相同功能不同页面结构,脚本就得跟着改。
更麻烦的是复杂任务。比如“从购物车结算并选择优惠券”,这类跨页面、多步骤的操作,用传统框架写出来往往是一长串步骤流,每一步都要精心设计等待条件和异常处理。测试用例写多了之后,维护成本会逐渐逼近甚至超过开发成本,这也是很多团队自动化测试投入产出比不高的根本原因。
1.2 ARTEMIS 换了一条完全不同的路子
ARTEMIS 的核心理念是让 AI 像人一样使用手机。人类是怎么操作 App 的?先看屏幕,理解当前页面有哪些可用元素,然后根据肚子里的知识和目标,决定点哪里、滑到哪里、输入什么内容。ARTEMIS 把这个思路完整复刻了一遍:它用视觉语言模型去“看”屏幕,理解界面语义,再结合任务目标做出操作决策。
这个项目全称是Android Reliable Task Execution and Management Intelligence System,跟希腊神话里的狩猎女神同名,学的是让 AI 在手机屏幕上精准“狩猎”目标操作点。研究团队把它定位成一个端到端的环境,不只是算法模型,还包含了一套完整的离屏渲染系统、任务执行评估体系和模型微调方案。跑起来之后,你可以直接对它说“帮我把闹钟设定到明天早上七点”“打开设置把亮度调到最低”,AI 会自动完成操作,不需要任何人为编排的步骤脚本。
1.3 这套方案真正解决的三个层次的问题
第一层是脚本维护问题。不需要写选择器和步骤流,自然语言描述任务就行,页面结构变化对已经写好任务的影响大幅降低。第二层是任务泛化问题。传统脚本只会在特定页面上做特定操作,ARTEMIS 更像一个通用手机助手,遇到没见过的页面也能靠视觉理解能力继续执行。第三层是落地规范问题。它把“目标描述—屏幕理解—操作决策—执行反馈”这个闭环标准化了,不管后面用的是 Claude、GPT 还是开源 VLM,都可以套用这套框架去做移动端 Agent。
2. 核心架构与关键技术点解析
2.1 视觉语言模型是大脑,但不止一个模型
ARTEMIS 的主干模型是基于 PaLM 2-S* 微调出来的视觉语言模型,具备屏幕理解和 grounding 能力,也就是能把自然语言描述映射到屏幕坐标系的具体位置。这里的重点在于模型不是简单地“描述图片”,而是要做到对 UI 元素级别的理解——知道哪个是按钮、哪个是文本输入框、哪些元素可点击、哪些只是装饰。
要实现这种能力,团队用了行为克隆(Behavior Cloning)加偏好优化(Preference Optimization)的两阶段训练策略。行为克隆先让模型模仿大量人工演示的操作轨迹,学会“看到什么界面就做什么操作”;偏好优化则从多个候选操作中选择人类更认可的那个动作,进一步校准模型的决策偏好。最终推理时使用贪婪解码,配合低温度参数保证输出稳定性,而不是像对话模型那样追求多样性和创造性。
这个模型最核心的设计是用“严格语法文本”作为 UI 表示。它不像其他多模态模型那样把截图直接丢给模型,而是先通过离屏渲染提取当前屏幕的语义结构,转成一段特定格式的文本,再把这段文本交给 VLM 去决策。这样做的好处是大幅减少了模型需要理解的冗余视觉信息,让模型把注意力集中在真正需要操作的元素上。
2.2 离屏渲染:在后台画出手机屏幕的“语义地图”
离屏渲染是 ARTEMIS 里一个容易被忽略但极其关键的组件。它在真实设备上通过实用 UI Automator(Google 官方的 UI 测试框架)自动化获取当前界面的控件树,然后利用 Android 系统的 View 绘制能力,在屏幕外生成一张“带标注”的渲染图——每个控件会被分配一个唯一的 OLC(On-screen Labeled Cell)编号,并记录它的 bounding box 坐标和文本属性。
这个过程有点像地图导航里的“路网图”,而不是卫星照片。传统视觉模型直接看截图,会被壁纸、图片、广告这些装饰性内容干扰;ARTEMIS 的离屏渲染把 UI 逻辑结构提取出来,相当于给模型一张清晰的路网图,哪里是按钮、哪里是输入框、哪些元素可以点击,一目了然。最终模型看到的是带坐标注释的屏幕表示:
[OLC 128] Button "登录" at (280, 950, 560, 1100) [OLC 132] EditText "用户名输入框" at (140, 720, 760, 870)这种格式可以精确指导后续的点击和输入操作,也方便模型建立“目标描述与界面元素”之间的对应关系。由于严格语法文本压缩了视觉 token 数量,推理速度也比直接输入原始截图更快,这个设计在处理低端机型上的复杂界面时优势特别明显。
2.3 实用 UI Automator 与 ADB 命令协作的交互闭环
执行层面,ARTEMIS 通过谷歌官方的好用 UI Automator 拿到可操作控件节点后,由 VLM 决策出动作意图,再调用 ADB(Android Debug Bridge)层执行对应的操作指令,比如点击 OLC 编号对应的坐标区域、在输入框内填充文字、执行滑动等。
整个闭环流程是这样的:任务描述输入模型,模型根据当前屏幕语义结构一次推理,输出包含动作类型和 OLC 目标的决策;框架把动作翻译成具体的 ADB shell 命令或 UiAutomation API 调用;设备执行完后重新提取界面结构,进入下一轮决策。这个循环持续进行,直到模型判定任务完成或达到最大轮次限制。
这里有一个关键细节:环境用的是真实安卓设备或模拟器,不需要特制 ROM,也不需要 root。因为只要 Android SDK 的自动化接口能工作,框架就能获取界面信息并注入操作事件,这保证了方案具备较好的普适性和可复现性。
3. 实操准备与核心环节实现
3.1 环境准备:把依赖一项项配齐
ARTEMIS 的代码以研究代码库的形式开源,主体基于 Python 和 Jupyter Notebook,不是开箱即用的产品级工具,我把完整跑通需要配的环境列出来,方便参考。
首先是基础依赖。系统层面需要 Python 3.9,建议通过 conda 创建独立虚拟环境,不然容易跟本机其他项目打架。然后装 Android SDK,命令行工具至少要有 adb 和 aapt。突出推荐配置好 Android 模拟器(API 30 以上),因为真机调试时设备碎片化带来的渲染差异可能影响离屏渲染的准确性。
pip install gdown pip install -r requirements.txtARTEMIS 的模型检查点文件放在 Google Drive 上,用 gdown 下载时要注意文件 ID 不是公开分享链接里的那一串随机字符,直接复制容易出错。我实际下载时遇到过 403 权限错误,解决方法是去代码仓库的 README 里找它提供的共享文件路径配置,确认了文件权限为“任何知道链接的人”之后才能顺利拉取。
3.2 数据集认知:千万别跳过评估环节
很多朋友拿到这个项目第一件事就是直接跑模型操作手机,我建议先冷静一下。ARTEMIS 开源内容里还包含了一个精心标注的评估数据集,涵盖 10 类常见日常任务、超过 150 种应用操作场景,每种场景都有详细的任务说明、参考操作轨迹和 EUI 层面的数据标注。跑通模型后先在这个数据集上做量化验证,能直观感受模型的成功率、步骤数与基线对比情况,也为后续接入自己的测试任务提供校准基准。
评估过程不需要人工盯着屏幕,框架自带评估脚本,会自动对比 AI 操作后的页面状态与预期目标页面状态是否一致。这一点值得给团队推广自动化测试的朋友提个醒:评估脚本本身就可以沉淀成一条可持续运行的任务链路,实现“发任务、看结果、出报告”的闭环。
3.3 模型配置与首次任务执行
模型权重大约 12GB 左右,下载之后需要配置路径。ARTEMIS 的实现参考了 MiniGPT-v2 的模型结构,所以配置里需要指定 LLM 路径、视觉编码器路径和 tokenizer 路径。我的建议是把这些路径统一写在一个.env文件或配置脚本里,避免每次启动都要手改参数。
首次启动执行任务时,推荐用官方仓库里的 Jupyter Notebook 逐格运行,先初始化三个核心组件:离屏渲染器、模型推理器和动作执行器。示例任务建议选一个页面结构简单、元素数量少的,比如“打开计算器,计算 128 乘以 6”,因为这类任务能快速验证整个链路是否通畅,也不会消耗太多推理时间。
执行任务的指令格式需要注意,尽量描述结果而不是描述过程。比如“帮我把 Wi-Fi 打开”就比“从设置页面找到无线网络选项,点击开关按钮”更适合 ARTEMIS,因为后者等于人为限制了模型的决策空间,一旦页面结构跟预期不一致就容易失败。
3.4 高效控制任务执行与动态信息收集
框架导航策略参考了 ReAct 模式,也就是在每一轮操作时同时输出“推理过程 + 动作指令”,类似人脑先思考再行动的逻辑。跟 OpenAGI 等框架相比,它更强调 UI 状态与任务的相关性,会自动跳过与目标无关的干扰元素。
我实际操作时发现一个实用技巧:任务执行时,ARTEMIS 支持在 FLAG 中加入get_info来实时收集应用信息和 UI 布局数据。比如在“设置”界面切换开关时,捕获到的 UI hierarchy 快照会被自动保存,方便后续追踪操作历史和调试。对于做自动化测试的朋友来说,这个能力可以直接复用,相当于自动生成了每一步操作对应的页面变更记录。
4. 常见问题、排查技巧与避坑实录
4.1 离屏渲染结果不准或拿不到控件树
这是跑 ARTEMIS 时最容易遇到的一类问题。常见情况有三种:页面元素没有可用的 content-desc 或文本属性、控件层级嵌套太深导致 UI Automator 解析超时、WebView 页面里的内容不暴露给原生控件树。
对应的排查思路是:先检查页面是否渲染完成,在任务描述里偷偷加一句“等待页面加载完成后再操作”的语义,或者修改代码里的等待策略;遇到纯 H5 页面,老实说 ARTEMIS 的离屏渲染能力会受限,需要换原生功能场景先验证;如果控件树拿到但显示错位,检查设备分辨率与渲染配置里的尺寸是否一致。
4.2 模型推理慢得像蜗牛爬
ARTEMIS 的视觉语言模型跑在个人 GPU 上,推理速度跟显卡直接挂钩。我用一块 RTX 4090 测下来,单步决策大约在 3 到 5 秒,一个 10 步任务跑完就是一分钟上下,效率问题会在体系化回归测试时立刻暴露出来。
实际能优化的手段有:用 FP16 量化减少显存占用和推理耗时,将框架的截屏渲染频率从每步都渲染改为检测到界面变化才渲染,把任务描述中的目标写得更明确以减少决策轮次。如果业务场景允许,优先在模拟器上跑而不是真机,因为模拟器的 UI Automator 响应通常更稳定,能减少等待耗时的干扰。
4.3 设备连接不稳导致执行中断
adb 连接断开在无线调试模式下特别常见。我的经验是优先用 USB 数据线连接,并在代码里增强重连逻辑,比如检测到device offline时自动执行adb reconnect。同时给模拟器固定端口,避免反复弹窗分配随机端口。
另一个隐蔽坑是弹窗干扰。系统级弹窗(权限申请、系统更新提醒、自动旋转建议)会打断任务的连续决策。我的处理方式是在设备上手动安装并启用“拒绝权限请求”的设置助理,或者用 Demo 模式禁用部分系统窗口。把这类弹窗干扰记录下来,作为任务前置条件固定在执行环境配置里,能显著提升成功率。
4.4 常见问题速查表
| 异常现象 | 可能原因 | 解决方案 |
|---|---|---|
| 模型输出乱码/日志异常 | tokenizer 路径配置错误 | 检查路径是否指向 BPE tokenizer 的 vocab 文件 |
| gdown 下载报 403 | 文件权限未公开 | 确认 Google Drive 共享链接权限 |
| 任务执行到一半卡住 | UI Automator 解析线程阻塞 | 调低页面解析超时,并对无响应控件做跳过处理 |
| 任务结果与预期状态偏差大 | 目标描述过于笼统 | 动词前置,描述终端状态而非中间过程 |
| 多步任务步骤数爆炸 | 模型在无关元素上反复决策 | 在提示词中强调“仅操作与目标相关元素” |
4.5 实测中的三个独家心得
第一点是任务描述要像给人类同事派活一样写。要求越清楚,模型的决策路径越短。我试过描述“清理一下手机空间”和“删除相册里最近 30 天内截图”,前者模型纠结了很久不知道该进哪个菜单,后者直接完成了删除操作。这就是场景约束带来的现实差距。
第二点是不要迷信单一模型。ARTEMIS 的框架是可插拔的,PaLM 2-S* 只是官方实验用的模型,实际工程落地时完全可以替换成量化后的开源 VLM。我后来用一个 7B 的模型做试验,步骤数虽然多了一些,但在简单任务上的成功率是达标的,这对于没有高算力预算的团队是个好消息。
第三点是注意坐标系偏移。离屏渲染出来的 OLC 坐标以渲染视图为准,但最终动作是靠 ADB 注入的,一旦设备屏幕有刘海、水滴屏或系统导航栏手势区域,注入点可能出现偏位。解决办法是通过wm size获取实际有效显示区域,并换算坐标后再执行点击。
5. 从 ARTEMIS 看 AI 操作手机的未来方向
5.1 它给自动化测试行业带来了范式级启发
做这么多年自动化测试,我一直觉得行业天花板在于“脚本的脆弱性”。ARTEMIS 从模型层面绕开了选择器依赖问题,让测试人员从写步骤脚本变成写业务目标、维护评估标准。这意味着测试团队结构也会跟着变:需要懂 Prompt 工程、懂模型评估、懂数据标注的人,而不是只会写 XPath 的人。
这个转变不是 PPT 上的概念。ARTEMIS 在评估数据集上表现出的成功率相较之前工作有显著提升,同时会把复杂任务简化成更少的步骤数量级。对于长期维护移动端核心链路的团队,这类“无脚本自动化”思路值得快速做一轮概念验证,选 20 个高频核心用例跑一跑,看看模型对自家业务的理解能力。
5.2 AI Agent 落地手机的参考架构
ARTEMIS 的“离屏渲染 + VLM 决策 + ADB 执行”三层设计,本质上是为手机 AI 助手提供了一套标准动作接口。以后手机上的智能体不需要厂商开放系统 API,也能通过 UI 层完成大部分操作——打车、点外卖、订机票、查快递,通通可以用自然语言驱动。
我认为后续的演进方向大概率是轻量化模型加端侧部署。一套几十亿参数的视觉语言模型如果能跑在手机 NPU 上,配合 ARTEMIS 这类框架,个人智能助手的体验会上升一个台阶。至少从开源生态看,ARTEMIS 把落地路径完整摊开了,谁能在模型成本和执行稳定性上做到平衡,谁就可能在下一轮移动端 AI 应用竞赛里占得先机。
5.3 关于直接上手的一点点建议
直接拿 ARTEMIS 上生产环境我会劝你先冷静,但先跑通它绝对值得。项目本身是研究性质代码,Bug 和小毛病不少,文档也比较零散。我是在 Ubuntu 系统上配好的环境,Windows 用户建议用 WSL 2 避免一堆依赖编译问题。
最后再提一个小细节:任务执行完之后,ARTEMIS 会保留完整的操作轨迹日志。这份轨迹数据特别宝贵,我通常会把失败任务的操作序列翻出来看模型到底是哪一步走偏了,比猜测和反复重跑高效得多。谷歌能把这个项目开源,确实给移动端 AI 自动化开了一个很好的头,接下来就看社区能在上面长出什么有意思的应用了。