写点什么

veRL CollabLLM recipe: 奖励全局最优,训练出善于对话的协作型 LLM

  • 2025-10-23
    北京
  • 本文字数:3951 字

    阅读完需:约 13 分钟

资料来源:火山引擎-开发者社区


LLM 协作能力瓶颈与 CollabLLM 的创新思路

大型语言模型(LLMs)已经能够解决奥林匹克竞赛等难题,但却常在极其简单的日常多轮对话中表现较差。对于大多数用户提出的不够具体的需求,这些 AI 工具可能会作出不当假设、忽略关键细节或未能提出澄清问题、以及无法主动提供建议。比如对于用户“我需要写一篇关于乐观的文章”的需求,AI 工具可能会假设文章需要的字数、忽略或不询问用户希望文章需要覆盖的内容、无法主动提出有效建议。这样的消极表现会削弱用户信任并损害现实交互,而这些交互中细微差别往往至关重要。

这种表现不足的关键原因在于它们的训练和评估方式。大多数基准测试采用单轮且指令明确的提示。训练方法侧重于优化模型的即时回应,而非其对成功多轮对话的贡献。然而,现实世界的互动本质上是动态协作的,依赖于上下文理解、信息澄清和共同认知的建立。

使用传统的强化学习算法奖励的是单轮最优,意味着我们只关注模型的下一步回答是否有效。而当模型跟用户持续交流对话的时候,怎么扩展到全局最优?CollabLLM 提供了一个解决方案,现在已经作为 veRL 的 recipe,提供了可复现的训练脚本,能够实现有监督的微调训练(SFT)和强化学习(RL)。

CollabLLM:以用户为中心的训练方法

为了解决这个问题,CollabLLM 团队探索了以用户为中心的大型语言模型训练方法。将模型置于模拟用户交互的环境中,通过强化学习,模型学习何时提问以及如何根据情境调整语气和沟通风格。这种用户中心的方法帮助弥合了大型语言模型的训练方式与人们实际使用方式之间的差距。

这就是获得了 ICML 杰出论文奖(https://icml.cc/virtual/2025/awards\_detail)的 CollabLLM(https://wuyxin.github.io/collabllm/)背后的概念。如图 1 所示,这个训练框架通过模拟多轮交互来改进大型语言模型。CollabLLM 的核心见解简单而深刻:在有效协作中,回应的价值不仅在于即时实用性,还在于它如何促进整个对话的成功。一个澄清性问题可能看似增加延迟,但往往带来更好的结果;而快速回答虽然看似有用,却可能造成混淆或使交互偏离正轨。

图 1:对比两种 LLM 训练方法的示意图

(a) 标准方法缺乏用户-Agent 协作且使用单轮奖励,导致对话效率低下

(b) 相比之下,CollabLLM 在训练过程中模拟多轮用户-Agent 交互,使其能够学习有效的协作策略并产生更高效的对话。

CollabLLM 通过基于模拟用户未来交互的训练循环将这种协作方法付诸实践,如图 2 所示。在对话的任何时刻,模型都会通过与模拟的用户对话来生成多种可能的下一轮回应。

图 2:CollabLLM 使用的基于模拟用户未来交互的训练过程

系统通过多次采样逐步扩展对话,并对整个交互过程进行评分,评估多轮对话的最终效果,同时引入适当随机性以丰富对话路径。这样做的目的是使模型接触多样化的对话场景,从而学习更有效的协作策略。

对每次对话,系统应用多轮感知奖励(MR)函数来评估模型在特定轮次的响应如何影响整个对话流程。系统从模型中采样不同类型的回应(如陈述、建议和问题),并基于这些回应在后续对话中的表现分配奖励。评估过程使用自动化指标来衡量整个对话的质量,这些指标涵盖任务完成度、对话效率和用户参与度等关键方面。

为评估采样对话的质量,系统采用特定任务指标和“LLM-as-a-judge”,实现高效且可扩展的评估。例如,对于参与度这类指标,评判模型会对每个采样对话给出 0 到 1 之间的分数。

每个模型响应的 MR 值通过计算该响应所产生的所有采样对话分数的平均值来确定。基于这些分数,模型使用强化学习算法(如近端策略优化 PPO 或直接偏好优化 DPO)来更新参数。

CollabLLM 团队通过自动化评估和人工评测相结合的方式测试了该算法,详细结果可在 论文(https://arxiv.org/pdf/2502.00640)中查阅。研究亮点之一是一项涉及 201 名参与者的文档共创任务,如图 3 所示。将 CollabLLM 与两个基线模型进行比较:一个使用单轮奖励训练的基础模型,和一个被提示主动提问并采取主动步骤的增强模型。结果表明,CollabLLM 在文档质量、用户交互体验和任务完成时间方面均优于这两个基线。

图 3:将 CollabLLM 与使用单轮奖励训练的基线模型进行比较的文档共创任务用户研究结果

veRL 工具链:CollabLLM 训练的技术支持与实现

为了使用强化学习算法实现 CollabLLM,veRL 提供了几个关键的功能点:

1.Interaction。veRL interaction 功能能够在强化学习训练过程中提供动态的、多轮的对话式反馈。该系统允许模型参与迭代式问题解决场景。在 CollabLLM 的场景中,Interaction 的角色是用户模拟器,能够模拟用户跟 LLM 对话,以实现图 2 所示的基于模拟用户未来交互的训练过程。为了适应不同使用场景,系统提供了一个扩展机制,通过从 BaseInteraction 派生的方法,可以灵活定义各种交互对象。具体使用方法可以参考:https://github.com/volcengine/veRL/blob/main/recipe/collabllm/collabllm\_interation.py

2.异步计算奖励。使用 LLM judge 的时候,如果在 rollout batch 全部完成后,集中进行奖励计算,会产生比较高的 LLM API 并发请求。因为 LLM API 的服务商通常有 TPM 或者 QPM 的访问限流,影响奖励计算性能。由于每次对话的输出长度有差异,使用异步奖励的机制可以把集中的奖励计算分散到每次对话完成的时候立刻进行,能够降低 LLM API 请求峰值,避免触发 TPM 限流,并有效缩短训练时间。

3.自定义 Agent Loop。Agent Loop 是 veRL 的多轮对话 Agent 的通用接口,能够让用户自行扩展 Agent 的功能,实现端到端的 Agent 训练。Agent Loop 有个特点是采用了 token-in-token-out 的机制,避免对 generate 的数据做 token 和文本之间的二次转换,保证训练的精度。

CollabLLM recipe 提供了两个训练脚本,分别用于实现 SFT 和 GRPO RL:

1.https://github.com/volcengine/veRL/blob/main/recipe/collabllm/train\_sft\_collabllm.sh

2.https://github.com/volcengine/veRL/blob/main/recipe/collabllm/train\_rl\_collabllm.sh

豆包模型推理服务:支撑 CollabLLM 的基础推理能力

CollabLLM 有两个组件使用 liteLLM 作为客户端访问 LLM API:用户模拟器和 LLM judge。推荐使用火山引擎提供的豆包模型推理服务,可以参考下面的配置:


训练脚本: recipe/collabllm/train_rl_collabllm.sh

CollabLLM 训练实践:关键问题与解决方案

模型语言不统一(Language inconsistency)

在 RL 的训练过程中发现,如果使用 Qwen 作为 base model,模型训练过程中语言容易不一致,比如同时在一段话中输出英文和中文。解决办法是先对模型做 SFT 训练,再做 RL 训练,这种现象基本消失。如果使用 Llama 作为 base model,以上问题不会出现。

避免奖励破解(Reward hacking)

在使用 veRL 复现 CollabLLM 训练的过程中,观察到模型学习到了一些奇怪的行为,输出的内容包含一些错误的单词、重复的词汇,随着训练迭代最终输出会变得非常混乱。这个问题的是使用 LLM-as-a-judge 打分导致的。因为对数学数据集做训练时,CollabLLM 使用了 3 个维度来计算奖励分数:

1.任务完成度(加分)

2.Interactivity 用户参与度(加分)

3.token 数量(减分)

每个样本按上述 3 个指标打分,然后对多次采样取平均值。这 3 个指标都不会评估模型输出的内容是否符合语法,有时候会因为 LLM 输出长度达到上限而停止输出,包含了不符合语法句子,但是又因为用户参与度的指标得到加分。针对这个问题,我们对输出内容的格式做了过滤,需要符合以下条件:

1.必须与配对存在 

2. 内外均非空

3.不可嵌套,且最多允许一个 块

4.除结尾的 "<|im_end|>",输出不能为空

如果不符合就取消用户交互和 LLM-as-a-judge 的过程,直接给最低分。

加上上述规则后,就没有再遇到非常离谱的奖励破解现象。

对 LLM Judge 设置细粒度的评分规则

如果在多轮感知奖励(MR)中的用到了 LLM Judge 评分机制。那么取决于 LLM Judge 模型类别以及 prompt 给出的评分规则,分数的范围将有所不同。

训练中发现,如果给 LLM Judge 的评分规则概括性太强或者过于粗颗粒度,那么 LLM Judge 对不同模型回答的区分度将变低。解决方法是,对于 LLM Judge 的打分制定详细的打分规则,比如,在 Interactivity 的计算中,我们利用以下细颗粒度的评分(具体内容请参看 collabllm receipt 下的 metrics/interactivity.py):

当给出的评分规则达到细颗粒度,模型能够更好地往能进一步的方向发展。

A100 上训练精度问题

在 veRL 上开发和验证时,遇到了很明显的 grad norm 爆炸问题,grad norm 会随着训练时间逐渐变大,同时伴随模型能力下降,如下图所示:


这个问题在切换 GPU 后消失。借助 veRL 的 calculate_log_probs 功能,定位到是推理和训练的精度不一致导致的,默认的推理引擎配置在 A100 上有显著的精度问题。

通过跟 SGLang 对比,定位到问题来自 vLLM,于是在 vLLM 的社区找到了相关的 issue,使用提供的 disable_cascade_attn 验证了一下,果然解决了问题:

经过跟 vLLM 研发的交流,我们得知这是 vLLM flash attention 的一个已知问题(https://github.com/vllm-project/flash-attention/pull/87),该问题的触发条件是:

1.使用非 Hopper 架构的硬件(issue 中提到跟 SMs 数量相关)

2.输入和输出的序列较长,匹配了使用 Qwen3 做多轮对话训练的场景

由于 SGLang 和 Transformer 都是使用 pip 管理的 flash attention,跟 vLLM 使用了自己维护的 flash attention 版本(https://github.com/vllm-project/flash-attention)不同,所以并没有精度不一致的问题。 由于 vLLM 已经提交了相关的 bug fix,在下次发版的时候会修复这个问题,所以我们在 veRL 中增加了一个 FAQ (https://verl.readthedocs.io/en/latest/faq/faq.html#missmatch-between-inference-and-training-sequence-high-actor-grad-norm)来临时提供规避方案(关闭 vLLM cascade_attn)。


用户头像

还未添加个人签名 2022-01-25 加入

还未添加个人简介

评论

发布
暂无评论
veRL CollabLLM recipe: 奖励全局最优,训练出善于对话的协作型 LLM_LLM_火山引擎开发者社区_InfoQ写作社区