轨迹质量感知数据选择 — 实验设计 v3


基座模型:Qwen2.5-Coder-7B-Instruct
微调方法:LoRA
数据来源:SWE-trajectory 数据集
日期:2026年2月


一、评分体系设计

1.1 设计原则

评分体系回答一个核心问题:“如果一个人类专家在做同样的任务,他会怎么评价这条轨迹?”

人类专家评价一个开发者的 debug 过程,关注两件事:你做得聪不聪明(Efficiency)?你的过程干不干净(Style)? 至于”做对了没有”(Correctness)和”轨迹完不完整”(Completeness),则作为前置过滤条件,不参与连续评分。

1.2 前置过滤(Gate Conditions)

以下条件不参与评分,仅决定轨迹是否进入评分池:

Gate条件理由
Completeness GateTruncation Ratio ≥ 0.9截断比在数据集中几乎为常量(med=1.0, std≈0),无区分力,仅用于清理少量脏数据
Correctness GateOutcome Success = 1(Resolved)二值变量不应与连续变量混合加权;将其作为分层条件,在 resolved 池内排序
Format Gate轨迹可被解析为 thought-action-observation 结构格式损坏的轨迹无法可靠打分

为什么不把 Correctness 作为评分维度?
Outcome Success 是 binary(0/1),与连续维度做 weighted average 会导致评分被 0/1 主导。改为 gate 后,评分池内所有轨迹都是 resolved 的,评分聚焦于”如何更好地完成任务”。

1.3 连续评分维度(4维)

过滤后剩余 32,161 条 resolved 轨迹,在池内用以下 4 个维度评分:

Efficiency(效率)— 达成目标的路径是否精简

子维度定义打分方式分布特征
B2: Error-Retry Cycles出错后反复重试的代价统计 “action→error observation→类似action” 的循环数,归一化取反std=0.286, med=0.300,区分力最强
B3: Step Count Ratio步骤数的合理性本轨迹步数 / 同 task 所有 resolved 轨迹的中位步数,clip 后归一化取反std=0.063, med=0.800

Style(风格质量)— 轨迹作为训练数据的干净程度

子维度定义打分方式分布特征
C2: Action Diversity工具使用是否合理多样action type 的 entropy,归一化到 [0,1]std=0.046, med=0.655
C3: Observation Utilization是否有效利用了 observation 信息observation 中出现的文件名(basename)/错误类名在后续 action 中被引用的比例std=0.118, med=0.313

被排除的维度及原因

维度排除原因
B1: Redundant Commandsstd=0.033, med=0.962,几乎无区分力。数据集中的 agent 很少执行完全重复的命令
C1: Observation Cleanlinessstd=0.043, med=0.967,几乎无区分力。绝大多数 observation 都是干净的

论文表述:我们设计了 6 个候选子维度,通过方差分析发现 B1 和 C1 在该数据集上缺乏区分力(std < 0.05),因此排除。这本身是一个发现——SWE-trajectory 数据集的 agent 在命令冗余和 observation 干净程度上已高度同质化。

1.4 评分聚合

Efficiency = mean(B2, B3)           # std=0.152, med=0.529
Style      = mean(C2, C3)           # std=0.063, med=0.485
Composite  = 0.5 × Efficiency + 0.5 × Style   # std=0.083, med=0.507

1.5 C3 实现细节

初版 C3 使用完整路径匹配(如 src/utils.py),导致 agent 引用 utils.py(无路径前缀)时匹配失败,median 仅 0.201。修复后改为 basename 匹配,median 提升至 0.313。剩余的低利用率反映了 agent 普遍存在的”读了不用”问题,本身是一个值得讨论的发现。


二、实验分组设计

2.1 总览(13组 + 1 baseline)

#实验名样本池选择方式样本数所属 Block
0baseline无微调
1Random-500全量随机500Block 1
2Random-1000全量随机1000Block 1
3TopQ-500resolvedcomposite 排序 top500Block 1
4TopQ-1000resolvedcomposite 排序 top1000Block 1
5ResolvedOnly-500resolved随机500Block 1
6ResolvedOnly-1000resolved随机1000Block 1
7BottomQ-500resolvedcomposite 倒序 bottom500Block 1
8Ablation-NoEfficiency-500resolved仅 Style 排序500Block 2
9Ablation-NoStyle-500resolved仅 Efficiency 排序500Block 2
10Ablation-NoB2-500resolvedEfficiency=B3 only500Block 3
11Ablation-NoB3-500resolvedEfficiency=B2 only500Block 3
12Ablation-NoC2-500resolvedStyle=C3 only500Block 3
13Ablation-NoC3-500resolvedStyle=C2 only500Block 3

2.2 各 Block 的研究问题

Block 1:数据量与策略对比(7组)

对比研究问题
exp1 vs exp5Gate 有没有用? 全量随机 vs resolved 池随机
exp5 vs exp3评分有没有用? resolved 随机 vs resolved 排序
exp1→exp2, exp3→exp4, exp5→exp6数据量 scaling 效果,三种策略下 500→1000 的提升幅度
exp3 vs exp7Sanity check:最好 vs 最差,验证评分体系有效性

Block 2:大维度消融(2组)

对比研究问题
exp8 vs exp9 vs exp3Efficiency vs Style 哪个更重要? 单用 vs 组合

Block 3:子维度消融(4组)

对比研究问题
exp10 vs exp11 vs exp3Efficiency 内部:Error-Retry Cycles vs Step Count Ratio
exp12 vs exp13 vs exp3Style 内部:Action Diversity vs Observation Utilization

2.3 可复用的旧实验

实验是否可复用原因
baseline✅ 复用无微调
Random-500 (exp1)✅ 复用随机采样与评分体系无关
Random-1000 (exp2)✅ 复用同上
其余所有❌ 需重训评分公式变化导致选出的样本不同

实际需要新训练:11 组


三、评测方案

3.1 困惑度评测(Perplexity / Cross-Entropy Loss)

在三个独立测试集上计算 assistant token 的平均交叉熵损失:

测试集样本数来源
Gold200新 composite score 最高的轨迹
Random200随机采样
Low-Q200新 composite score 最低的轨迹

注意:测试集也需要根据新评分重新构建,确保 Gold/Low-Q 反映的是新体系下的质量排序。

3.2 预期验证

所有模型应呈现 Gold < Random < Low-Q 的 loss 梯度,以验证新评分体系的合理性。


四、论文故事线

第一层:微调本身有没有用?     baseline vs 任意微调模型
第二层:Gate 有没有用?        Random-500 vs ResolvedOnly-500
第三层:评分有没有用?         ResolvedOnly-500 vs TopQ-500
第四层:数据量 vs 质量?       500→1000 scaling curve(三种策略)
第五层:哪个大维度重要?       EfficiencyOnly vs StyleOnly vs TopQ
第六层:哪个子维度重要?       子维度消融(B2/B3/C2/C3)
验证层:评分体系有效吗?       TopQ vs BottomQ + 测试集质量梯度

五、设计决策记录

决策选择替代方案理由
Truncation Ratio 处理Gate(过滤)作为评分维度std≈0,无区分力
Outcome Success 处理Gate(分层)作为连续评分维度binary 变量不宜与连续变量加权平均
B1/C1 排除从 composite 移除rank normalization 强制拉平rank normalization 会放大噪声,移除更诚实
C3 文件匹配basename 匹配完整路径匹配agent 常省略路径前缀,完整匹配导致 C3 系统性偏低
聚合方式层级 mean + 等权加权平均 / 学习权重等权作为默认选择,权重差异可通过消融实验间接体现
数据规模500 / 10002000 / 5000GPU 资源限制