Paper

MobileGym 论文速读:可验证、高并行的手机 GUI Agent 仿真平台

7 min read ·

一句话总结:MobileGym 把「手机 GUI agent」搬进浏览器里的确定性环境,用结构化状态做程序化验证取代不可靠的 VLM 裁判,并支持单机 96 路并行的 GRPO 在线训练——10 步就把 Qwen3-VL-4B 的成功率从 9.4% 拉到 22.2%。

论文基本信息

核心问题:手机 GUI agent 的两大瓶颈

所谓「手机 GUI agent」,指的是一类能像人一样看屏幕、点按钮、滑列表,自动操作 App 完成任务的智能体——比如「帮我在购物 App 里把某商品加进购物车」「把闹钟设到明早 7 点」。随着多模态大模型(VLM)能力上升,这个方向越来越热。但要把它做成可量化、可训练的研究对象,长期卡在两个工程瓶颈上。

瓶颈一:评估不可验证。 一个任务到底有没有完成,怎么判?过去常见的做法是请一个 VLM 当裁判(VLM-judge):给它看最终截图,让它判断「任务成功了吗」。问题是,VLM 裁判本身会幻觉、会对模糊界面误判。论文实测,VLM 裁判存在 10.2% 的误判率。这意味着你测出来的「成功率」本身就带着 10 个点的噪声,做对比实验、做消融时根本分不清是模型变强了还是裁判抖了。

瓶颈二:在线 RL 难扩展。 要让 agent 真正变强,在线强化学习(让 agent 在环境里反复试错、按奖励更新策略)几乎是必经之路。但手机 GUI 的在线 RL 极难规模化:真机或重型模拟器启动慢、状态难复位、难以几十上百路并行采样。没有高并行的采样吞吐,GRPO 这类需要大量 rollout 的算法根本跑不动。

MobileGym 的回答很直接:用浏览器内的确定性移动环境 + JSON 状态管理 + 并行执行,一次性把这两个瓶颈都解决。

MobileGym 的设计

平台规模:28 个 app,416 个参数化任务模板(parameterized task templates)

这里两个关键词值得拆开看。

最核心的基础设施,是结构化环境状态(structured environment state)。环境内部以 JSON 维护一份完整的、机器可读的状态快照:购物车里有哪些商品、闹钟列表设了哪些时间、当前在哪个页面、表单填了什么值。任务成功与否,不再靠「看截图猜」,而是直接对这份 JSON 做断言。

可验证评估 vs VLM 裁判

这是 MobileGym 最有价值的设计点之一。我们用伪代码把两种范式的差别摆清楚。

先看传统的 VLM 裁判

# VLM 裁判:把最终截图丢给一个 VLM,让它"看图说话"判断成败
def vlm_judge(task_desc, final_screenshot):
    prompt = f"""
    任务:{task_desc}
    这是 agent 操作后的最终截图。
    请判断任务是否成功完成?只回答 success / fail。
    """
    verdict = vlm.generate(prompt, image=final_screenshot)
    return verdict == "success"

# 问题:
# 1. 截图语义模糊时 VLM 会猜 -> 论文实测 10.2% 误判率
# 2. 同一截图多次询问可能给出不同结论(不可复现)
# 3. 评估成本 = 一次额外的大模型推理

再看 MobileGym 的 程序化状态验证(programmatic state verification)

# 程序化验证:直接读环境的结构化 JSON 状态,对目标条件做确定性断言
def programmatic_verify(env_state, task_goal):
    # env_state 是环境内部维护的真值状态,机器可读
    # task_goal 来自参数化模板,明确写死了成功条件
    #
    # 例:任务 = "把 iPhone 充电线加入购物车"
    # task_goal = {"cart_contains": "iphone_charging_cable"}

    cart = env_state["shopping_cart"]["items"]
    return task_goal["target_item"] in cart  # 确定、可复现、零歧义

# 优势:
# 1. 结果由环境真值决定,无幻觉、无主观,消除 10.2% 误判
# 2. 完全可复现,跑一万次结果一致
# 3. 几乎零成本,不需要额外大模型推理
# 4. 可作为干净的 RL 奖励信号

差别一目了然:VLM 裁判是「看屏幕猜对错」,程序化验证是「读真值判对错」。前者把 10.2% 的噪声注入到每一次评估里,后者直接把这层噪声清零。对论文实验的可信度、对 RL 奖励的纯净度,这都是质的提升。

💡 提示:可验证奖励(verifiable reward)正是近两年 RL 训练大模型的主线思路——代码用单测验证、数学用答案验证。MobileGym 把这套思路第一次干净地落到了「移动 GUI 操作」这个连续、视觉、多步的场景里。

高并行在线 RL:单机 96 实例的 GRPO

有了确定性环境和干净的奖励,下一步就是把在线 RL 跑起来、跑得快。MobileGym 支持单机 batch 并行的 GRPO 训练

GRPO(Group Relative Policy Optimization)的特点是:对同一个任务采样一组(group)轨迹,用组内相对优势来更新策略,省掉了独立的 value 网络。它的代价是需要大量 rollout——而这恰恰要求环境能高吞吐并行。MobileGym 的浏览器内环境天然适合这一点:可以在单机上同时拉起几十上百个 browser 实例并行采样。

并行 GRPO 的训练流程可以这样示意:

# 单机 batch 并行 GRPO(伪代码)
N_PARALLEL = 96  # 96 个并行 browser 实例
GROUP_SIZE = G   # 每个任务采样一组轨迹

def parallel_grpo_step(policy, task_batch):
    # 1) 在 96 个并行环境里同时 rollout
    trajectories = []
    for task in task_batch:
        group = parallel_rollout(
            policy, env=spawn_browser_envs(N_PARALLEL),
            task=task, n=GROUP_SIZE
        )
        # 2) 用程序化状态验证给每条轨迹打确定性奖励
        for traj in group:
            traj.reward = programmatic_verify(traj.final_state, task.goal)
        trajectories.append(group)

    # 3) 组内相对优势:A_i = (r_i - mean(r_group)) / std(r_group)
    advantages = compute_group_relative_advantage(trajectories)

    # 4) 按 GRPO 目标更新策略
    policy.update(trajectories, advantages)
    return policy

# 硬件:单个 3×RTX Pro 6000 节点
# 配置:96 个并行 browser 实例
# 训练:仅 10 个训练步

结果:在单个 3×RTX Pro 6000 节点上,开 96 个并行 browser 实例仅 10 个训练步,就把 Qwen3-VL-4B 的整体仿真成功率从 9.4% 提升到 22.2%,绝对提升 12.8 个百分点

这个数字的意义在于「性价比」:不是几千卡几万步的大投入,而是单节点、十步、翻倍多的成功率。它直接证明了——只要环境足够确定、采样足够并行、奖励足够干净,手机 GUI agent 的在线 RL 是能用很小的成本快速见效的。瓶颈从来不在算法,而在「有没有一个能高并行、可验证的环境」。

Sim-to-Real:仿真能力迁移到真机

仿真训练最终要回答一个问题:在浏览器里练出来的本事,搬到真手机上还管用吗?

论文给出的答案是肯定的:Sim-to-Real 带来 +40.7 个百分点的提升。也就是说,把仿真中通过 RL 习得的操作策略迁移到真实设备后,相比未经训练的基线有 40.7 pt 的显著领先。

这个迁移幅度之所以可观,根源在于 MobileGym 的环境设计:它复现的是 App 的交互逻辑与状态机(点了加购按钮购物车就会变、设了闹钟列表就会多一项),而不只是表面像素。当 agent 学到的是「为达成某个目标状态该走哪条操作路径」,这种结构化的操作知识天然具备跨环境迁移性,从仿真迁到真机的折损就小。

工程意义

把三块贡献串起来看,MobileGym 给手机 GUI agent 研究补上的,是一条完整的「可验证—可训练—可迁移」闭环。

  1. 评估终于可信了。 用结构化状态做程序化验证,把 VLM 裁判 10.2% 的误判噪声清零。这意味着论文里的成功率数字第一次变得干净,消融实验、模型对比才有意义。
  2. 在线 RL 终于跑得动了。 浏览器内确定性环境 + 单机 96 路并行,让 GRPO 这类高采样需求的算法在小成本下可用。10 步翻倍的结果,对任何想做 GUI agent RL 的团队都是强信号。
  3. 训练成果终于落得了地。 +40.7 pt 的 Sim-to-Real 提升,说明仿真不是自娱自乐,练出来的能力真能上真机。

对实践者而言,MobileGym 的价值不只是一个 benchmark,而是一套可复制的方法论:确定性环境 + JSON 真值状态 + 程序化奖励 + 高并行采样。这套组合拳适用的远不止手机——任何需要在 GUI 上做多步操作、又苦于评估不可靠、RL 难扩展的场景(桌面应用、网页自动化、机器人 GUI 控制),都能借鉴这个思路。

⚠️ 注意:参数化任务模板虽然能批量生成任务,但模板覆盖的 app 与操作类型(28 个 app、416 个模板)仍是有限集合。Sim-to-Real 的高迁移结果建立在仿真环境与真机交互逻辑高度一致的前提上,迁移到模板之外的长尾 App 时仍需谨慎评估。

小结

MobileGym 的贡献可以浓缩成一句话:它把「可验证奖励」这套已经在代码、数学场景验证过的 RL 范式,干净地搬到了手机 GUI 操作这个连续、视觉、多步的硬场景里。

28 个 app、416 个参数化任务模板的规模或许还会继续扩张,但它给出的范式——可验证、可并行、可迁移——已经为手机 GUI agent 的下一阶段研究铺好了路。对想入局这个方向的开发者来说,从 mobilegym.dev 起步,可能是当下最务实的选择。

Frequently asked questions

MobileGym 解决了手机 GUI agent 研究的什么核心痛点?
两个瓶颈。一是评估不可验证:以往常用 VLM 当裁判判断任务是否完成,主观且有 10.2% 误判率。二是在线 RL 难扩展:真机训练慢、难并行。MobileGym 用结构化状态做程序化验证,并在浏览器内提供确定性环境支持高并行训练,同时攻克这两点。
为什么程序化状态验证比 VLM 裁判更可靠?
VLM 裁判靠截图语义判断,存在幻觉和歧义,论文测得 10.2% 误判率。程序化验证直接读取环境的结构化 JSON 状态(如购物车是否含目标商品、闹钟是否设到指定时间),把成功条件写成确定性断言,结果可复现、零歧义,从根本上消除主观误判。
MobileGym 的规模和覆盖范围如何?
平台包含 28 个 app 和 416 个参数化任务模板。参数化意味着同一模板可实例化出大量具体任务(如换商品名、换时间、换联系人),既保证任务多样性,又让每个实例都有明确可验证的目标状态,非常适合大规模 RL 采样。
单机 96 并行 GRPO 训练的效果有多大?
在单个 3×RTX Pro 6000 节点上跑 96 个并行 browser 实例,仅 10 个训练步,就把 Qwen3-VL-4B 的整体仿真成功率从 9.4% 提升到 22.2%,绝对提升 12.8 个百分点。说明确定性环境加高并行采样能让在线 RL 在小成本下快速见效。
仿真里训练的能力能迁移到真实手机吗?
能。论文报告 Sim-to-Real 带来 +40.7 个百分点的提升,即仿真中通过 RL 习得的操作策略迁移到真实设备后显著优于未训练基线。这表明浏览器内移动环境与真实 App 的交互逻辑足够接近,仿真训练具有实用迁移价值。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.