长上下文 RL 训练数据该怎么造?让搜索 Agent 帮你筛干扰项
一篇把"训练数据构造"和"过程监督"两件事一起重做的长上下文 RL 论文
写在前面
你有没有这种感觉:长上下文模型这两年在 needle-in-a-haystack 这种针刺任务上已经接近满分,但一旦把问题换成"在 128K 文档里做多跳推理",表现立刻塌方?
这其实不是模型 attention 不够长。是它从来没被认真训练过——在一堆真正容易混淆的干扰文档里,把推理一步一步做完。
随手翻开一个长上下文 RL 项目的训练数据,你大概率会看到这样的配方:拿一个多跳问题、把几个金标准段落塞进去、然后随机从语料里抽一堆段落补到 128K。这套做法在过去一年是事实标准。但问题在哪里?随机抽的段落和问题语义几乎不沾边,模型一眼就能过滤掉。等于在练"找茬",只不过茬本身是粉色背景上的一只大象。
最近 arXiv 上挂出一篇叫 LongTraceRL(arXiv: 2605.31584)的论文,把这件事重做了一遍。它的两个核心动作非常朴素,但放在一起出奇地有效:
- 干扰项怎么造:让一个搜索 Agent 先去做这道题,把它读了但最后没引用的文档当成"高混淆度"干扰项,把它搜到了但根本没打开的当成"低混淆度"干扰项,按层叠加到训练上下文里。
- 奖励怎么算:除了答案对错的 outcome reward,再加一个 rubric reward——沿着推理链上的金标准实体做细粒度过程监督,但只奖励答案正确的样本,避免 reward hacking。
效果:在 Qwen3-4B 上长上下文五个 benchmark 平均 53.3 → 59.0(+5.7),其中最难的 AA-LCR 涨了 8.6 个点。30B 上也能再涨 3.2 个点。
下面把这套东西拆开聊。
论文信息
- 标题:LongTraceRL: Learning Long-Context Reasoning from Search Agent Trajectories with Rubric Rewards
- arXiv:2605.31584
- 作者:Nianyi Lin, Jiajie Zhang, Lei Hou, Juanzi Li
- 链接:https://arxiv.org/abs/2605.31584
为什么"干扰项的质量"是长上下文 RL 的瓶颈
先把问题摆清楚。
长上下文推理任务的本质是什么?它不是"在 128K 里找一根针"——那是检索。它是"在 128K 里有 5 根真针、95 根假针,你要把真假分清楚,再把 5 根真针按顺序串起来"。
所以训练数据有两个东西决定难度:金标准段落本身的多跳深度、以及干扰段落的"混淆能力"。前者大家都在做(多跳 QA 已经很卷了),但后者一直被低估。
之前主流方法是这样造数据的:
| 干扰来源 | 做法 | 问题 |
|---|---|---|
| random | 从语料里随机抽段落 | 几乎和问题完全无关,模型一过 attention 就丢掉 |
| search | 用问题去 BM25/dense retriever 检索 top-k 后剔除金标准 | 表面相关,但缺乏"有人真的考虑过它"的信号 |
LongTraceRL 给了一个数据:用 random 干扰造出来的 128K 训练上下文里,干扰段落和金标准实体的重合率宏观平均只有 1.35 个百分点。这是什么意思?模型根本不需要"推理",只要"有这个实体名就抄过来"就能答对。
这就是过去这套训练范式的核心漏洞。模型学到的不是长上下文推理,是长上下文关键词匹配。
说到这里我得插一句。这其实和早年阅读理解数据集的老问题一模一样——SQuAD 时代大家发现模型在做的事是"复制问题里出现过的名词附近的 span",根本没在理解。十年过去了,长上下文 RL 又掉进了同一个坑。
核心洞察:搜索 Agent 已经替你筛过一遍了
LongTraceRL 的第一个聪明的地方在这里。
如果我们想要"语义上真的容易让人混淆的干扰文档",最直接的标准是什么?有没有一个真的在解这道题的智能实体(人或 Agent)认真考虑过它,然后又最终拒绝了它。
人的认知里这是显然的——你在写一篇综述,引用了 50 篇,但你大概读过 200 篇,再之前你扫过 1000 篇。那 1000 篇里,被你读但没引用的 150 篇,恰恰是和你的论题最容易"看起来相关但其实没用"的那批。
LongTraceRL 把这个逻辑搬到了 Agent 身上。具体流程见下图:

图 1:左边是之前的长上下文 RL 方法:随机抽干扰、只看答案对错;右边是 LongTraceRL:让 Agent 先做一遍题,按"读了 vs 只搜到"分层抽干扰,再加沿推理链的实体级 rubric reward。
整套数据构造管道分四步:

图 2:从 Wikipedia 超链接图开始随机游走 8 跳,LLM 合成多跳问题,然后部署搜索 Agent 跑 K=5 条轨迹,按"读了未引用 vs 搜到未打开"把检索文档分两层,组装成 128K 训练上下文。
我把每步的细节按工程视角讲一下。
第一步:用知识图谱随机游走生成多跳问题
在 KILT 的 Wikipedia 超链接图上跑随机游走。从种子实体 \(v_0\) 出发走 \(k=8\) 步,每步让 LLM 从最多 5 个未访问的候选邻居里挑一个最相关的接下去,偶尔插入"疯狂跳跃"避免被局部子图困住。
走完得到一条 8 跳路径 \(P=[v_0, v_1, \ldots, v_8]\)。把这条路径和每个节点的 Wikipedia 段落喂给一个强 LLM,生成一个多跳问题,约束是:
- 答案是 \(v_8\) 的某个具体属性
- 推理必须严格走完路径上每个实体,不能跳过
- 所有可识别信息(人名、日期、地点)都要改写,避免关键词捷径
这一步出来三样东西:问题文本、唯一答案、沿推理链的金标准实体集合 \(\mathcal{E}=\{e_1, \ldots, e_8\}\) 及其原始段落。这个 \(\mathcal{E}\) 是后面 rubric reward 的灵魂。
第二步:让搜索 Agent 跑 K=5 条独立轨迹
部署一个有深度搜索能力的 Agent(搜索、打开、引用三种动作),让它去解这道题。每条轨迹被记录成 \(\tau = [(a_1, d_1), (a_2, d_2), \ldots]\),其中 \(a_t\) 是动作类型、\(d_t\) 是涉及的文档。
每个问题跑 5 条轨迹。只保留至少一条达到正确答案的问题——5 条都失败的问题直接丢掉。这一步过滤之后,留下来的轨迹反映的是 Agent 真实、目标导向的搜索行为,而不是瞎走。
第三步:按"做题人的注意力梯度"分层抽干扰
这是整个工作的灵魂动作。Agent 在解这道题的过程中会接触到大量文档(不算金标准的那些),按它的"投入程度"分两层:
- 第 1 层(高混淆度):Agent 打开读过但最终没引用的文档。Agent 之所以会打开,说明搜索结果摘要看起来确实和问题相关;之所以没引用,说明读完之后判断它没有真正解题需要的信息。这种文档主题相关但答案误导,是最难的干扰。
- 第 2 层(低混淆度):在 Agent 的搜索结果里出现过、但Agent 看了一眼摘要就跳过的文档。表面相关但被快速判断不重要。
第四步:traj-tiered 策略组装上下文
从金标准段落开始,先填第 1 层干扰直到接近 128K,不够再用第 2 层补上。所有文档随机打散位置,避免位置捷径。
下面这张表非常说明问题:
| 干扰策略 | 干扰文档总数 | 含 rubric 实体的干扰数 | 实体召回率 (%) | 微平均重合 (%) | 宏平均重合 (%) |
|---|---|---|---|---|---|
| random | 45,392 | 565 | 0.16 | 1.24 | 1.35 |
| search(BM25 + 剔除金标) | 31,412 | 4,372 | 2.47 | 13.92 | 15.00 |
| traj-random(轨迹中随机抽) | 64,066 | 26,528 | 8.59 | 41.41 | 42.16 |
| traj-tiered(本文) | 62,137 | 29,050 | 10.34 | 46.75 | 50.03 |
| · 第 1 层(读未引) | 18,206 | 10,629 | 14.65 | 58.38 | 63.23 |
| · 第 2 层(搜未读) | 43,931 | 18,421 | 8.56 | 41.93 | 41.75 |
表 1:不同干扰策略下干扰文档与 rubric 实体的重合率统计。第 1 层干扰在宏平均上达到 63.23%,几乎是 random 的 47 倍。
这张表的意思是什么?在 random 干扰里,128K 上下文中几乎没有一个干扰文档提到推理链上的实体(1.35%)。模型完全可以靠"哪段提到了人名 X,就抄过去"答对题。但在 traj-tiered 第 1 层干扰里,超过 60% 的干扰文档都提到推理链上的实体——模型必须真的判断"这段虽然提到了 X,但说的不是题目要的那个角度",才能不被骗。
我自己第一次看到这个数字的反应是"这个 gap 也太大了"。然后我意识到:之前一年很多长上下文 RL 工作的提升,可能很大一部分是吃在简单干扰的红利上,模型没真的学会推理。
Rubric Reward:沿推理链的实体级过程监督
干扰造硬了,第二个问题来了:怎么知道模型是真的把推理走完,还是靠运气拼出了答案?
只看答案对错(outcome-only reward)的问题在长上下文里特别突出——一个 8 跳问题,模型很可能跳过中间 5 跳直接猜对终点。这次是对的,下次换一道题就不对了。但 outcome reward 没法区分这两种"对"。
LongTraceRL 的思路非常直接:既然我们在生成数据时已经记录了沿推理链的金标准实体集合 \(\mathcal{E}\),那就用模型响应里实际提到的金标准实体的召回率作为过程信号。
原始 rubric 分数:
这个分数衡量"模型推理时引用了多少推理链上必经的实体"。
但直接用这个分数会有两个问题:
问题一:不同问题的 \(|\mathcal{E}|\) 不一样、难度不一样,分数没法跨问题比较。
GRPO 本来就是组内归一化的算法(一个问题采 G=8 个响应,组内做 advantage 计算)。LongTraceRL 顺着这个思路在组内做归一化:
把组内最高分作为参考,让所有响应的 rubric 分都落在 [0, 1]。
问题二:如果对答错的样本也给 rubric reward,模型会学到"反正只要狂列实体名就有分"——典型的 reward hacking。
LongTraceRL 的解法非常干脆——只对答案正确的响应给 rubric reward:
\(\alpha\) 是过程监督权重,论文里默认 \(\alpha=0.3\)。
这个 "positive-only" 的设计其实非常关键。下面消融会看到,把它去掉(即对答错的也给 rubric reward)平均分会从 59.0 掉到 57.1,AA-LCR 上直接掉 4.8 个点。
这里我想多说一句——这个设计的精神和 process reward model(PRM)有点像,但实现上简单太多了。PRM 需要一个独立的过程评分模型,训练它本身又是一堆问题。LongTraceRL 直接利用了"数据生成时知道推理链上每个实体"这个先验,绕开了 PRM 这一整套基础设施。能这样做的前提是数据是合成的、推理链可控——这恰恰是 KG 随机游走那套数据生成方式带来的红利。两个组件互相成就。
实验:5.7 个点提升来自哪里?
主表如下(Qwen3-4B,5 个长上下文 benchmark 的平均,越高越好):
| 方法 | AA-LCR | MRCR | FRAMES | LongBench V2 | LongReason | Avg |
|---|---|---|---|---|---|---|
| Base | 33.2 | 36.2 | 76.7 | 41.7 | 78.5 | 53.3 |
| DocQA | 28.8 | 41.9 | 78.3 | 44.6 | 79.9 | 54.7 |
| LoongRL | 32.0 | 38.2 | 75.8 | 41.8 | 78.7 | 53.3 |
| LongRLVR | 37.5 | 41.8 | 78.5 | 43.8 | 80.7 | 56.5 |
| LongTraceRL | 41.8 | 45.8 | 79.5 | 44.1 | 83.8 | 59.0 |
表 2:Qwen3-4B 上的主结果。LongTraceRL 在最难的 AA-LCR 上比 base 涨 8.6 个点,比次好的 LongRLVR 涨 4.3 个点。
几个关键观察。
观察一:DocQA 在 AA-LCR 上反而比 base 还低(28.8 vs 33.2),LoongRL 也持平。这说明简单堆 RL 训练并不必然带来长上下文推理能力的提升——如果训练数据没有足够强的干扰,RL 反而可能让模型过拟合到简单模式。
观察二:AA-LCR 上的提升远大于其它 benchmark。AA-LCR 是 100 道专家精心设计的多跳推理题,平均 100K tokens,是表里最考验"在干扰中坚持推理"能力的。8.6 个点的涨幅几乎是所有方法在这个 benchmark 上的天花板。
观察三:在更大的 Qwen3-30B 上,从 60.5 → 63.7(+3.2),AA-LCR 单项 47.0 → 53.5(+6.5)。说明这套方法不是只在小模型上 work,scale up 到 30B 仍然有显著提升。
但有个值得注意的点——在 DeepSeek-R1-8B 上,提升只有 +1.1(42.7 → 43.8),而其它三个 baseline(DocQA/LoongRL/LongRLVR)甚至让 R1-8B 性能下降。这背后我猜想可能是 R1 的 reasoning 模式和论文采的 rollout 长度(32K)冲突——R1 喜欢写很长的链式思考,32K 预算根本不够。论文里没明确解释这一点,是个开放问题。
训练动态:rubric reward 真的在引导更深的推理

图 3(a):4B/8B/30B 三个规模上 rubric reward 都稳定增长,说明模型逐步学会引用推理链上的金标准实体。

图 3(b):LongTraceRL(蓝)的 outcome reward 在训练后期超过了不加 rubric 的 LongTraceRL-GRPO(橙)——证明 rubric reward 不仅监督过程,最终也帮助模型答对更多题。

图 3(c):加 rubric reward 之后 rollout 平均长度明显更长——模型被鼓励做更深的推理而不是抄近路。

图 3(d):120 步左右,许多 rollout 触到 32K 预算上限,但 positive-only 策略把策略往"短而准确"的方向拉回,截断率没失控。这正是防止 rubric reward hacking 的自调节机制。
图 3(b) 是我觉得最有说服力的一张。一个常见质疑是"加 rubric reward 会不会让模型为了堆实体而忽略最终答案"。这张图直接打消了这个疑虑——outcome reward 反而比 outcome-only 训练更高。两个目标不仅没冲突,rubric 还在帮 outcome 涨。
三个消融实验:每个都很关键
消融一:rubric weight \(\alpha\) 怎么取?
| α | AA-LCR | MRCR | FRAMES | LongBench V2 | LongReason | Avg |
|---|---|---|---|---|---|---|
| 0.1 | 39.2 | 46.1 | 79.0 | 44.2 | 82.8 | 58.3 |
| 0.3 | 41.8 | 45.8 | 79.5 | 44.1 | 83.8 | 59.0 |
| 0.5 | 39.0 | 43.7 | 77.5 | 43.5 | 81.7 | 57.1 |
\(\alpha=0.3\) 是甜点。0.1 时过程信号不够强,AA-LCR 这种最难的 benchmark 受影响最明显(41.8→39.2);0.5 时 rubric 权重过大,模型开始走"列实体名"的捷径,全面下滑(57.1,比 0.1 还低)。
消融二:干扰策略对比
| 干扰来源 | AA-LCR | MRCR | FRAMES | LongBench V2 | LongReason | Avg |
|---|---|---|---|---|---|---|
| random | 34.2 | 40.1 | 78.0 | 43.8 | 82.4 | 55.7 |
| search | 34.2 | 43.2 | 79.0 | 43.9 | 83.3 | 56.7 |
| traj-random | 35.5 | 44.2 | 79.9 | 44.6 | 82.8 | 57.4 |
| traj-tiered | 41.8 | 45.8 | 79.5 | 44.1 | 83.8 | 59.0 |
干扰难度排序和下游性能排序完全一致——干扰越难,模型最终越强。其中 random→search 涨 1 个点(说明语义相关有用但有限),traj-random→traj-tiered 涨 1.6 个点(说明在轨迹内部进一步分层、优先用读未引这种最难的,仍然有显著增益)。
最贵的提升是从 search 到 traj 系列:57.4 - 56.7 = 0.7→2.3 个点。这本质上是"在搜过的之上,再加上读过但没用上的"这一信号。
消融三:positive-only 到底有多关键?
| 奖励策略 | AA-LCR | MRCR | FRAMES | LongBench V2 | LongReason | Avg |
|---|---|---|---|---|---|---|
| Pos+Neg(答错也给 rubric) | 37.0 | 40.5 | 79.5 | 45.5 | 83.1 | 57.1 |
| Positive-only | 41.8 | 45.8 | 79.5 | 44.1 | 83.8 | 59.0 |
平均掉 1.9 个点,AA-LCR 单项掉 4.8,MRCR 掉 5.3。这是消融实验里最大的单项差距之一。
为什么?看图 4:

图 4:左边的 Pos+Neg 策略下 rubric 和 outcome reward 都比 positive-only 低。combined raw reward 看起来高,是因为答错的样本也在堆实体名拿分——但这是有毒的梯度,最终让模型学到"枚举上下文里类似实体"的捷径。
这一点很反直觉但非常重要。一个看起来更"信息丰富"的 reward 信号(每个样本都有 rubric 分),实际效果反而更差。原因是给答错的样本 rubric reward,等于在告诉模型——哪怕路走错了,只要把沿途景点都列出来也算半分。模型当然会朝最容易拿分的方向跑:只列实体不思考。
一个真实的失败案例 vs 成功案例
论文附录给了一对很说明问题的对照案例:

图 5:LongTraceRL 在合成多跳问题上的训练 rollout——模型沿着推理链逐步识别金标准实体并构建论证。
附录里更有意思的是 AA-LCR 上的真实失败/成功对照:
- 没有 rubric reward 的版本(LongTraceRL-GRPO)面对一个有冲突信息的问题时,直接走捷径——没识别出冲突,用了一个错误的费率(来自一份和问题主体不符的 press release)。
- 加了 rubric reward 的版本则先检查每个候选文档,识别出问题中两个看似相关但实际指向不同实体的子句,最终用正确的 37.6% 费率回答。
这个案例说明的不是"rubric reward 让模型更聪明",而是 rubric reward 让模型不敢偷懒。每跳都要落到具体实体上,跳过会被罚。
我的判断
读完这篇论文,我有几个比较明确的看法。
值得做的工程动作:
如果你正在搭长上下文 RL 训练 pipeline,traj-tiered 这一套 distractor 构造方法几乎可以直接复用。它需要的额外基础设施只有:一个能跑搜索的 Agent + 完整的轨迹日志。比起搞一个 PRM 或者 critic 模型,成本低得多。
rubric reward 的实现也很简单——核心就两件事:数据生成时记录推理链上的实体集合 \(\mathcal{E}\)、训练时用字符串匹配(或简单 NER)算召回率。一周内可以接进任何 GRPO/PPO pipeline。
这套方法的边界在哪里:
整个故事建立在"问题是合成的、推理链已知"这个前提上。如果你的训练问题来自真实人类标注(比如人写的多跳 QA),rubric 实体的构造会困难得多——你得回过头去标注沿推理链的实体集合。这个标注成本不容忽视。
另外,rubric reward 本质是实体召回率。它对实体型问题(who/what/which)友好,对推理型问题(how/why)的监督粒度可能不够。论文也没提这块的局限。
我比较 skeptical 的点:
DeepSeek-R1-8B 上只涨 1.1 个点这件事,论文一笔带过。但 R1 是 reasoning model 的典型代表,如果 rubric reward 在 reasoning model 上的效果远不如在 base model 上,那这套方法的真实适用范围可能比表面看起来窄。这个点值得跟进者去验证。
还有一点:traj-tiered 的第 1 层干扰本质上是"曾经被一个合理的 Agent 考虑过又拒绝的文档"。这套数据的难度上限取决于跑轨迹的那个 Agent 有多强。如果用的是和被训练模型同级别的 Agent,干扰难度会被卡在那个水平上。论文用的是 GPT-5.2 跑轨迹,这本身就是一种隐性的"distillation"——拿强 Agent 的判断给弱 Agent 当训练信号。这不是 bug 但值得意识到。
一段话总结
LongTraceRL 解决的不是一个新问题,而是把长上下文 RL 这套老问题里最被低估的环节——干扰项构造和过程监督——重新做了一遍。它没有引入新模型、没有新算法(GRPO 都是现成的),但通过两个朴素但精确的设计(traj-tiered 干扰、positive-only rubric reward),把 Qwen3-4B 的长上下文推理平均分推上了 59.0。在最难的 AA-LCR 上拿到 8.6 个点的涨幅。
如果你做长上下文 RL 训练,arXiv: 2605.31584 这篇值得花一个下午读完,再花一周改进你自己的数据 pipeline。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我