食谱:CollabLLM

最后更新:2025年9月22日。

开源算法实现与实验运行:Haiquan Chen, Shirley Wu

🏠 主页 | 📝 论文 | 🤗 数据集与模型 | ⭐️ 原始实现

verl 为 ICML 2025 优秀论文 “CollabLLM: From Passive Responders to Active Collaborators” 提供了一个实现方法。 CollabLLM 是一个统一的微调框架,可优化大型语言模型 (LLM),使其能够与用户进行有效且高效的多轮协作。

核心思想: 模型将根据其响应在与用户进行未来有效协作方面的表现获得奖励。

论文作者:Shirley Wu, Michel Galley, Baolin Peng, Hao Cheng, Gavin Li, Yao Dou, Weixin Cai, James Zou, Jure Leskovec, Jianfeng Gao


快速开始

0. 环境

确保已安装 verl 所需的软件包。此外,请安装 litellm 并导出所需的 API 密钥。API 模型将用于用户模拟器,并可选择用于 LLM 裁判(请参阅下面的配置部分)。

1. 准备你的数据集

首先,使用提供的脚本处理你的数据集(有关示例命令和用法,请参阅 process_dataset.py):

python process_dataset.py --dataset <> ... --dataset_type <sft or rl>

要求:

  • 输入:一个 Hugging Face 多轮数据集。现有数据集:collabllm/collabllm-multiturn-$DATASET,其中 DATASET 是 [math-hard(-large), medium(-large), bigcodebench(-large)] 中的一个(-large 是 CollabLLM 论文中使用的Даные)

  • 示例格式:请参阅 collabllm/collabllm-multiturn-math-hard

  • 生成自己的数据集:使用原始 CollabLLM 存储库中的 build_dataset.py

2. 训练你的模型

(可选)监督微调 (SFT):

bash train_sft_collabllm.sh

强化学习 (RL):

bash train_rl_collabllm.sh

RL 脚本展示了一个在 math-hard-large 上训练 CollabLLM 的示例。

  • 用于采样未来对话的配置位于 recipe/collabllm/config/collabllm_interaction_config.yaml

  • 多轮感知奖励 (Multiturn-aware Reward) 从以下三个对话级别奖励中聚合:

    +reward_model.reward_kwargs.metric_weights.accuracy=1 \
    +reward_model.reward_kwargs.metric_weights.interactivity=1 \
    +reward_model.reward_kwargs.metric_weights.token_amount=-0.0001 \
    

    你可以根据你的任务删除、添加或修改权重。你可以在 recipe/collabllm/metrics 下添加支持的指标列表。例如,在 medium-large 上,你可以通过以下方式将 accuracy 替换为 bleu_score

    +reward_model.reward_kwargs.metric_weights.bleu_score=1
    

    这将改为对采样到的未来对话应用 BLEU 分数。

算法

步骤

名称

描述

1

模型响应生成

模型为批处理中的每个提示生成多个响应。

2

协作模拟

用户模拟器(例如 GPT 或 Claude)最多模拟 max_user_turns 轮,为每个提示采样 num_repeat_rollouts 次对话。

3

计算多轮感知奖励

将自定义的对话奖励函数应用于采样到的对话。奖励会进行聚合,然后跨模拟次数取平均值。

4

更新模型

使用计算出的多轮感知奖励来更新模型权重。


配置

主要配置通过启动脚本 train_rl_collabllm.sh 和 YAML 文件 recipe/collabllm/config/collabllm_interaction_config.yaml 进行管理。关键配置部分:

部分

关键参数 / 说明

data

训练/验证文件路径、批处理大小、序列长度。

actor_rollout_ref (通用)

基础模型路径(用于 actor + 初始参考)、FSDP 设置、优化器(学习率、调度器)。

actor_rollout_ref (CollabLLM 特有)

actor_rollout_ref.rollout.multi_turn 下的超参数:max_user_turnsmax_assistant_turnsnum_repeat_rollouts

interaction

collabllm_interaction_config.yaml 中定义。指定用户模拟器和超参数。需要导出 API 密钥。

reward_model

默认管理器设置为 collabllm。修改 reward_model.reward_kwargs.metric_weights 来配置对话奖励和权重。LLM 裁判的超参数(例如 modeltemperature)位于 reward_model.reward_kwargs.llm_judge_kwargs 下。

algorithm

GRPO 特有的超参数,例如 actor_rollout_ref.rollout.n

trainer

分布式训练(节点、每节点 GPU)、日志记录(WandB)、检查点频率。


关键文件

文件路径

目的

recipe/collabllm/collabllm_agent_loop.py

主要逻辑,用于采样未来对话,使用 verl/interactions/collabllm_interaction.py 中的 CollabLLMInteraction

verl/workers/reward_manager/collabllm.py

计算未来对话的奖励,利用 recipe/collabllm/reward_function.py 来应用每个指标。


致谢

我们衷心感谢 verl 社区和顾问的贡献和指导!