Skip to content

IQuestLab/ote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧬 OTE: Open-Ended Tri-Evolution v0

OTE 是一个面向开放世界开放任务 Agent 的 proposer–solver–judge 协同进化框架,并提供 deep research 场景下从训练、工具接入到评测的一体化可复现流程。

Python RL algorithms PRs welcome Hugging Face arXiv

中文 | English


✨ 特性

  • Proposer–Solver–Judge co-evolution: 通过 YAML 配置每个角色是否以及如何进化、是否使用工具以及遵循哪个RL算法。
  • 可插拔 RL 算法:solver 与 proposer 均支持 GRPO / GSPO / REINFORCE++ / RLOO / SeeUPO。
  • 任务可移植:deep-research 专属代码隔离到 task 插件,加新任务无需改框架或训练引擎。
  • 数据源工具可配置:用 YAML 声明与数据源交互的工具(如 MCP 搜索),并指定 MCP server 的 IP/端口。
  • 自定义进化方式:写一个 Python 函数即可作为新的进化策略。

与现有训练框架的定位对比

维度 OTE verl open-instruct trl
Open-ended task
Open-ended environment
Tri-evolution
RL
自定义进化方式
YAML 配置进化方式

占位符约定:下文中 <...> 表示需要你替换的值(路径 / 端口 / IP / 模型名 / API key 等)。

仓库分两部分:

ote/
├── rl/open-instruct/      # 进化训练框架(proposer / solver / judge)
└── agent/                 # agent 部署与评测

一、🚀 RL 进化训练框架

代码位于 rl/open-instruct/,核心:

open_instruct/
├── grpo_fast_evolve_v2.py        # 训练引擎(入口函数 cli_main(argv))
├── rl_algorithms.py              # RL 算法: grpo/gspo/reinforce_pp/rloo/seeupo/rltr
├── evolve_framework/             # 配置驱动的编排层
│   ├── config.py                 # YAML schema + argv 渲染
│   ├── registry.py               # 进化策略注册表 + BuildContext
│   ├── strategies/               # 内置策略: proposer / solver / judge
│   ├── loader.py                 # YAML -> 训练引擎 CLI
│   └── run.py                    # CLI 入口
└── tasks/                        # 任务插件层(task-specific 代码隔离在此)
    ├── base.py                   # Task 接口
    └── deep_research/            # deep-research 任务实现 + 复现配置
        ├── task.py
        └── configs/{real_tool,no_tool}/{run,proposer,solver,judge,tools}.yaml

设计:task 提供与任务相关的常量参数(数据集、系统提示、工具、rubric 默认值)角色策略只设置该角色的"进化旋钮"(是否用工具、用哪种 RL 算法、是否进化等), 框架把二者合成为训练引擎的命令行参数。

环境配置

cd <ote>/rl/open-instruct
conda create -n dr_agent_train python=3.10 -y && conda activate dr_agent_train
uv sync

仓库内已包含 uv sync 所需的 pyproject.tomluv.lock。配置完成后,在 rl/open-instruct/ 下通过 uv run 运行训练命令。

1.1 快速开始(hote,两种模式)

cd <ote>/rl/open-instruct
conda activate dr_agent_train

export MODEL_PATH=<solver_checkpoint>          # solver(作答模型)
export QUERY_MODEL_PATH=<proposer_checkpoint>  # proposer(出题模型)
export JUDGE_URL=http://<HOST>:<PORT>/v1       # judge/rubric/citation 用的 OpenAI-compatible 服务
export JUDGE_NAME=<judge_model_name>           # 同一 judge 服务中的模型名
export OPENAI_API_KEY=<judge_api_key>          # 若服务不校验 key,可使用占位值

# 模式 A —— hote + 接入数据源工具(real_tool 配置)
EVOLVE_CONFIG=open_instruct/tasks/deep_research/configs/real_tool/run.yaml \
  uv run bash ./siflow_multinode_evolve_framework.sh

# 模式 B —— hote + 不接入工具,纯参数化知识(no_tool 配置)
EVOLVE_CONFIG=open_instruct/tasks/deep_research/configs/no_tool/run.yaml \
  uv run bash ./siflow_multinode_evolve_framework.sh

siflow_multinode_evolve_framework.sh 会从 JUDGE_URL / JUDGE_NAME 统一派生 OPENAI_BASE_URLRUBRIC_JUDGE_MODELRUBRIC_GENERATION_MODELCITATION_JUDGE_MODEL,保证 rubric 生成、rubric 评分与 citation 评分使用同一 judge 服务配置。

只想看将要执行的训练命令、不真正训练:

uv run python -m open_instruct.evolve_framework.run \
  --config open_instruct/tasks/deep_research/configs/real_tool/run.yaml --dry-run

siflow_multinode_evolve_framework.sh 负责 Ray 多机编排与 GPU 资源切分,随后调用框架。

1.2 Usage

YAML 配置结构、自定义进化方式(写 Python)、增加新任务、增加新数据源工具等详细用法,见 doc/usage.md


二、🔬 Agent 部署与评测

代码位于 agent/。下述流程用于部署 MCP 工具服务、部署待评测模型,并在 benchmark 上评测。

前置条件

  • conda 环境 dr_agent,从本地 agent/ 包安装:

    cd <ote>/agent
    conda create -n dr_agent python=3.10 -y && conda activate dr_agent
    uv pip install -e .

    仓库内已包含安装所需的 pyproject.tomluv.lock

  • 检索类工具所需的 API key 通过环境变量提供(值替换为你自己的):

    export SERPER_API_KEY="<your_serper_key>"   # 网页搜索
    export S2_API_KEY="<your_s2_key>"           # Semantic Scholar
    export JINA_API_KEY="<your_jina_key>"       # 网页读取

整体拓扑:MCP 工具服务(CPU)+ 待评测模型与 browse 总结模型(GPU)+ 评测脚本。

2.1 第一步:部署 MCP 工具服务(CPU 节点)

cd <ote>/agent
conda activate dr_agent
# 先 export 上面三个 API key
uv run --extra vllm python scripts/launch_evaluation_cpu.py \
  --mcp-port <MCP_PORT> --mcp-host 0.0.0.0

2.2 第二步:部署待评测模型 + browse 总结模型(GPU 节点)

cd <ote>/agent
conda activate dr_agent
uv run --extra vllm python scripts/launch_evaluation_gpu.py \
  --search-model  <MODEL_UNDER_TEST_CHECKPOINT> --search-gpu-id "0" --search-port <SEARCH_PORT> \
  --browse-model  <BROWSE_SUMMARIZER_MODEL>     --browse-gpu-id "1" --browse-port <BROWSE_PORT>
  • --search-model:被评测的 deep-research 模型 checkpoint。
  • --browse-model:用于总结网页内容的模型。
  • 两个模型分别占用不同 GPU 与端口。

2.3 第三步:运行评测

通过环境变量把上面部署的服务地址、评测阶段、模型、任务串起来,然后运行评测脚本:

cd <ote>/agent
conda activate dr_agent
LOCAL_GRADER=true \
SEARCH_AGENT_BASE_URL=http://<HOST>:<SEARCH_PORT>/v1 \
BROWSE_AGENT_BASE_URL=http://<HOST>:<BROWSE_PORT>/v1 \
FAKE_TOOL_BASE_URL=http://<HOST>:<PORT>/v1 \
EVAL_STAGE=real_tool \
MODEL_PATH=<MODEL_UNDER_TEST_CHECKPOINT> \
TASKS="<task_name>" \
CHECKPOINT=<run_label> \
  uv run --extra vllm bash scripts/evaluate.sh
  • EVAL_STAGEreal_tool / no_tool(与训练阶段对应)。
  • TASKS:评测任务名(如 healthbench 等)。
  • CHECKPOINT:本次评测的标识名(用于结果归档)。
  • SEARCH/BROWSE/FAKE_TOOL_BASE_URL:分别指向第二步部署的服务与(如需)模拟工具服务。

2.4 特定 benchmark 的评测

DeepResearch Bench(对采样得到的轨迹进行评测;环境配置参考官方 https://github.com/Ayanami0730/deep_research_bench):

conda activate drb
export TASK_NAME="<run_label>"
bash <ote>/agent/evaluation/deep_research_bench_eval/run_drb_eval.sh

DeepResearch Bench II(环境配置参考官方 https://github.com/imlrz/DeepResearch-Bench-II):

conda activate drbench-II
cd <DeepResearch-Bench-II_repo>
# 1) 先对报告 PDF 评分
python run_evaluation.py --pdf_dir report --out_jsonl result.jsonl --chunk_size 50
# 2) 上一步完成后再聚合得分
python aggregate_scores.py --input result.jsonl --tasks-file tasks_and_rubrics.jsonl

TODO

  • Scaling 参数规模和工具调用次数
  • 支持 open-instruct、slime 和 verl 后端
  • 更好地支持中文能力
  • 更好地支持指令 in the wild
  • 支持更多 open-ended agentic 任务
  • 支持更多与开放世界交互的方式

📚 参考

感谢 DR Tulu 仓库对 deep research agent 训练与评测体系的贡献。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages