论文链接:RealSWE: A Compositional Evaluation of Coding Agents under Realistic User Requests 发表时间:2026年8月 机构:成均馆大学(Sungkyunkwan University,韩国)。单一机构,纯学术团队,无企业参与。 领域标签:cs.AI,软件工程智能体评估
一、论文背景
理解这篇论文需要先建立三层认知。
SWE-BENCH 系基准是什么? 它确立了『仓库级 issue 解决』这一标准评估范式:从知名开源仓库的 GitHub issue 与对应修复(commit/PR)中收割可执行任务,配单元测试判定成败。后续家族不断扩展——Verified 做人工校验、Pro 覆盖更大更难的仓库、Multilingual 多语言、Multimodal 视觉领域。如今排行榜分数就是比较 LLM 编程能力的事实标准。
问题在哪? 越来越多证据表明,这些基准喂给智能体的输入远离实际。精心整理的 GitHub issue 详细、结构化、长:描述故障、给出复现步骤与环境信息、指明期望行为、甚至建议解法。而日常用户请求短、随意、稀疏。同一个意图,issue 会写一大篇,用户可能只说一句『this crashes on empty input—fix it』。任务本质相同,但后者留下的证据少得多,智能体必须从仓库与上下文自行推断缺失的需求。于是基准分数可能不只取决于任务难度,还取决于任务如何被表达——而表达恰恰是基准从未系统控制的变量。
已有尝试与不足。CursorBench 用真实编程会话的提示做评测,但闭源、无法独立使用或检视;开放方案用启发式模拟现实——截断问题陈述、注入歧义、按真实开发者交互模式变异基准输入(如 Saving SWE-Bench)——但没有系统分析、也没有真实数据支撑。它们证明了『基准-现实差距』存在,却回答不了是什么造成了差距、应该如何度量它。这正是本文切入的空缺。
二、论文定位和关联工作
论文在两条谱系的交汇处立足。
谱系一:编程智能体基准。SWE-BENCH 及其家族(Verified/Pro/Multilingual/Multimodal/Live/MERA/PolyBench 等)持续强化任务本身——更可靠的测试、更广的语言与模态、更复杂的仓库。但它们都给每个可执行任务配一份规范的问题描述,从不考察同一任务换一种信息组合或语言风格时性能如何变化。本文与它们的本质区别:把『任务规范』从常量变成自变量。
谱系二:现实主义与沟通感知评估:
- 真实会话型:CursorBench(闭源)、REAP(从生产交互自动策展)——真实但沟通方式与任务、仓库、难度纠缠在一起,无法分离沟通的独立效应。
- 观察型数据集:SWE-CHAT 记录了开发者与编程智能体的真实交互——本文正是拿它当『现实的实证锚点』。
- 欠规约/交互型:AmbigSWE、Dialogue SWE-Bench、澄清行为研究——关注歧义与追问,但同样不做逐字段归因。
- 变异型:Saving SWE-Bench 最接近本文——用真实开发者交互中观察到的模式把仓库任务变换成用户风格输入。但它的变换联合改变任务规范的多个属性,性能变化无法归因到具体信息成分或语言属性。
本文的差异化设计:每个任务表示为多变体族,族内变体共享同一底层任务与 gold patch,只在信息组合与语言风格上不同——从而支持逐字段消融、任意组合、分布匹配评测。
| 维度 | 传统 SWE-BENCH 家族 | 真实会话型(CursorBench) | 变异型(Saving SWE-Bench) | RealSWE |
|---|---|---|---|---|
| 输入来源 | 精修 GitHub issue | 真实用户会话 | 基准输入变异 | 基准任务 × 实测分布 |
| 开放性 | 开放 | 闭源 | 开放 | 开放(381 任务族全发布) |
| 沟通变量控制 | 无(单一描述) | 无(与任务纠缠) | 联合扰动、无法归因 | 信息组合与风格独立受控 |
| 可做的事 | 打分 | 打分 | 打分 | 打分 + 逐字段因果归因 + 自定义分布评测 |
定位结论:这是一个评估范式工作——首个用信息分类学 + 多变体任务族对『任务如何被表达』做逐字段受控消融的开放基准,核心主张从『差距存在』推进到『差距的构成可测量、可归因』。
三、问题定义
具体场景:同一个 bug、同一份 gold patch,GitHub issue 版本写得详尽,用户聊天版本只有一句话——智能体在这两个输入下表现差多少?差在哪类信息上?
核心洞察:论文发现『任务规范』可以分解为两个正交轴——
- 信息轴:请求传达了哪些类别的信息(信息分类学);
- 表达轴:这些信息用什么语言形式传达(四个语言学维度)。
| 对照实验设计概念 | 本论文对应物 |
|---|---|
| 控制变量法(单因子差异) | 变体族内只变一个字段或一个风格维度 |
| 实验组 vs 对照组 | [PD] vs [P](加/减期望行为);原始 issue vs [PDREA](同信息、换风格) |
| 总体分布匹配抽样 | RealSWE-Bench 按 SWE-CHAT 实测比例 [P] 74% / [PA] 26% 抽变体 |
| 析因设计 | 五字段 × 两任务类型 × 四风格维度的任意组合(Framework 暴露) |
形式化:bug 修复的信息分类学为五字段——[P] 问题陈述(观测到的故障)、[D] 期望行为、[R] 复现步骤、[E] 环境信息、[A] 附加信息;功能请求为三字段——[P] 问题陈述(请求的功能)、[M] 动机、[A] 附加信息。一个请求由其字段集合刻画([P]、[PA]、[PDR]……)。语言学维度四个:正式度、句型、确定性、人称。给定:一个底层的软件工程任务(含 gold patch 与单元测试);求:在任意 (字段组合, 风格) 配置下的解析率;约束:变体不得增删信息(分解逐字重分配原文)、不得改变技术字面量(代码块、报错、路径原样保留)。
这个抽象的精妙之处:把『基准-现实差距』从一个混沌的整体现象变成一个可分解的测量问题——总差距 = 信息组合差距 + 风格差距,前者又可以按字段拆分边际贡献。没有这个分解,你只能说『真实输入更难』;有了它,你能说『难在哪、哪几分是噪声、哪几分是关键信号缺失』。
四、问题解法
构造流程四步:刻画请求 → 测量错位 → 构造任务族 → 验证质量。
4.1 刻画 SWE 请求:分类学与维度
数据两端:真实端用 SWE-CHAT(6000+ 真实开发者-智能体会话,取每会话首条用户请求,剔除对话寒暄、工具注入、粘贴的 LLM 输出后剩 718 条真人手写提示——值得注意的是被剔除的 871 条里 62.2% 是 LLM 生成、31.3% 是工具注入,『用户轮≠用户写的』本身就是个方法学坑);基准端用 SWE-BENCH Verified + Pro 的 1229 条问题陈述。分类学锚定 GitHub 默认 issue 模板(bug 模板五字段、feature 模板三字段),语言维度改编自写作风格研究。
4.2 测量错位:两轴上的分布对比
用 GPT-5.4 做标注(识别每条信息、归类、分四维度判风格),得到两张错位图:
信息轴(主错位):真实请求信息稀疏——[P] 单独或 [PA] 占真实提示的 88%(bug 85.5%、feature 91.1%),平均只带 1.4 个字段,64.2% 只有 [P] 一项;基准问题信息丰富——[P]/[PA] 仅占 7%,平均 2.9 个字段。逐字段看差距最触目的两行:[D] 在真实 bug 请求中占 5.4% vs 基准 73.5%;[M] 在真实 feature 请求中占 8.9% vs 基准 96.1%。
风格轴(次错位):真实请求 86.8% 口语化、51.3% 祈使句;基准 84.8%-100% 书面化、约 89% 陈述句。确定性与人称两维无一致分离。
4.3 构造多变体任务族
三步 LLM 驱动流水线:
- 任务类型分类:bug / feature / other(1231 条里仅 2 条 other,皆为重构,剔除)。
- 信息分解:先剥掉 GitHub 模板脚手架(Markdown 标题、HTML 标签——保留全部用户原文),再把问题陈述按句分配到分类学字段,逐字重分配、不重写,保证分解不改变信息量。SWE-Bench Pro 的 Requirements 并入问题描述、Interface 作为外部文档原样给智能体。
- 真实风格改写:按 SWE-CHAT 实测的多数类(口语、祈使、确定、非一人称)重写每个字段,只改表达、保留技术字面量与意图。
门槛约束:支持任意字段组合要求原文五字段(或三字段)齐全——1229 条中 403 条满足(101 条缺的 [E] 从执行容器补齐,因为环境本是客观属性而非作者选择);质量控制再剔 22 条关键失败,得 381 个任务族(192 bug + 189 feature),平均描述长 1417 字符,与 SWE-CHAT 的 1427 几乎重合,远低于传统基准的 1672-2776。发布两种形态:RealSWE-BENCH(固定集,按实测分布抽 [P]/[PA] 变体)与 RealSWE-FRAMEWORK(配置接口,指定任务类型/信息组合/风格即组装数据集)。
4.4 验证与质控
每个 LLM 驱动阶段对人工金标校验:分类准确率 0.95;分解与改写用 GPT-5.6 Terra 裁判全量审计(与人一致率:分解 0.97/macro-F1 0.83,改写 0.99/macro-F1 0.75)。选择偏差审查是点睛之笔:被选中的 381 条相对被排除的 848 条,反而更难(解析率 53.9% vs 63.0%)、补丁更大(134 行 vs 94 行)、仓库更分散(有效仓库数 13.9 vs 11.0)——排除了『挑软柿子』的质疑。
五、评估指标与实验证据
指标体系:
- 主指标:解析率(单元测试判定的任务解决率),每模型-条件跑三次报均值±标准差。
- 辅助指标:每任务成本与步数(考察补偿行为);描述长度(校验分布匹配)。
- 推断框架:任务级多数决(三跑中至少两跑解决)定义二值结果,配对 McNemar 精确检验 + Holm 校正做模型级推断,仓库层 sign-flip 检验做聚合推断,万次仓库聚类自助给 95% CI——依赖同仓库任务的相关性被显式保留。
实验一:基准-现实差距(RQ1)。七个模型(DeepSeek V4 Pro/Flash、MiMo V2.5 Pro/标准版、Claude Haiku 4.5、Qwen3.7 Plus、MiniMax M3,统一 mini-SWE-agent v2 脚手架、100 步上限)全部下降:
| 模型 | 原始 | RealSWE | Δ |
|---|---|---|---|
| DeepSeek V4 Pro | 53.9 | 45.9 | −8.0 |
| DeepSeek V4 Flash | 49.7 | 41.6 | −8.0 |
| MiMo V2.5 Pro | 49.1 | 44.0 | −5.1 |
| MiMo V2.5 | 48.4 | 40.7 | −7.7 |
| Claude Haiku 4.5 | 42.1 | 36.7 | −5.4 |
| Qwen3.7 Plus | 50.1 | 43.5 | −6.6 |
| MiniMax M3 | 34.1 | 30.1 | −4.0 |
平均 −6.4pp(相对降幅 10.3%-16.2%,均值 13.6%),配对检验 p<.001。三个连锁发现:其一,排名会翻——MiMo V2.5 Pro 从第四升到第二,反超 Qwen3.7 Plus 与 DeepSeek V4 Flash,MiMo-Qwen 差距翻转 +3.7pp(CI [+0.7,+7.3])且 MiMo 每任务成本仅 Qwen 的约四成;按原始榜单选型会为一个更贵而不更行的模型买单。其二,分化结构改变——头部四模型间性能差从 1.7pp 翻倍到 3.3pp(原本看着一样的拉开了),而全场最强-最弱差距从 19.8 收窄到 15.8pp(强者失血更多)。其三,任务类型不均——bug 修复平均 −9.1pp,功能请求仅 −3.7pp,提示欠规约请求对 bug 修复尤其致命。其四,成本普遍上浮(七个模型六个更贵,平均 +6.2%)——智能体试图用额外探索补偿信息缺失,但补不回来:真实请求又更差又更贵。
实验二:风格效应(RQ2)。原始 issue vs 全字段改写变体([PDREA]/[PMA],信息等量、只换风格):八个对比中最大的也只 −5.8pp,Holm 校正后 p≥.35,均值近零,甚至有模型改写后变好——风格单独不构成系统性影响。
实验三:字段消融(RQ3,四个模型)。bug 修复沿 [PDREA]→[PDRE]→[PDR]→[PD]→[P] 累积剥离:
- 去掉 [A]、[E]、[R] 三步合计平均只有 1.8pp,无一步显著下降(唯一的显著变化竟是 MiMo V2.5 去掉 [E] 后 +6.2pp)——复现步骤与环境信息平均而言只是 token 负担。
- 去掉 [D]([PD]→[P]):−6.8 到 −9.9pp,四个模型全部 Holm p<.01——单项损失是前三项总和的四倍多。
- 功能请求加 [M]([P]→[PM]):平均 +3.4pp,是唯一均值可辨别的字段(DeepSeek V4 Flash +9.5pp,p=.001;其余模型 +1.8~2.8 不显著)——有价值但不如 [D] 一致。
- 稳健性:[D] 的正效应在 [PA]→[PDA]、[PR]→[PDR]、[PRE]→[PDRE]、[PREA]→[PDREA] 所有周边信息情境下方向不变;[PD] 比 [PA] 高 3.8-6.1pp、[PM] 比 [PA] 高 1.4-3.5pp——多也不如多对。
实验设计为何能证明论点:所有对比都是同任务配对(同一任务在两种输入条件下评测),排除了任务难度混杂;风格效应的隔离(信息恒等只换措辞)与字段效应的隔离(同风格只换字段)分别把两轴的影响干净切开;统计上仓库聚类与多重比较校正都在防守『效应是假的』这个替代解释。这套设计把『真实输入更难』从印象变成了可归因的测量。
六、效果优势的根源解释
本文的『效果』不是模型性能而是评估精度——它能解释别人解释不了的差距构成。根源在三条设计决策。
决策一:变体族固定任务、只动规范。 对比 CursorBench:真实会话里沟通方式与任务、仓库、难度完全纠缠,测得的差异无法归因;对比 Saving SWE-Bench:变异联合改变多属性,同样无法归因。变体族把任务与 gold patch 钉死为常量,任何解析率变化只能来自信息或风格——这是能得出『[D] 贡献 +8pp、[R][E] 贡献为零』这类字段级因果陈述的结构性前提。因果链:固定任务 → 消除难度混杂 → 差异可分解到字段 → 得到可行动的结论(用户该补什么)。
决策二:信息分解逐字重分配而非改写。 若允许 LLM 在分解时重写语句,字段内容就可能与原文有出入,消融测的就不是『移除信息类别』而是『移除某些改写文本』。逐字重分配保证 [PDREA] 变体与原始 issue 信息严格等量——这正是风格实验(RQ2)能做干净对照的前提:原始 vs [PDREA] 之间唯一差异是措辞。这个约束的严格执行(验证标准:技术字面量原样、每行归且仅归一个字段)让『风格无关、信息为王』的结论站得住。
决策三:以实测分布为锚。 [D]/[M] 的价值不是拍脑袋猜的——先量出真实提示里 [D] 只占 5.4%、[M] 只占 8.9%,而基准里分别占 73.5%、96.1%,价值最高的字段恰好是现实最缺的字段,这个交叉验证让 6.4pp 的总差距有了机制解释:大部分来自 [D]/[M] 缺失。反向佐证是 bug/feature 的不对称——feature 的 [P] 本身就描述了期望行为([D] 的作用内置于 [P]),所以 feature 只掉 3.7pp 而 bug 掉 9.1pp,缺口与 [D] 的可用性精确对应。
反事实推理:若把 [D] 从真实提示里补上会怎样?[P]→[PD] 的 +6.8~9.9pp 就是答案——用户多说一句『期望的行为是返回空字典』,解析率就能收复大半失地。若去掉的是复现步骤与环境信息呢?1.8pp 且不显著——这两类信息直觉上重要(对特定 bug 或许确实关键),但平均而言智能体能自己跑出来。『直觉重要』与『平均重要』的落差,正是受控测量胜过直觉判断的地方。
诚实的边界:未覆盖 GPT-5.6、Opus 5、Kimi K3 等当前最强的前沿模型(结论可能不外推到最强者);评测是单轮的,未捕捉迭代澄清如何缓解稀疏请求;DeepSWE 因字段不齐且基线为 0% 无法纳入。
七、必要知识反推
假设一个零知识的人要完成这项工作,最少必须掌握:
领域知识层:
- GitHub issue 的模板生态与 bug/feature 的经典二分(源自软件工程实践与 issue 跟踪研究),这是信息分类学的直接模板。
- SWE-BENCH 家族的评测机制:问题陈述-金补丁-单元测试三元组、解析率定义——不知道任务如何被打分就无法把『任务』设计成可固定的常量。
- 真实开发者与编程智能体交互的形态(SWE-CHAT 一类数据的存在与局限),否则『现实』无锚点。
方法论知识层:
- 控制变量与析因设计的思想:把复合差异分解为正交轴、单因子增量测量——多变体族的全部设计力量来自这里。
- 基准构造中的泄漏防控:分布匹配抽样、种子/任务两级留出、选择偏差审查(难度、补丁大小、仓库集中度的三方对比)。
- 统计推断工具箱:配对设计、McNemar 精确检验、Holm 多重比较校正、仓库聚类自助、sign-flip 置换——『-6.4pp』与『[D] 显著』这些主张的可信度全部依赖这套盔甲。
- LLM 标注/裁判流水线的人机校验方法:双人标注 + 共识 + κ/QWK 一致率 + 与人对照的裁判信度。
工程知识层:
- LLM 驱动的文本变换工程:模板清洗(区分用户原文与模板插入)、逐字分解(每行归一个字段、代码块不拆)、风格改写(保技术字面量)的提示设计与验证。
- 统一评测脚手架运维:mini-SWE-agent 跨服务商一致接口、容器化执行环境、三重复跑的成本控制。
知识融合的关键节点:
- 『把表达当实验变量』的视角:需要同时理解基准构造(任务为常量)与调查方法论(属性为变量),在『族内变体共享 gold patch』这一设计上融合——全文的创造性核心。
- 『用真实数据定标变形方向』:变异型前人的变换规则靠模式归纳,本文先实测 SWE-CHAT 分布再决定变体往哪个方向变——数据驱动与基准构造的融合,也是 [D]/[M] 发现的前提。
- 『可行动性闭环』:从『测出字段价值』到『用户该写什么、智能体该问什么』的建议,把评估研究与产品接口设计接通——作者明确提出两条落地路径:智能体实现前主动追问期望行为/动机,或自行从请求与仓库推断缺失项再写入任务规范。
八、论文中可以提取的通用性灵感
灵感 1:评估要控制『任务如何被表达』,而不只是任务本身。 核心思想:同一任务在不同信息完备度与表达形式下的性能差异是真实且可测的,评估体系应把表达规范当作显式实验变量。 论文证据:同任务配对下,真实风格输入平均 −6.4pp 且改变模型排名;信息与风格两轴的效应被分别隔离。 推广场景:数学基准给同一题的完整版/省略版测模型追问能力;法律 AI 测同一案件在完整卷宗 vs 当事人口述下的表现;医疗问诊 AI 测主诉详略对分诊准确率的影响;客服系统测工单模板与随手留言的处理差距。
灵感 2:信息价值高度非均匀——找到并只补关键字段。
核心思想:输入中不同信息类别的边际价值差一个数量级;与其泛泛要求用户写详细,不如精确定位一两个高价值字段。
论文证据:[D] 一项 +6.89.9pp(全部 p<.01),[R]+[E]+[A] 三项合计 1.8pp 不显著;[PD] 全面优于更常见的 [PA](+3.86.1pp)。
推广场景:需求文档模板把『验收标准』设为必填项;工单系统强制采集『期望结果』而非环境快照;prompt 工程优先写明成功判据而非背景铺垫;数据标注规范里明确正例定义重于负例枚举。
灵感 3:用『用户实际怎么写』的实测分布给评估定标。 核心思想:构造现实感基准不应靠想象或启发式,应先测量目标人群的真实输入分布,再让基准匹配它。 论文证据:先从 SWE-CHAT 量出 [P]/[PA] 占 88%、口语 87%、平均 1.4 字段,再按此比例抽变体构成 RealSWE-BENCH,描述长度 1417 字符与实测 1427 精确对齐。 推广场景:代码补全基准按真实提交信息长度分布造任务;对话系统按真实用户轮次长度造上下文;文档问答按真实咨询问题的口语度造查询;语音助手按真实口误率造扰动。
灵感 4:多属性联合扰动无法归因,单因子变体族才能。 核心思想:想理解哪个因素造成结果差异,必须让其他一切保持不变、只动一个因子——『共享底层任务的任务族』是实现这一点的通用数据结构。 论文证据:Saving SWE-BENCH 联合变异只能报告总差距;RealSWE 的族内单字段差异直接给出 [D]/[M]/[R] 各自的边际贡献与置信区间。 推广场景:推荐系统同 item 不同特征子集测特征价值;模型鲁棒性同样本不同扰动类型分别测;A/B 测试同页面单元素变体;课程设计同知识点不同呈现顺序。
灵感 5:排行榜选型要在目标分布上验证。 核心思想:基准分布与部署分布的错位会系统性改变模型相对表现,选型应在自己的真实输入分布上复测。 论文证据:MiMo V2.5 Pro 在原始输入排第四、真实输入升第二,反超更贵 2.5 倍的 Qwen3.7 Plus(差距翻转 +3.7pp 显著)——原榜单会误导采购。 推广场景:企业选编码模型用自家工单风格测;选翻译模型用自己领域的文档测;选 embedding 用自己的查询分布测;采购决策引入『分布内复测』环节。
灵感 6:智能体应主动补全高价值缺失信息,而非均匀澄清。 核心思想:当输入信息稀疏时,追问和推断应聚焦实测的高价值字段(期望行为/动机),而非对所有缺失一视同仁。 论文证据:现实提示 95% 缺 [D]、91% 缺 [M],而这两项恰是仅有的显著正效应字段——作者据此建议智能体在实现前定向追问或自行推断后写入任务规范。 推广场景:代码助手在动手前先确认验收行为;产品需求智能体先问动机再出方案;运维 Agent 先确认期望状态再执行变更;写作助手先问目标读者再润色。
附录:一个对照样本
看论文图 7 的完整样例最能体会『分解-改写』在做什么。原始 SWE-Bench 输入是一份规整的 Sphinx issue,带三个 Markdown 小节标题(Describe the bug / How to Reproduce / Expected behavior)、复现代码块、外链 repro 仓库;改写后的全字段变体 [PDREA] 信息一字不少,但小节标题消失、行文变成用户随手敲的口吻,代码块与报错原文原样嵌在里面。而 RealSWE-BENCH 里这条任务的实测分布形态可能是更极端的 [P] 版:『Fix nitpick so it stops flagging Literal annotation values as missing py:class. When a value shows up in a type annotation as Literal, Sphinx currently treats that value like a py:class. With nitpick enabled, cases like Literal[True] fail because True is not a class.』——没有期望行为(改成什么样算修好?)、没有复现步骤、没有环境——智能体要自己从仓库里把这些补回来。正是这『一句话』与『一份报告』之间的落差,构成了那 6.4 个百分点。