← 返回 2026-08-21

QuoteBench:匹配分数如何掩盖命令路径失败 QuoteBench: How Matched Scores Can Hide Command-Path Failures

Shangao Li, Yao Zhang, Volker Tresp, Yuanyuan Yang 📅 2026-08-13 👍 8 2026-08-26 18:30
LLM智能体 Shell命令生成 基准评测 评测方法论 鲁棒性

固定回复重放把匹配分数分解为传输损伤与契约补偿,揭示命令路径如何颠覆模型排名

前置知识

LLM 编码智能体与 harness

编码智能体是让 LLM 通过工具调用(执行 Bash 命令、读写文件等)自主完成软件任务的系统。harness 是包裹模型的外层框架,负责把模型输出序列化成工具调用、下发到 shell 并回收结果。模型看到的生成契约(它被要求以什么格式表达动作)与最终执行的字符串之间可能隔着序列化、包裹、重解析等多重变换。

本文的核心论点是 harness 的命令路径不是中性管道:同一模型输出在不同路径上结果不同,评测分数必须标注路径才有意义。

Bash 引用与转义

Bash 的双引号内 $、反引号、反斜杠等字符仍会触发展开,单引号才完全保护字面量;把任意字符串插入双引号上下文(如 bash -c "..."、ssh host "..."、CI 的 run 步骤)时必须在插值点重新转义,否则反引号会真的执行命令、$(pwd) 在本地展开、内层双引号提前终止字符串。

QuoteBench 的 56 个任务全部围绕这些风险构造,nested 传输正是利用一层额外的双引号解析来引入受控失败。

匹配评测与固定回复重放

匹配评测为每个配置独立采样并比较总分;固定回复重放则把同一条已存储的模型输出在两种执行通道下各执行一次,输入字节完全相同,结果差异只能归因于通道本身,从而构成受控因果比较。本文用 $Y^{NN}-Y^{RR}=(Y^{RN}-Y^{RR})+(Y^{NN}-Y^{RN})$ 完成分解。

这是论文把传统匹配分数拆成传输损伤与契约补偿两个成分的关键工具,也是它与换 harness 测方差类工作的本质区别。

终态验证(final-state validation)

不检查命令的退出码或标准输出,而是比对执行后的世界状态:文件的精确字节、收到的 argv、解析后的 JSON、目录内容、Git 提交历史等。任何以语义正确方式到达目标状态的实现都得分,防止实现方式差异干扰评分。

论文实测 23.4–47.0% 的失败执行仍返回退出码 0,ShellCheck 只能标记 34.6% 的 nested 失败,只有终态验证能拦住这类静默错误。

研究动机

LLM 编码智能体通过可能对模型输出做序列化、包裹和重解析的接口下发 Bash 命令,一条生成时完全正确的命令仍可能在执行通道上被破坏。典型场景:写文件任务中 naive 命令 echo "back\slash and `date` here ..." 会让反引号真的执行 date、$(pwd) 在本地展开、内层双引号提前终止字符串。现有评测无法定位这类故障:SWE-bench、OSWorld 等综合智能体/终端基准把命令构造与规划、仓库导航、恢复能力混在一起;NL2Bash、NLC2CMD、NL2SH、BashBench 等命令生成基准只在固定传输下评分生成的程序,回答不了'生成正确的命令能否在部署通道存活'。作者对 86 起去标识化的作者会话事故和 412 条公开报告做过机制普查,确认 quoting 失败(坏 heredoc、过度引用、反复修复)反复出现;且每次失败还消耗一次模型生成和工具调用,诊断与重试残留于轨迹。匹配执行分数把'生成错误'与'生成后引入的失败'混为一谈,是评测效度的缺口。

本文的目标是本文要把'命令路径可靠性'从综合能力中剥离出来单独度量,并回答三个问题:可靠性如何在模型、操作家族和命令路径之间变化;对固定回复而言生成契约与执行传输如何交互;厂商暴露的 effort 档位揭示的匹配与重放行为有何差异。具体做法是构建 QuoteBench:56 个 one-shot Bash 任务(14 个操作家族 × 每族 1 个良性对照 + 3 个危险载荷变体),全部使用精确终态验证(文件字节、argv、JSON、目录状态、Git 历史),任何到达正确终态的命令都得分。通过交叉两个生成契约(raw / disclosed-boundary,后者仅加一句'你的回复将被插入 bash -c "R"'的声明、不给任何 quoting 建议)与两种执行传输(raw / nested,nested 增加一层双引号 parser),把传统匹配分数分解为传输损伤与契约条件化补偿两个可分离成分,让评测者看到聚合分数掩盖的对立效应。

与已有工作不同的是,并发研究已表明更换整个 harness 会重排模型排行榜(Zhang et al., 2026b),但它整体替换 scaffold(连同上下文处理、重试、验证),只能测出方差,无法把某次逆转归因到具体机制。QuoteBench 的独特切入是固定模型输出、只改一个下游 parser:对每条已存储的 raw 回复,用与不用一层双引号 parser 各执行一次,同一回复的通过率差异就完全归因于传输。再把契约与传输做成 2×2 交叉,匹配分数被精确分解为 transport damage($Y^{RN}-Y^{RR}$)与 contract-conditioned compensation($Y^{NN}-Y^{RN}$)。作者刻意强调这是'测量而非修复':在插值点正确转义、改写为临时脚本这两个显然的修复都能完全消除效应,正因修复平凡,贡献在于度量本身。为排除合成边界的质疑,作者还用真实 ssh localhost 重放验证 nested 传输逐位复现真实远程路径的损伤。

核心方法

直觉:一条 Bash 命令要成功,需要'模型生成正确的程序'与'程序以正确字节到达执行器'同时成立,传统基准把两者压缩成一个分数。QuoteBench 把两者拆开独立操纵:56 个 one-shot Bash 任务覆盖 14 个操作家族(文件写入、敌意文件名、find/glob、grep、sed、heredoc、argv/env 传参、JSON、Git、两个本地 SSH 模拟),每族 1 个良性对照 + 3 个危险载荷变体(固定操作叠加引号、展开字符、多行、前导破折号或 parser 边界冲突)。评测维度是 2×2 交叉:生成契约 $G\in\{R,N\}$,raw 即模型直接输出 Bash 程序经 bash -c 原样执行,disclosed-boundary 即告知模型回复将被插值进 bash -c "R"(只加一句声明、无 quoting 建议);执行传输 $T\in\{R,N\}$,raw 直接执行,nested 让同一字符串再经一层双引号 parser 重解析。四个格子 RR/RN/NR/NN 全用精确终态验证打分,任务、模型配置与 validator 在格子间固定。

核心创新是固定回复重放:对每条已存储的 raw 回复,分别在 raw 与 nested 传输下执行(RN vs RR),回复字节完全相同,结果差异只能来自新增 parser。传统匹配分数由此可按 $$Y^{NN}-Y^{RR}=(Y^{RN}-Y^{RR})+(Y^{NN}-Y^{RN})$$ 分解为传输损伤与契约条件化补偿。关键洞察是两者可大幅抵消:GPT-5.6-sol 匹配 gap 仅 −3.6 点,其中隐藏 −64.3 损伤与 +60.7 补偿——匹配分数接近零不是'不敏感'而是'对立效应相消'。区别于已有方法:重生成式 prompt 格式敏感性研究(Sclar et al., 2024)因每个格式都重新生成而无法分离通道破坏与模型行为变化;换整个 harness 的工作只能测方差;固定输出重放把一切变化归因于通道。此外补偿是语法条件化的真实适配而非固定防御:GPT-5.6-sol 被告知单引号包裹时 53/56 通过单引号 wrapper、仅 10/56 通过双引号 wrapper,对角优势 +80.4 点。

方法步骤详情

流程五步。一、任务构造:从事故调研把机制映射到 14 个家族,每任务含 fixture(不经 shell 创建)、指令与终态 validator,如 write-file 要求写出含反引号、$(pwd)、混合引号与多行换行的精确字节。二、有效性审计:机器 oracle 一条命令解出全部 56 任务;良性 naive probe 通过、危险版本在 raw 路径失败;对 oracle 产物做 197 个变异,validator 全部拒绝;三个配置 nested 满分作可解性对照。三、生成:13 个模型×多档 effort,在 same-window 随机化调度(effort 省略,2026-07-31)下采集 trial-0 回复;断网 GNU/Linux 容器、全新 fixture、15 秒超时。四、重放:每条存储回复零改动分别经 raw 与 nested 执行,无新增模型调用;用真实 ssh localhost "R" 复核 nested 代表性(7/8 配置损伤逐位复现)。五、分析:按恒等式分解 damage/compensation,做 leave-one-family-out 敏感性(Holm 校正)、任务簇 bootstrap、BSD/macOS userland 对照与私有载荷复验。

技术新颖性

新颖性有四点。其一,机制归因而非方差测量:与整体更换 harness 的并发工作不同,单 parser 干预加固定回复重放把逆转精确归因到命令路径,并把匹配 gap 数学分解为两个可解释成分,在命令发出类评测中属首次。其二,契约操作化:disclosed-boundary 契约只差一句声明(无 quoting 建议),却引发最高 60.7 点补偿;交叉语法实验(披露单/双引号包裹、各经两种 wrapper 重放)证明模型适配的是声明语法而非记忆的双引号修法——顶部三模型对角优势 +80.4/+77.7/+65.2 点,底部 0.0 至 −19.6。其三,验证方法论:证明退出码不可靠(失败执行中 23.4–47.0% 仍 exit 0)、ShellCheck 只标记 34.6% 的 nested-only 失败,精确终态验证与 197 变异审计因此必要。其四,多重稳健性:GNU/BSD userland、重复采样、42 个私有载荷与 JSON 边界(naive 嵌入损失 51.8–66.1 点、正确序列化器为 0)均成立,机制是'未转义的变换'而非'任何变换'。

Crossing generation contract with execution transport
Figure 1: Crossing generation contract with execution transport

实验结果

机制分析基于 8 个 same-window 配置的 trial-0 回复。发现一:损伤普遍且巨大——固定 raw 回复改走 nested 使通过率降 55.4–73.2 点(Gemini-3.1-Pro 从 98.2% 跌至 25.0%),良性对照任务也损失 28.6–57.1 点,415 个直接成功仅 123 个存活。发现二:补偿模型依赖——6/8 配置恢复 30.4–60.7 点(GPT-5.6-sol 与 GPT-5.5 各 +60.7、Opus-5 +58.9),Qwen3.5-27B 为 0.0、Flash-Lite −5.4;补偿集中显式风险(json-write +50.0),隐式风险仍破(find-glob −12.5)。发现三:匹配分数掩盖机制——GPT-5.6-sol 的 −3.6 gap 实为 −64.3 损伤与 +60.7 补偿相消;Opus-4.8 匹配 gap 从 −48.2 收敛到 −3.6,损伤却恶化至 −67.9。发现四:部署重排模型——RR 与 NN 排序 Kendall τ 仅 0.57(95% CI [0.32,0.82]),唯一无歧义逆转是 GPT-5.6-sol vs Gemini-3.5-Flash(raw 落后 1 任务、nested 反超 18 个)。发现五:分数版图——最佳观测下三个模型满分 56/56,其余 14.3–98.2%;原生 shell 工具 85.7–98.0%(Δ −10.0 至 +2.6 点)。修复:插值点转义使 448 个公开对逐位复现,临时脚本对 448 公开 + 126 私有对有效。私有复验:42 个未见载荷损伤 −73.8/−76.2、补偿 +78.6/+26.2。effort 梯度:RN 始终在 23.2–33.9%、单 ladder 波动 ≤5.4 点,匹配上升主要来自补偿。

One worked QuoteBench task (write-file, tier 3)
Table 1: One worked QuoteBench task (write-file, tier 3)
Best-observed QuoteBench scorecard
Table 2: Best-observed QuoteBench scorecard
Absolute GNU replay pass rates in the separate Study-B campaign
Table 3: Absolute GNU replay pass rates in the separate Study-B campaign
All four crossover cells for the eight same-window configurations
Table 4: All four crossover cells for the eight same-window configurations
Private-v2 crossover on 42 hostile payloads
Table 5: Private-v2 crossover on 42 hostile payloads
Private-v1 fixed raw replies under three transports on 42 tasks
Table 6: Private-v1 fixed raw replies under three transports on 42 tasks
Matched-nested success varies by operation family across the frozen configuration sweep
Figure 2: Matched-nested success varies by operation family across the frozen configuration sweep
Where effort raises matched success, the nested-replay pass rate changes little
Figure 3: Where effort raises matched success, the nested-replay pass rate changes little
Effort settings are provider-specific operating points
Figure 4: Effort settings are provider-specific operating points
查看结构化数据
任务指标本文基线提升
固定 raw 回复经 nested 传输重放(8 个 same-window 配置 × 56 任务) 终态通过率变化(百分点,damage = RN − RR) 全部配置损伤 −55.4 至 −73.2 点;良性对照任务损失 28.6–57.1 点 同一回复的 raw 路径成绩(RR 为 78.6–100.0%) 证明损伤完全来自新增 parser;真实 ssh localhost 重放对 7/8 配置逐位复现
disclosed-boundary 契约生成(NN vs RN,仅加一句边界声明) 补偿(百分点,comp = NN − RN) 6/8 配置 +30.4 至 +60.7;Qwen3.5-27B 0.0;Gemini-3.1-Flash-Lite −5.4 raw 契约回复的 nested 通过率(19.6–30.4%) 披露本身即可引发语法条件化适应;对角语法实验中 GPT-5.6-sol 优势 +80.4 点
56 任务最佳观测匹配 nested 分数(13 模型,档位内取最优) All-56 通过率 GPT-5.5 / Opus-5 / Fable-5 均 100.0%;GPT-5.6-sol 98.2%;其余 14.3–98.2% 固定 same-window 配置下匹配 nested 仅 14.3–91.1% 路径与档位选择最多带来约 84 点差异;三个满分模型在所有敌意 LOFO 切片仍满分
原生 shell 工具 vs raw 路径(Study B,6 个托管模型,effort 档与 3 次采样合并) 通过率与 Δ(百分点) native 85.7–98.0%,raw 95.4–99.3% 受控 nested 边界下的成绩 native−raw 为 −10.0(Gemini-3.5-Flash)至 +2.6(Opus-4.8)点,远小于 nested 损失
private-v2 未见载荷交叉(42 个敌意任务,单窗口交错采样) 损伤 / 补偿(百分点) GPT-5.6-sol:−73.8 / +78.6;Opus-4.8:−76.2 / +26.2;LOFO 全为负损伤 raw 路径两者均 92.9% 机制迁移到未公开载荷;3 次重复采样保持损伤为负、补偿为正
部署路径排序稳定性(RR vs NN 模型排名) Kendall τ 与逆转对数 τ=0.57,95% CI [0.32, 0.82];1 对无歧义逆转、4 对单任务边缘;逆转对数 bootstrap 均值 4.6 [1,8] 完全一致排序对应 τ=1.0 证实以 raw 分数选型会选错:按 raw 选 GPT-5.5(nested 50/56),路径感知选择可达 51/56

局限与改进

作者承认的局限:只隔离一个机制(one-shot Bash 的引号与插值风险);14 个家族是有目的构建的,支持归因但不支持发生率估计;nested 虽经真实 ssh 验证(7/8 配置逐位复现),仍是受控压力条件而非部署频率断言;因果结论依赖 8 个 same-window 配置的固定回复,effort 梯度每档仅一次存储生成且标签跨厂商不可比(未设置 effort 映射到各家不同位置);native 战役是观察性的;held-out 载荷未做难度匹配;typed-operation 试点仅 6 个家族且 36 程序中 11 个失败;PowerShell、Windows CMD、认证、网络故障、交互终端与多轮恢复在范围之外。我的补充:56 任务单 trial 的二值结果使 4 对排序落在单任务边缘;双引号 parser 是唯一系统研究的边界,序列化器、模板引擎、CI 层的组合效应未知;补偿是有限基准内的已实现对比而非期望行为的统计推断;BSD 会话生成、GNU 重放时观察到最高 8.9 点方言亲和效应,说明 userland 也是需报告的隐藏变量。

独立分析的弱点

弱点一:边界覆盖单一,系统实验只有一层双引号 parser(JSON 仅附录试点),真实栈可能叠加 ssh + docker + CI 多层转义,层间交互未测;改进方向是多层边界的 factorial 实验。弱点二:统计功效有限,56 任务、14 家族、多数配置单 trial,家族级区间偏宽,4 对排序落在单任务边缘(逆转对数区间 [1,8]);改进方向是扩充家族×载荷网格并报告多次采样置信区间。弱点三:补偿是'已实现'对比,基于每任务恰好两条存储生成,回答不了期望通过率与适应稳定性;改进方向是每格多次重采样。弱点四:对两个非补偿配置(Qwen3.5-27B、Flash-Lite)缺乏机理解释,未区分'无法理解披露'与'生成能力不足';改进方向是受控探针(让模型复述边界含义)分离理解与执行失败。弱点五:修复评估停在'能否恢复',未度量临时脚本引入的文件生命周期开销与多轮副作用。弱点六:native campaign 为观察性比较,混杂厂商工具内部可能的转义处理,无法像 nested 那样做机制分解。

未来方向

作者提出的方向:把分解框架推广到任意'生成后变换'管道——任何在执行前变换模型输出的步骤都定义同样的四个格子,JSON 工具调用边界已有试点(naive 字符串嵌入损失 51.8–66.1 点,正确往返序列化器恰为 0,说明罪魁是未转义变换而非变换本身);typed operations 作为探索性替代,但试点显示 36 个程序中 11 个失败、10 个留下错误终态,主因是模型把指令分隔符复制进载荷,说明类型化接口仍需载荷级卫生;评测报告改革——厂商与评测者应披露生成契约、部署执行路径、所选 operating point 与家族级失败。基于成果可延伸的:将交叉设计应用于多轮恢复(失败后的修复行为是否同样被匹配分数掩盖);研究边界披露的最优信息量(一句话 vs 完整语法规范 vs few-shot 示例);构建路径感知的模型/档位选择器以最小化部署遗憾;把对未披露边界的鲁棒性作为训练目标;在真实智能体框架(Claude Code、Codex、Warp 等,作者已普查其接口形态)中量化此类边界的实际出现频率,补上本文刻意回避的 prevalence 研究。

复现评估

复现条件较好但有关键依赖。开源方面:工件发布全部 56 任务的指令、fixtures、oracles 与 validators,冻结核心版本化为 core-v1;每任务文件嵌入固定 canary GUID 供污染检测;事故证据仅以去标识化机制分类发布;项目页 quotebench.lsamc.website。安全设计完备:每次尝试在全新 fixture 中运行于超时限制、断网容器。复现门槛分层:本地复跑任务与 validator 零门槛(Docker 即可,含 BSD/macOS userland 对照);但机制分析核心依赖 13 个托管模型(GPT-5.x、Claude、Gemini 3.x、Qwen3.5)的 same-window 采样,需多家 API 凭证与预算,且 same-window 随机化调度是结论成立的前提——托管快照可能同名漂移(作者把查询日期 2026-07-31 写入结果),第三方难以逐位复现;开源 Qwen3.5 可自建推理部分复现 2×2。综合难度:中等偏高——基准工程复现容易,机制结论的精确复现依赖受控 API 窗口与预算。