AgentCPM-GUI
2025-08-15
深度学习
00

目录

🎯 强化学习数据格式总览
1. 原始JSONL数据格式
2. 数据集类处理后的格式
3. 强化学习训练时的数据格式
4. 动作Schema格式
5. 强化学习特定的数据流
6. 奖励函数验证
7. 多轮对话支持
💡 关键特点
📊 AgentCPM-GUI 强化学习训练数据详解
🌟 使用的开源数据集
🔄 强化学习数据处理流程
1. 原始数据格式
2. 强化学习所需的额外数据
🎯 奖励函数设计
💡 数据特点
🚀 强化学习的优势

🎯 强化学习数据格式总览

1. 原始JSONL数据格式

训练数据存储在JSONL文件中,每行是一个JSON对象,包含以下关键字段:

json
展开代码
{ "image": { "<image_00>": "/path/to/step_0.png", "<image_01>": "/path/to/step_1.png" }, "conversations": [ { "role": "system", "content": "系统提示词..." }, { "role": "user", "content": "<Question>用户问题</Question>\n当前屏幕截图:<image_00>" }, { "role": "assistant", "content": "{\"POINT\":[723,536],\"to\":\"up\"}" } ], "bbox": [[x1,y1,x2,y2], ...], // 可选:边界框信息 "bbox2": [...], // 可选:第二个边界框 "id": 0 }

2. 数据集类处理后的格式

GUIRFTDatasetGUIMTRFTDataset 类在 __getitem__ 方法中返回的数据结构:

python
展开代码
{ "id": index, # 数据索引 "step_id": step_index, # 多轮对话中的步骤ID "resolution": (原始尺寸, 缩放后尺寸), # 图像分辨率信息 "bboxs": [bbox1, bbox2], # 边界框信息 "solution": action, # JSON格式的动作解决方案 "prompt": conv, # 对话历史列表 "next_id": next_id # 下一步的ID(多轮训练时使用) }

3. 强化学习训练时的数据格式

_process_inputs 函数中,强化学习训练需要的核心数据字段:

python
展开代码
{ "id": task_id, # 任务ID "prompt": prompt, # 输入提示(对话历史) "completion_ids": tensor, # 生成的completion的token IDs "advantage": float, # 优势值(用于策略梯度) "reward": float, # 奖励值 "step_id": int # 步骤ID }

4. 动作Schema格式

所有生成的动作必须符合预定义的JSON Schema:

python
展开代码
{ "thought": "智能体的思维过程", # 可选 "POINT": [x, y], # 点击坐标(0-1000相对坐标) "to": "up/down/left/right" 或 [x,y], # 滑动方向或目标位置 "duration": 200, # 动作持续时间(毫秒) "PRESS": "HOME/BACK/ENTER", # 特殊按键 "TYPE": "输入的文本", # 文本输入 "STATUS": "continue/finish/..." # 任务状态 }

5. 强化学习特定的数据流

通过ZMQ进行异步数据处理,包含:

python
展开代码
@dataclass class TaskStatus: task_id: int completion_id: UUID score: float # 奖励得分 created_time: datetime advantage: Optional[float] # 优势值 @dataclass class TaskAndContent: data: dict # 原始数据 status: TaskStatus # 任务状态信息

6. 奖励函数验证

系统使用多个奖励函数来计算最终奖励:

  • react_check: 检查思考和动作格式
  • action_schema_check: 验证动作是否符合Schema
  • action_type_check: 检查动作类型
  • action_args_check: 验证动作参数

7. 多轮对话支持

对于多轮强化学习(GUIMTRFTDataset),数据格式支持:

  • 历史对话记录的累积
  • 历史图像的引用(低分辨率)
  • 步骤间的状态传递
  • 通过 next_id 链接多个步骤

💡 关键特点

  1. 图像处理:支持动态调整图像分辨率(默认最大1000像素)
  2. 坐标系统:使用0-1000的相对坐标系统
  3. 异步处理:通过ZMQ实现分布式数据加载和优势值计算
  4. 多样化提示:支持多种系统提示词模板
  5. 灵活的动作空间:支持点击、滑动、输入、特殊按键等多种操作

这种数据格式设计充分考虑了GUI自动化任务的特点,既支持单轮也支持多轮交互,并通过异步机制实现了高效的强化学习训练。

让我继续搜索项目中关于训练数据的具体信息,了解数据集的来源和内容。 Search files...

Ran tool

Ran tool

Ran tool

Search files...

📊 AgentCPM-GUI 强化学习训练数据详解

基于对项目代码的深入分析,我来为你说明这个项目强化学习所使用的训练数据:

🌟 使用的开源数据集

该项目主要使用以下几个开源数据集:

  1. CAGUI 数据集(中文应用)

    • 由 OpenBMB 团队开源在 Hugging Face
    • 覆盖 30+ 款中文应用(高德地图、大众点评、bilibili、小红书等)
    • 包含 Grounding 和 Agent 两类任务
  2. Android Control 数据集

    • 来自 Google Research
    • 分为 Low-level 和 High-level 两个难度级别
    • 提供安卓系统操作的标准测试集
  3. AITZ (Android in the Zoo) 数据集

    • 来自 CoAT 项目
    • 包含多种安卓应用操作任务
    • 涵盖 general、install、web_shopping、google_apps 等场景
  4. GUI-Odyssey 数据集

    • 来自 OpenGVLab
    • 提供跨平台的 GUI 操作任务
    • 用于评估模型的泛化能力

🔄 强化学习数据处理流程

强化学习训练需要特殊的数据格式,包含以下关键要素:

1. 原始数据格式

json
展开代码
{ "id": "任务ID", "image": { "<image_00>": "/path/to/screenshot_step0.png", "<image_01>": "/path/to/screenshot_step1.png" }, "conversations": [ {"role": "system", "content": "系统提示词"}, {"role": "user", "content": "<Question>用户任务</Question>\n当前屏幕截图:<image_00>"}, {"role": "assistant", "content": "{\"POINT\":[x,y],\"to\":\"up\"}"} ], "bbox": [[x1,y1,x2,y2]], // 可选:用于 grounding 任务 "bbox2": [[x1,y1,x2,y2]] // 可选:第二个边界框 }

2. 强化学习所需的额外数据

python
展开代码
{ "prompt": 对话历史, # 输入提示 "completion_ids": token_ids, # 生成的动作序列 "advantage": float, # 优势值(用于策略梯度) "reward": float, # 奖励值 "step_id": int # 多步骤任务中的步骤ID }

🎯 奖励函数设计

强化学习使用多个奖励函数来评估生成的动作质量:

  1. react_check: 检查思考过程和动作格式的正确性
  2. action_schema_check: 验证动作是否符合预定义的 JSON Schema
  3. action_type_check: 检查动作类型的合理性
  4. action_args_check: 验证动作参数的有效性

💡 数据特点

  1. 多模态输入:结合屏幕截图和文本指令
  2. 结构化输出:严格遵循 JSON Schema 的动作格式
  3. 多轮对话支持:支持历史状态和动作的累积
  4. 相对坐标系统:使用 0-1000 的归一化坐标
  5. 异步数据处理:通过 ZMQ 实现分布式训练

🚀 强化学习的优势

通过强化学习微调(RFT),模型获得了:

  • 思考能力:在输出动作前进行推理(<think> 标签)
  • 规划能力:制定和更新执行计划(<plan> 标签)
  • 反思能力:总结历史执行结果(<reflection> 标签)
  • 更高的任务成功率:在复杂任务上表现显著提升

这些开源数据集和强化学习训练方法,使得 AgentCPM-GUI 成为首个支持中文应用操作的开源 GUI 智能体模型,在多个评测基准上达到了 SOTA 水平。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!