Berkeley RDI 发布开源平台 CUA-Lite,面向计算机使用智能体
CUA-Lite: An Open Platform for Computer-Use Agents
Berkeley RDI 推出开源平台 CUA-Lite,为计算机使用智能体提供三个标准化抽象。其环境接口下运行 15+ 个覆盖桌面、浏览器和移动端的基准,并提供含 30k+ 可验证任务的免 VM 桌面沙箱;统一监督数据格式已转换 10+ 个公开 CUA 数据集;每模型一个 harness 在评测、SFT 和 RL 间共享,支持 14 个模型族。
原文说明了平台的三项标准化抽象及覆盖规模,读者可以据此评估它在整合分散的计算机使用智能体资源上的可用性。
推出 CUA-Lite:一个用于开发计算机操作智能体的开放平台。 它围绕三个标准化抽象构建——Lite.Gym(环境)、Lite.Sample(监督数据),以及每个模型在评测、SFT 和 RL 中统一使用的单一 harness。15+ 个基准、10+ 个数据集和 30k+ 个可验证任务 已接入其中。
为什么选择 CUA-Lite
计算机操作智能体运行于桌面、浏览器和移动应用之上,开发这类智能体需要具备可验证任务的环境、监督数据、模型,以及在环境中运行模型的 harness。这三方面已有开源成果,但仍各自分散:每个环境都有自己的接口和运行时;每个监督数据集都有自己的格式;每个模型都有自己的动作空间、提示词格式和 rollout 代码。
没有统一标准,将模型接入环境就意味着重写同样的代码:动作映射、上下文窗口和 rollout 循环——因此资源无法汇集和扩展,评测、SFT 和 RL 也无法共享同一套基础设施。
数据集Mind2WebGUIOdyssey基准OSWorldWebArena
CUA-Lite 在一个地方补齐了这三块拼图:
- Lite.Gym,统一环境接口 —— 15+ 个评测基准,外加可选的免虚拟机桌面沙箱,内含 30k+ 个可验证的训练任务。
- Lite.Sample,统一监督数据格式 —— 10+ 个数据集与全新 rollout,在 Hugging Face 上免费开放。
- 模型 harness 在评测、SFT 与 RL 之间共用 —— 每个模型一个 harness,已为 14 个模型家族实现。
Lite.Gym:统一环境接口
任何智能体都能通过同一个接口接入任何环境。
lite.gymlite.gym# lite.gym — every env behind one interface
class LiteBaseEnv:
metadata: LiteMetadata # platform · extra tools
async def reset() # first screenshot + task
async def step(actions) # execute, observe, reward
async def close()
# one step of the loop ↓
env = gym.make("osworld@<task_id>")
result = await env.step([
click(coordinate=[500, 400]), # normalized [0, 1000]
])
result.observation.screenshot_b64 # base64 png, no prefix
result.reward # float | None
result.terminated, result.truncated
将环境以 Gym 风格的 reset / step / close 循环形式暴露出来。该循环将各环境中的观察格式统一为一种——每次工具调用时提供截图、文本或两者兼有——并为每个平台提供统一的 GUI 动作空间,以工具调用的形式发出:桌面端和浏览器端使用 click 和 type,移动端使用 tap 和 swipe,此外每个环境还配有额外工具,例如我们桌面沙箱中的 bash。它封装了环境自身的运行时:虚拟机、浏览器或移动模拟器。
环境OSWorld · 桌面WebArena · 浏览器AndroidWorld · 移动WebGym · 浏览器你的下一个
lite.gymlite.gym# lite.gym — every env behind one interface
class LiteBaseEnv:
metadata: LiteMetadata # platform · extra tools
async def reset() # first screenshot + task
async def step(actions) # execute, observe, reward
async def close()
# one step of the loop ↓
env = gym.make("osworld@<task_id>")
result = await env.step([
click(coordinate=[500, 400]), # normalized [0, 1000]
])
result.observation.screenshot_b64 # base64 png, no prefix
result.reward # float | None
result.terminated, result.truncated
智能体
截图点击([632, 375])
$ rollout.py --model-idgpt-5.5--env-idosworld
CUA-Lite 还自带可选的无 VM 轻量级桌面沙箱: 即 Docker 容器,能以低得多的成本复现 OSWorld 的桌面环境,并承载 3 万多个可验证任务用于训练。它们不需要基于 VM 的基准测试所依赖的 /dev/kvm 硬件虚拟化,因此可以在任何装有 Docker 的主机上运行——而 Lite.OSWorld(我们推出的方案)能原样运行 OSWorld 自身的任务和评估器,无需任何改动。
OSWorld
Ubuntu.qcow2
QEMU · KVM
/dev/kvm
Lite.OSWorld · 并行 rollout
密封在 VM 中的桌面——每个任务都要启动 QEMU/KVM。
超越 OSWorld:可扩展的训练沙箱
无 VM 容器不只用于 OSWorld——它是 CUA-Lite 沙箱家族的基础。 同一套基础已经能运行浏览器任务、桌面任务,以及真实的科学桌面:GMAT 操控航天器、PyMOL 旋转蛋白质。
Lite.OSWorld Lite.ScaleCUA Lite.CUAGym Lite.CUAWorld
369 个基准任务 + 2000 多个合成任务,覆盖 10 款桌面应用。
循环式 rollout 轨迹——点击某个图块即可查看完整的 rollout。
诚邀沙盒贡献者。 沙盒只有在有人运行时才有意义。把你的沙盒加入 CUA-Lite,每一个智能体都会在它上面训练和评测——现在如此,将来亦然。一次集成,整个领域都能在此基础上构建。
Lite.Sample:统一的监督式数据格式
数据集只需转换一次,每个智能体都能在它上面训练。
LiteSampleLiteSample# LiteSample — one schema for any data
@dataclass
class LiteSample:
metadata: LiteMetadata # platform · task_type
images: list[Image] # screenshots
messages: list[LiteMessage] # user ⇄ assistant turns
# a grounding step — one action ↓
LiteSample(
LiteMetadata("desktop", "grounding.action"),
messages=[
user("Click Subscribe", img=0),
assistant(click([455, 215])),
])
# a use trajectory — 2 steps ↓
LiteSample(
LiteMetadata("browser", "use"),
messages=[
user("Find cua-lite on GitHub", img=0),
assistant(type("cua-lite")),
user(img=1), # result screenshot
assistant(click([320, 180]), terminate()),
])
是贯穿所有环境、智能体和任务类型的统一数据模式,在 Hugging Face 上免费提供。
无论数据来自何处,都统一为同一种形态:其中的工具调用消息就是该界面的动作,工具结果消息就是它的观测——从 GUI grounding 标注到完整的 rollout 皆是如此。
数据集Mind2Web · 浏览器GUIOdyssey · 移动端ScaleCUA · 全部OpenCUA · 桌面端你的数据集
LiteSampleLiteSample# LiteSample — one schema for any data
@dataclass
class LiteSample:
metadata: LiteMetadata # platform · task_type
images: list[Image] # screenshots
messages: list[LiteMessage] # user ⇄ assistant turns
# a grounding step — one action ↓
LiteSample(
LiteMetadata("desktop", "grounding.action"),
messages=[
user("Click Subscribe", img=0),
assistant(click([455, 215])),
])
# a use trajectory — 2 steps ↓
LiteSample(
LiteMetadata("browser", "use"),
messages=[
user("Find cua-lite on GitHub", img=0),
assistant(type("cua-lite")),
user(img=1), # result screenshot
assistant(click([320, 180]), terminate()),
])
智能体
适配器 adapter# 适配器——每个模型家族一个 class BaseAgentAdapter: action_space: BaseActionSpace # 其坐标 protocol: BaseProtocol # 其历史记录 def render_step(sample, k, processed) # → 模型在第 k 轮看到的消息 def unroll(sample) # → AgentSample,每一轮
同一个适配器同时服务于 rollout 和 export_sft——
SFT 提示词与模型在实时运行中看到的内容完全一致
$ export_sft --data-paths hf/Multimodal-Mind2Web--model-idQwen3-VL-8B-Instruct
**CUA-Lite 为每个模型内置了
adapteradapter# the adapter — one per model family
class BaseAgentAdapter:
action_space: BaseActionSpace # its coordinates
protocol: BaseProtocol # its history
def render_step(sample, k, processed)
# → the messages the model sees at turn k
def unroll(sample) # → AgentSample, every turn
# the same adapter serves rollout and export_sft —
# the SFT prompt matches what the model saw live
将统一的
LiteSampleLiteSample# LiteSample — one schema for any data
@dataclass
class LiteSample:
metadata: LiteMetadata # platform · task_type
images: list[Image] # screenshots
messages: list[LiteMessage] # user ⇄ assistant turns
# a grounding step — one action ↓
LiteSample(
LiteMetadata("desktop", "grounding.action"),
messages=[
user("Click Subscribe", img=0),
assistant(click([455, 215])),
])
# a use trajectory — 2 steps ↓
LiteSample(
LiteMetadata("browser", "use"),
messages=[
user("Find cua-lite on GitHub", img=0),
assistant(type("cua-lite")),
user(img=1), # result screenshot
assistant(click([320, 180]), terminate()),
])
打包成每个模型各自所需的精确训练格式。** 上图展示了一个示例,并附带了用于添加你自己的适配器的构建模块。
已有 10+ 个数据集上线 Hugging Face:现有的 CUA 语料库——grounding · understanding · use——已预处理为 Lite.Sample 格式,外加来自前沿 CUA 的最新 rollout 数据。浏览语料库和rollout 数据;下方展示其中之一,WebGym:
huggingface.co/datasets/cua-lite/WebGym
Rollout 数据
Lite.OSWorld WebGym Lite.ScaleCUA Lite.CUAWorld Lite.CUAGym
语料库
Aguvis CAGUI GUI-360 GUIAct GUIOdyssey Multimodal-Mind2Web OpenCUA ScaleCUA UI-Genie-Agentopen ↗
诚邀数据贡献者。数据只有在模型能够基于其训练时才有价值。将你的数据分享给 CUA-Lite,每一个智能体都能基于它训练——甚至包括尚未问世的模型。一次转换,整个社区都能基于它训练。
模型框架:在评测、SFT 与 RL 之间通用
每个模型都有一个适配器(harness),即将其适配到接口和格式的代码。 通过该适配器,模型可以在每个集成环境中运行,评测和 RL 会消费它产生的 rollout 数据;使用同一个适配器,任何存储的
LiteSampleLiteSample# LiteSample — one schema for any data
@dataclass
class LiteSample:
metadata: LiteMetadata # platform · task_type
images: list[Image] # screenshots
messages: list[LiteMessage] # user ⇄ assistant turns
# a grounding step — one action ↓
LiteSample(
LiteMetadata("desktop", "grounding.action"),
messages=[
user("Click Subscribe", img=0),
assistant(click([455, 215])),
])
# a use trajectory — 2 steps ↓
LiteSample(
LiteMetadata("browser", "use"),
messages=[
user("Find cua-lite on GitHub", img=0),
assistant(type("cua-lite")),
user(img=1), # result screenshot
assistant(click([320, 180]), terminate()),
])
都会被渲染为模型自身的训练格式用于 SFT —— 这里是 Qwen3.5 的格式:
LiteSample{ }adapter Qwen
步骤 1 _instr · img1_ _act1_
步骤 2 _instr · img1_ _act1_ _img2_ _act2_
步骤 3 _instr · img1_ _act1_ _img2_ _act2_ _img3_ _act3_
步骤 4 _instr · img1_ _act1_ _img2_ _act2_ _img3_ _act3_ _img4_ _act4_ 1 次前向传播 · loss ×4
第 5 步 _历史 ×4_ _图像5_ _动作5_
第 6 步 _历史 ×4_ _图像5_ _动作5_ _图像6_ _动作6_ 1 次前向传播 · 损失 ×2
提示词响应 · 损失折叠历史
一条轨迹,6 个步骤——正如 Qwen3.5 所看到的那样
评测,任何智能体在任何基准上
为智能体设置 --model-id,为基准设置 --env-id:
evaluate.sh
$ python scripts/rollout.py \
--model-id gpt-5.5 gpt-5.5 gpt-5.4 claude-opus-4-7 claude-opus-4-6 claude-sonnet-4-6 Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-32B-Instruct Qwen/Qwen3-VL-4B-Instruct Qwen/Qwen3-VL-2B-Instruct Qwen/Qwen3.5-4B Qwen/Qwen3.5-9B Qwen/Qwen3.5-27B Qwen/Qwen3.5-2B Qwen/Qwen2.5-VL-7B-Instruct Qwen/Qwen2.5-VL-3B-Instruct microsoft/Fara-7B ByteDance-Seed/UI-TARS-1.5-7B ByteDance-Seed/UI-TARS-7B-DPO OpenGVLab/ScaleCUA-7B xlangai/OpenCUA-7B meituan/EvoCUA-8B-20260105 Tongyi-MAI/MAI-UI-8B Tongyi-MAI/MAI-UI-2B MarsXL/UI-Voyager stepfun-ai/GELab-Zero-4B-preview\
--env-id osworld Grounding screenspot_pro osworld_g Desktop osworld lite.osworld osworld_2 cua.bench Browser webgym webharbor.webvoyager online_mind2web browsergym.miniwob browsergym.webarena browsergym.visualwebarena Mobile androidworld androidlab mobileworld mobilegym\
--splits eval \
--config-path scripts/configs/gpt/default/osworld.yaml
已集成 15+ 个基准测试——我们提供的是免虚拟机运行时、接口与集成方案,而非任务套件本身——免虚拟机的桌面沙箱是新增能力,而非替代方案:原始 OSWorld 虚拟机与 Lite.OSWorld 并列存在,移动端基准测试仍需要虚拟机或模拟器:
Grounding 2 项 · Desktop 4 项 · Browser 6 项 · Mobile 4 项
OSWorld-G 桌面 UI 定位ScreenSpot-Pro 高分辨率专业应用
OSWorld 真实 Ubuntu 桌面应用Lite.OSWorld 轻量级 OSWorld 任务OSWorld-2 能力分级 · 部分得分CUABench 计算机操作 · KiCad · 工作流
WebGym 网页导航WebVoyager 线上生产环境网站Online-Mind2Web 300 项线上网页任务MiniWoB 微型网页交互WebArena 自托管商城 · 论坛 · GitLabVisualWebArena 视觉网页任务
AndroidWorld 真实 Android 应用AndroidLab 9 款离线 Android 应用MobileWorld 161 项移动端任务MobileGym 移动端导航
排行榜 OSWorld 构成README↗
1gpt-5.572.3%
2Qwen/Qwen3.5-27B46.2%
3meituan/EvoCUA-8B-2026010542.8%
4Qwen/Qwen3.5-9B38.1%
5Qwen/Qwen3-VL-32B-Instruct35.8%
6Qwen/Qwen3-VL-8B-Instruct34.2%
7Qwen/Qwen3.5-4B30.3%
8ByteDance-Seed/UI-TARS-1.5-7B29.4%
9Qwen/Qwen3-VL-4B-Instruct29.1%
10Qwen/Qwen3-VL-2B-Instruct20.5%
11OpenGVLab/ScaleCUA-7B15.0%
12ByteDance-Seed/UI-TARS-7B-DPO14.7%
13Qwen/Qwen3.5-2B10.7%
13 个智能体,325 个任务,成功率 2026-07-18 · run_0.json @ 65ea6496
构成
OSWorld
OSWorld — 10 个真实的 Ubuntu 桌面应用。
上游 369
排除不可行 / 损坏的评测器 −48
计分 321
SFT 与 RL,任意开放智能体
在 CUA-Lite 的语料库上进行 SFT,然后在其环境中强化——GRPO 及更进一步的算法,基于 Slime 训练器。在任何数据、任何环境上训练任意开源智能体:
SFT RL
Lite.Sample,适配每个模型——挑选一个数据集和一个学生模型:
数据集:ScaleCUA Rollouts Lite.OSWorld WebGym Lite.ScaleCUA Lite.CUAWorld Lite.CUAGym Corpora Aguvis CAGUI GUI-360 GUIAct GUIOdyssey Multimodal-Mind2Web OpenCUA ScaleCUA UI-Genie-Agent
模型:Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-32B-Instruct Qwen/Qwen3-VL-4B-Instruct Qwen/Qwen3-VL-2B-Instruct Qwen/Qwen3.5-4B Qwen/Qwen3.5-9B Qwen/Qwen3.5-27B Qwen/Qwen3.5-2B Qwen/Qwen2.5-VL-7B-Instruct Qwen/Qwen2.5-VL-3B-Instruct microsoft/Fara-7B ByteDance-Seed/UI-TARS-1.5-7B ByteDance-Seed/UI-TARS-7B-DPO OpenGVLab/ScaleCUA-7B xlangai/OpenCUA-7B meituan/EvoCUA-8B-20260105 Tongyi-MAI/MAI-UI-8B Tongyi-MAI/MAI-UI-2B MarsXL/UI-Voyager stepfun-ai/GELab-Zero-4B-preview
run_sft.sh
--- 主机 ---
1 · 下载语料库
$ python -m lite.data.hf.download ScaleCUA\
--out .data/hf/cua-lite/ScaleCUA
2 · 导出模型可直接使用的 SFT parquet 文件
$ python -m lite.train.export.export_sft \
--model-id Qwen/Qwen3-VL-8B-Instruct\
--config scripts/configs/qwen3_vl/recipes/sft/default.yaml \
--data-paths .data/hf/cua-lite/ScaleCUA\
--image-root .data/hf \
-o .data/sft/qwen3_vl/scalecua.parquet
--- Slime 容器(参见 docs/slime.md)---
3 · 监督微调
$MODEL_ID=Qwen/Qwen3-VL-8B-Instruct\
PROMPT_DATA=.data/sft/qwen3_vl/scalecua.parquet \
bash scripts/train/run_sft.sh
在环境中评分的 Rollouts 驱动 GRPO 更新——选择一个模型和环境:
run_grpo.sh
$MODEL_ID=Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-32B-Instruct Qwen/Qwen3-VL-4B-Instruct Qwen/Qwen3-VL-2B-Instruct Qwen/Qwen3.5-4B Qwen/Qwen3.5-9B Qwen/Qwen3.5-27B Qwen/Qwen3.5-2B Qwen/Qwen2.5-VL-7B-Instruct Qwen/Qwen2.5-VL-3B-Instruct microsoft/Fara-7B ByteDance-Seed/UI-TARS-1.5-7B ByteDance-Seed/UI-TARS-7B-DPO OpenGVLab/ScaleCUA-7B xlangai/OpenCUA-7B meituan/EvoCUA-8B-20260105 Tongyi-MAI/MAI-UI-8B Tongyi-MAI/MAI-UI-2B MarsXL/UI-Voyager stepfun-ai/GELab-Zero-4B-preview\
ENV_ID=lite.osworld Grounding screenspot_pro Desktop lite.osworld Browser webgym Mobile androidworld mobilegym\
CONFIG_PATH=scripts/configs/qwen3_vl/default/lite.osworld.yaml \
bash scripts/train/run_grpo.sh
带上一个数据集、一个环境或一个智能体——每一项都会产生叠加效应。 或者直接告诉我们缺了什么——GitHub · Hugging Face · 邮箱。
来源:Berkeley RDI:Blog(AI 安全与评测) · rdi.berkeley.edu