跳转至

使用 Training-Free GRPO 进行智能体实战

本指南涵盖了 Youtu-Agent 中的智能体实战功能,该功能由 Training-Free Group Relative Policy Optimization (GRPO) 提供支持。Training-Free GRPO 是一种具有成本效益的解决方案,它通过利用组相对语义优势并迭代蒸馏高质量的经验知识,在无需更新 LLM 参数的情况下增强智能体性能。

概览

实战模块提供以下核心功能:

  • 免训练学习:在不微调模型参数的情况下提高智能体性能
  • 经验蒸馏:提取并整合高质量的经验知识
  • 灵活评估:通过自定义验证函数配置奖励计算
  • 领域适应:支持从数学推理到网络搜索的各种任务

模块结构

utu/practice/
├── __init__.py                 # 模块导出
├── training_free_grpo.py       # 主协调器
├── rollout_manager.py          # Rollout 执行和批处理
├── experience_updater.py       # 经验处理和整合
├── data_manager.py             # 数据集管理
├── utils.py                    # 配置解析和实用工具
├── dataset/                    # 数据集存储目录
└── verify/                     # 验证函数
    ├── math.py                 # 数学验证
    └── webwalker.py            # 网络搜索验证

快速开始

先决条件

在开始之前,请确保你已经:

  1. 完成了 快速开始 指南以进行环境设置
  2. 安装了所有依赖项:uv sync --all-extras
  3. 激活了虚拟环境:source .venv/bin/activate
  4. .env 文件中配置了 API 密钥

基本工作流

实战过程遵循以下步骤:

  1. 数据准备:上传用于实战和评估的数据集
  2. 验证设置:配置特定领域的验证函数
  3. 配置:准备智能体、评估和实战配置
  4. 基线评估:评估初始智能体性能
  5. 运行 Training-Free GRPO:执行实战过程
  6. 评估增强后的智能体:评估提升后的性能

配置系统

实战模块使用分层配置方法:

配置层级

configs/
├── agents/practice/              # 智能体配置
│   ├── math_agent.yaml
│   ├── math_practice_agent.yaml
│   ├── web_agent.yaml
│   └── web_practice_agent.yaml
├── eval/                         # 评估配置
│   ├── math/
│   │   ├── math_AIME24.yaml
│   │   └── math_AIME25.yaml
│   └── web/
│       ├── web.yaml
│       └── web_practice.yaml
└── practice/                     # 实战配置
    ├── math_reasoning.yaml
    └── web_search.yaml

配置组件

TrainingFreeGRPOConfig:统一配置类,包含:

  • exp_id:实验标识符
  • PracticeArguments:实战特定参数(epoch、批次大小、GRPO 设置)
  • DataArguments:数据处理参数
  • EvalConfig:评估配置引用

实用工具

  • TaskRecorder:记录实战进度、经验和统计数据
  • parse_training_free_grpo_config():带有 YAML 文件和命令行覆盖的配置解析器

数据准备

从 HuggingFace 上传

使用提供的脚本加载内置数据集:

python scripts/data/process_training_free_GRPO_data.py

内置数据集包括:

  • AIME24/AIME25:AIME 竞赛问题
  • DAPO-Math-17k:来自 DAPO 数据集的数学问题
  • AFM_web_RL:网络智能体强化学习数据集
  • WebWalkerQA:网络导航问答数据集

上传自定义数据集

从本地文件上传你自己的数据集:

python scripts/data/upload_dataset.py \
  --file_path path/to/your_dataset.jsonl \
  --dataset_name YourDataset

每个样本的 必填字段

{
    "dataset": "YourDataset",           # 数据集名称
    "source": "training_free_grpo",     # 必须是 "training_free_grpo"
    "question": "What is 2+2?",         # 问题/提示词
    "answer": "4"                       # 预期答案(或 None)
}

验证函数

验证函数是奖励计算系统的核心,提供特定领域的评估标准。

函数接口

utu/practice/verify/ 中创建验证函数:

from utu.db import EvaluationSample

def verify_func(sample: EvaluationSample, timeout_score: float = 0, **kwargs) -> dict:
    """
    验证智能体响应的正确性。

    Args:
        sample: EvaluationSample 包含:
            - raw_question: 原始问题
            - correct_answer: 地面实况(Ground truth)答案
            - response: 智能体的最终响应
            - other metadata fields
        timeout_score: 超时情况的分数
        **kwargs: 其他参数,包括:
            - llm: 用于需要判断的验证的 LLM 客户端

    Returns:
        dict: {
          "reward": float,          # 范围从 0.0 到 1.0
          "reasoning": str | None   # 经验提取的额外细节
        }
    """
    # 你的验证逻辑在这里
    pass

内置验证函数

数学验证 (utu/practice/verify/math.py):

  • 使用符号数学验证
  • 将提取的表达式与地面实况进行比较
  • 需要 math-verify 包:uv pip install math-verify

网络搜索验证 (utu/practice/verify/webwalker.py):

  • 基于 LLM 的网络搜索响应判断
  • 使用裁判 LLM 将智能体响应与地面实况进行比较
  • 通过 kwargs['llm'] 访问裁判

自定义验证

简单字符串匹配的示例:

# utu/practice/verify/str_match.py
from utu.db import EvaluationSample

def string_match_verify(sample: EvaluationSample, timeout_score: float = 0, **kwargs) -> dict:
    """简单字符串匹配验证。"""
    if sample.correct_answer.lower() == sample.response.lower():
        return {"reward": 1.0, "reasoning": None}
    return {"reward": 0.0, "reasoning": None}

配置文件

智能体配置

configs/agents/practice/ 中创建或使用现有的智能体配置。有关详细配置选项,请参阅 智能体

评估配置

configs/eval/ 中创建评估配置:

# configs/eval/my_domain/my_eval.yaml
# @package _global_
defaults:
  - /agents/practice/my_agent@agent
  - _self_

exp_id: "my_eval"

# 评估数据集
data:
  dataset: "MyEvalDataset"
  type: "single"

# 评估设置
concurrency: 64
pass_k: 3

# 验证函数
verify_filename: "my_verify.py"
verify_func_name: "my_verify_func"

# 可选:用于基于 LLM 验证的裁判模型
judge_model:
  model_provider:
    type: ${oc.env:JUDGE_LLM_TYPE}
    model: ${oc.env:JUDGE_LLM_MODEL}
    base_url: ${oc.env:JUDGE_LLM_BASE_URL}
    api_key: ${oc.env:JUDGE_LLM_API_KEY}
  model_params:
    temperature: 0.5

实战配置

configs/practice/ 中创建实战配置:

# configs/practice/my_practice.yaml
# @package _global_
defaults:
  - /eval/my_domain/my_eval@evaluation
  - _self_

exp_id: "my_practice"

# 实战参数
practice:
  epochs: 5
  batch_size: 32
  grpo_n: 3
  rollout_concurrency: 64
  rollout_temperature: 0.7
  task_timeout: 3600
  do_eval: false
  eval_strategy: "epoch"
  restart_step: null
  agent_objective: |
    input: Description of input
    output: Description of expected output
  learning_objective: |
    Description of learning goals and expected experiences
  num_experiences_per_query: 1

# 数据参数
data:
  practice_dataset_name: "MyPracticeDataset"

运行实战

评估基线

首先,评估基线智能体:

python scripts/run_eval.py \
  --config_name my_domain/my_eval

执行 Training-Free GRPO

运行实战过程:

# 使用配置文件
python scripts/run_training_free_GRPO.py \
  --config_name my_practice

# 带参数覆盖
python scripts/run_training_free_GRPO.py \
  --config_name my_practice \
  --experiment_name my_practice \
  --epochs 5 \
  --batch_size 64

重启行为

使用 --restart_step 控制缓存和重启:

# 完全重启(无缓存)
python scripts/run_training_free_GRPO.py \
  --config_name my_practice \
  --restart_step 0

# 从缓存结果恢复(默认)
python scripts/run_training_free_GRPO.py \
  --config_name my_practice \
  --restart_step null

# 部分重启:缓存步骤 0-2,从步骤 3 重启
python scripts/run_training_free_GRPO.py \
  --config_name my_practice \
  --restart_step 3

实战输出

实战过程生成:

  1. 增强的智能体配置:包含整合经验的 YAML 文件
  2. 追踪日志:通过 Phoenix(如果启用)的详细日志:
  3. Rollout 轨迹
  4. 经验提取步骤
  5. 每一步的统计数据
  6. 评估性能(如果启用了 do_eval
  7. 经验记录:数据库中的结构化记录

评估增强后的智能体

实战完成后,评估增强后的智能体:

python scripts/run_eval.py \
  --config_name my_domain/my_practice

示例工作流

数学推理

数学推理任务的完整工作流:

# 安装依赖项
uv pip install math-verify

# 准备数据
python scripts/data/process_training_free_GRPO_data.py

# 评估基线
python scripts/run_eval.py --config_name math/math_AIME24
python scripts/run_eval.py --config_name math/math_AIME25

# 运行实战
python scripts/run_training_free_GRPO.py --config_name math_reasoning

# 评估增强后的智能体
python scripts/run_eval.py --config_name math/math_practice_AIME24
python scripts/run_eval.py --config_name math/math_practice_AIME25

网络搜索

网络搜索任务的完整工作流:

# 在 .env 中设置环境变量
SERPER_API_KEY=your-serper-api-key
JINA_API_KEY=your-jina-api-key

# 准备数据
python scripts/data/process_training_free_GRPO_data.py

# 评估基线
python scripts/run_eval.py --config_name web/web

# 运行实战
python scripts/run_training_free_GRPO.py --config_name web_search

# 评估增强后的智能体
python scripts/run_eval.py --config_name web/web_practice

追踪与监控

启用 Phoenix 追踪以进行详细监控:

# 安装 Phoenix
pip install arize-phoenix

# 启动 Phoenix 服务器
phoenix serve

# 在 .env 中配置
PHOENIX_ENDPOINT=http://127.0.0.1:6006/v1/traces
PHOENIX_PROJECT_NAME=Youtu-Agent

Phoenix 提供以下可视化:

  • Rollout 轨迹和智能体决策
  • 经验提取过程
  • 实战进度和统计数据
  • 随时间变化的评估指标

高级主题

自定义奖励函数

对于复杂领域,你可以创建复杂的验证函数,这些函数可以:

  • 结合多个评估标准
  • 使用 LLM 裁判进行细致的评估
  • 实现特定领域的指标
  • 为经验提取提供详细的推理

多阶段实战

为了进行迭代改进,你可以:

  1. 在更简单的数据集上运行初始实战
  2. 在逐渐变难的基准测试上进行评估
  3. 使用更难的示例继续实战
  4. 使用 restart_step 在先前的结果基础上构建

超参数调优

需要优化的关键参数:

  • batch_size:每批样本数(影响内存和速度)
  • grpo_n:每组的 Rollout 数(越高越好,但越慢)
  • rollout_temperature:Rollout 期间的 LLM 温度
  • num_experiences_per_query:每个查询提取的经验数

API 参考

有关详细的 API 文档,请参阅:

引用

如果你觉得这项工作有用,请考虑引用:

@misc{training_free_grpo,
      title={Training-Free Group Relative Policy Optimization},
      author={Tencent Youtu Lab},
      year={2025},
      eprint={2510.08191},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2510.08191},
}

@misc{youtu-agent-2025,
  title={Youtu-agent: A Simple yet Powerful Agent Framework},
  author={Tencent Youtu Lab},
  year={2025},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/TencentCloudADP/youtu-agent}},
}