执行摘要
- 一句话:修复 merge_turn_segments 丢弃超长 segment 的 bug
- 推荐动作:该 PR 是一次轻量的 bugfix,逻辑清晰,改动集中。建议快速合并,无需深入精读。
功能与动机
在 coding_agent_rl 场景中,multi-turn 的 prompt+response 总长度可能超过 max_context_tokens,但这些 segment 是有效的训练数据,不应被丢弃。PR 标题和 body 明确指出要修复“dropping overlong sample”的问题。
实现拆解
- 修改 merge_turn_segments 函数(
slime/agent/trajectory.py):移除 max_context_tokens 参数和相关的长度判断逻辑,只保留 response 非空检查。
- 更新调用者:在
slime/agent/adapters/anthropic.py 和 slime/agent/adapters/openai.py 的 finish_session 方法中,移除传递 max_context_tokens 参数,直接调用 merge_turn_segments(s.segments)。
- 更新测试(
tests/test_agent_trajectory.py):新增 test_merge_turn_segments_keeps_oversized_segments 测试用例,验证 oversize 的 segment 不会被丢弃;同时导入 TurnSegment 和 merge_turn_segments。
- 更新文档(
examples/coding_agent_rl/README.md):更新 --rollout-max-context-len 的说明,澄清该参数仅作用于生成时的截断,不再影响轨迹合并/导出时的 segment 丢弃。
关键文件:
slime/agent/trajectory.py(模块 轨迹合并;类别 source;类型 core-logic;符号 merge_turn_segments): 核心修复,修改了 merge_turn_segments 函数,移除了 overlong 过滤逻辑。
tests/test_agent_trajectory.py(模块 测试;类别 test;类型 test-coverage;符号 test_merge_turn_segments_keeps_oversized_segments): 新增测试用例验证 oversize segment 不会被丢弃。
slime/agent/adapters/anthropic.py(模块 Anthropic 适配器;类别 source;类型 core-logic;符号 finish_session): 适配器调用处移除 max_context_tokens 参数。
slime/agent/adapters/openai.py(模块 OpenAI 适配器;类别 source;类型 core-logic;符号 finish_session): 适配器调用处移除 max_context_tokens 参数。
examples/coding_agent_rl/README.md(模块 文档;类别 docs;类型 documentation): 文档说明更新,澄清参数作用范围。
关键符号:merge_turn_segments, finish_session
评论区精华
该 PR 没有 review 评论和 discussion,因此没有可提炼的讨论内容。
风险与影响
- 风险:风险较低。移除
max_context_tokens 过滤后,所有非空 segment 都会被保留,可能增加训练数据量,但不会引发错误。需要确保训练流程对 segment 长度没有隐式依赖。此外,如果其他未发现的调用点依赖了旧行为,可能需要额外清理。
- 影响:影响范围包括 agent 模块的
merge_turn_segments 核心函数及其所有调用者(Anthropic 和 OpenAI adapter),以及测试和文档。对用户的影响是:之前因过长而被丢弃的训练样本现在会被保留,可能提升模型训练效果。对系统的影响是略微增加训练数据量,但无性能副作用。
- 风险标记:核心路径变更
关联脉络
- PR #1963 Fix trajectory merging logic: 同样涉及轨迹合并逻辑的修复,与本次改动相关。
参与讨论