Minimal-Pair-Evaluation(最小对比对评估)

定义

Minimal-Pair-Evaluation 是一种评估方法论:构造在架构、依赖和外部行为上完全匹配,仅在目标变量(如代码整洁度)上不同的仓库对,以隔离该变量对 coding agent 行为的独立因果影响。

方法论核心

SWE-bench 的方法论缺口

SWE-bench 系列(Jimenez et al., 2024; Chowdhury et al., 2024)的每个 instance 是单个仓库单个版本。任何跨 instance 的差异都混淆了任务难度和代码状态——你无法区分 agent 失败是因为任务难还是代码脏。

Minimal-pair evaluation 填补了这个缺口:同一个任务在两个版本上运行,唯一差异是目标变量。

双向构造

论文用两个方向的 agent pipeline 构建 minimal pairs:

方向名称输入输出
降级Slopify干净仓库合理的脏版本(模拟没有 code review 的历史)
清理Vibeclean脏仓库合理的干净版本(模拟有 static analysis 门控的历史)

双向设计的价值:两个方向产生略微不同形状的 pair,防止结论只适用于单一构造方向。

三阶段 Pipeline

Slopify pipeline 的三阶段(为减少 agent 脱轨):

  1. Build:编译仓库、测试通过、冻结构建指令到 build-instructions.md
  2. Explore:遍历仓库、为每个值得降级的目录写 summary.md
  3. Transform:基于摘要执行降级变换

三条任务设计规则

  1. Route through hotspots:任务锚定在 pair 两侧差异最大的代码区域
  2. Describe in externally observable terms:任务描述只说外部行为,不指定实现路径
  3. Verify through hidden tests:通过应用公共表面的隐藏测试评分

三条任务轨道

轨道设计意图数量
Calibration不涉及差异区域的任务(基线对照)6
Boundary-crossing跨多个模块边界的任务14
Cognitive-hotspot集中在单一高密度代码区域的任务13

6 个仓库对

仓库PipelineNCLOC (k)Issues (clean/messy)Issue density (per kLOC)
sonar-scaSlopify128.8/136.794/2,8250.73/20.66
sonar-caas-pocSlopify26.2/31.516/8550.61/27.16
sonarcloud-codedatalakeSlopify45.6/38.4199/1,3194.36/34.39
commons-bcelVibeclean55.1/54.8694/2,71112.60/49.46
genieVibeclean118.8/116.7152/1,2621.28/10.81
ckanVibeclean133.4/132.11,006/3,6327.54/27.50

10 个度量指标

类别指标含义
正确性Pass rate隐藏测试通过率
足迹Input tokensagent 读入的总 token
足迹Output tokensagent 产出的总 token
足迹Reasoning characters推理过程字符数
轨迹Conversation turnsagent-工具交互总轮次
轨迹Turns before first edit首次编辑前的轮次
轨迹Characters before first edit首次编辑前的总字符数
导航Files read打开的不同文件数
导航File revisitation已编辑文件的回访次数
导航Lines edited修改的源代码行数

方法论的可迁移性

Minimal-pair evaluation 原则上可迁移到任何二元变量的因果隔离:

  • 类型系统:强类型 vs 弱类型版本的 agent 行为差异
  • 文档密度:有/无 API 文档对 agent 导航效率的影响
  • 测试覆盖:高/低测试覆盖率对 agent 修改信心的影响
  • 架构风格:monolith vs microservice 结构的 agent 任务完成差异

关键数据点

指标数据
Minimal pairs 数量6(3 Slopify + 3 Vibeclean)
编码任务数33(6 calibration + 14 boundary-crossing + 13 cognitive-hotspot)
试验总次数660
度量指标10 个(1 正确性 + 3 足迹 + 3 轨迹 + 3 导航)
代码语言Java + Python
SonarQube issue 差距最大 pair (sonar-sca): 94 vs 2,825 issues

前提与局限性

  • 构造 minimal pair 需要大量前期工作(agent pipeline + 人工验证)
  • "clean" 和 "messy" 是 pair 内标签,不是对原始仓库的评判
  • SonarQube 规则集作为整洁度代理可能有工具特定偏差
  • 论文未开源 benchmark(截至 2026-07 状态),限制了独立复现

关联概念