使用 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 # 网络搜索验证
快速开始
先决条件
在开始之前,请确保你已经:
- 完成了 快速开始 指南以进行环境设置
- 安装了所有依赖项:
uv sync --all-extras - 激活了虚拟环境:
source .venv/bin/activate - 在
.env文件中配置了 API 密钥
基本工作流
实战过程遵循以下步骤:
- 数据准备:上传用于实战和评估的数据集
- 验证设置:配置特定领域的验证函数
- 配置:准备智能体、评估和实战配置
- 基线评估:评估初始智能体性能
- 运行 Training-Free GRPO:执行实战过程
- 评估增强后的智能体:评估提升后的性能
配置系统
实战模块使用分层配置方法:
配置层级
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
实战输出
实战过程生成:
- 增强的智能体配置:包含整合经验的 YAML 文件
- 追踪日志:通过 Phoenix(如果启用)的详细日志:
- Rollout 轨迹
- 经验提取步骤
- 每一步的统计数据
- 评估性能(如果启用了
do_eval) - 经验记录:数据库中的结构化记录
评估增强后的智能体
实战完成后,评估增强后的智能体:
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 裁判进行细致的评估
- 实现特定领域的指标
- 为经验提取提供详细的推理
多阶段实战
为了进行迭代改进,你可以:
- 在更简单的数据集上运行初始实战
- 在逐渐变难的基准测试上进行评估
- 使用更难的示例继续实战
- 使用
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}},
}