QuoteBench:匹配分数如何掩盖命令路径失败

QuoteBench: How Matched Scores Can Hide Command-Path Failures

arXiv: 2608.13547v1

论文信息

标题: QuoteBench: How Matched Scores Can Hide Command-Path Failures

作者: Shangao Li, Yao Zhang, Volker Tresp, et al.

发布日期: 2026-08-13

arXiv ID: 2608.13547v1

PDF 链接: 下载 PDF

3 分钟速览

  • 研究问题:LLM 编码智能体生成的 Bash 命令在接口中可能被序列化、包装和重新解析;匹配执行分数无法区分命令生成错误与生成后由传输边界引入的失败。论文提出 QuoteBench 来测量这条边界。
  • 核心方法:构建 56 个一次性 Bash 任务、14 个操作族,用最终状态验证器打分;同时交叉「生成契约」与「执行传输」,固定同一模型回复重放,把匹配分数分解为传输损伤和契约条件补偿。
  • 关键结果:在 8 个同窗口配置中,把同一原始回复经新增的一层双引号解析器重放,成功率下降 55.4–73.2 个百分点;披露边界后,6 个配置恢复 30.4–60.7 个百分点。GPT-5.6-sol 匹配差距仅 -3.6 点,却隐藏了 -64.3 点损伤和 +60.7 点补偿(见论文第 4.2 节、表 4)。
  • 主要局限:QuoteBench 只隔离一种机制:一次性 Bash 生成在引号和插值风险下的表现;14 个构造家庭用于机制归因,不代表部署中的普遍发生率。努力阶梯每个任务只存储一个生成,原生工具研究是观察性的(见论文 Limitations)。
  • 适合读者:评估 LLM coding agents 可靠性、命令行工具安全、智能体基准设计和 shell 执行路径的研究者与工程师。

论文背景和研究动机

Bash 引号失败会破坏字面量、中断常规智能体动作并触发修复循环。即使写精确字节、传递字面参数、编辑 JSON 或模拟远程调用这样简单的任务,也必须保留引号、美元符号、反引号、换行、glob 字符和展开时机。公开问题追踪器记录了损坏的 heredoc、被过度引用的运算符和多次修复尝试。作者在附录 A 中调查了 86 个内部编码智能体事故和 412 个公开报告,保留了 17 个模型级 POSIX/Bash 命令构造事故,其中 5 个包含第二解析器边界。

现有基准无法把这种失败模式从其他能力中分离出来。宽泛的编码和终端基准把命令构造与规划、仓库导航、恢复混在一起;命令生成基准则在固定传输下给发出的程序打分。于是,智能体成功不能说明第一条命令是否保留了载荷;命令生成成功也不能说明它是否在部署后存活。QuoteBench 的目标就是隔离这个问题:用公开的 Bash 解析规则,对最终状态做精确检查,测量模型输出在跨过一层未被转义的解析器时会发生什么。

核心方法和技术细节

QuoteBench 包含 56 个一次性 Bash 任务,覆盖 14 个操作族,每个族有一个良性控制任务和三个危险载荷变体。任务覆盖字面文件内容、恶意文件名、正则/glob 元字符、heredoc、参数和环境传递、JSON 与 Git 状态,以及两个本地 SSH 式模拟。验证器检查最终文件字节、argv、JSON、目录状态或 Git 历史,只给最终状态打分;因此任何语义正确的实现都能获得通过。论文报告,失败执行中有 23.4%–47.0% 以零退出码结束但留下错误状态(附录表 18),所以依赖返回码会漏掉接近一半失败。

方法的核心是交叉设计。模型面对的生成契约分两种:raw 契约告诉模型 “回复将作为 bash -c 的参数原样执行”;disclosed-boundary 契约告诉模型 “回复 R 会被插值成 bash -c "R" 后执行”。执行传输也分两种:raw 执行直接运行回复;nested 传输增加一层双引号解析器。固定任务、模型配置和验证器不变,对每个存储回复重放,得到四个单元:RRRR、RNRN、NRNR、NNNN。定义固定回复传输损伤为 YRN−YRRY_{RN}-Y_{RR},契约条件补偿为 YNN−YRNY_{NN}-Y_{RN},两者之和为匹配差距:

YNN−YRR=(YRN−YRR)+(YNN−YRN).Y_{NN}-Y_{RR}=(Y_{RN}-Y_{RR})+(Y_{NN}-Y_{RN}).

这个分解让研究者能够区分:匹配分数变化中,多少是传输层破坏的,多少是模型在得知边界后主动改变生成而补偿的。表格 4 给出了所有四个单元和效应值。

验证方面,机器构造的 oracle 用一条命令解决所有任务;验证器接受每个 oracle 和良性探针,拒绝所有未触碰初始状态、危险探针和全部 197 个适用突变。

创新点和贡献

论文作出三个贡献。第一,QuoteBench 把反复出现的引号和转义失败变成 56 个最终状态任务,用受控载荷变体和审计过的验证器把字面量保留从规划和恢复中分离出来。第二,交叉设计把生成契约和执行传输独立变化,并用固定回复重放把匹配分数分解为传输损伤和契约条件补偿;这让评估者看到聚合成功何时掩盖了命令路径上大小相反的两个效应。第三,鲁棒性和一个「测量而非新修复」的结论:传输损失在努力设置、重复采样、 GNU/BSD 用户态和未公开载荷上持续存在;正确的转义和临时脚本都能完全消除这个效应,但作者强调 “贡献在于测量,而不是修复”。

另一个重要创新是固定回复重放。先前工作通过替换整个 harness 观察排序反转,但无法把反转归因到某个机制。QuoteBench 固定模型输出、只改变一个解析器,因此能把排序变化归因到命令路径。这是方法上的关键突破。

实验结果分析

在 8 个同窗口配置中,移动固定 raw 回复从 raw 传输到 nested 传输,每个配置损失 55.4–73.2 个百分点;连 14 个良性控制任务也单独损失 28.6–57.1 个百分点,因为模型即使对普通命令也会输出双引号活动字符(见论文第 4.2 节、表 4)。重新解析只保留了 415 个直接成功中的 123 个,配置级保留率为 25.0%–35.4%。

契约条件补偿方面,6 个配置恢复 30.4–60.7 个百分点,两个配置为零或略负:Qwen3.5-27B 为 0.0,Gemini-3.1-Flash-Lite 为 -5.4。GPT-5.6-sol 的匹配差距仅 -3.6 点,由 -64.3 损伤和 +60.7 补偿组成,是典型被掩盖的例子。这在该数据集/该实验设置下成立。

努力阶梯上,raw 条件下生成的回复经 nested 重放的通过率保持在 23.2%–33.9%,在任何模型自己的阶梯内最多变化 5.4 个百分点。Opus-4.8 的匹配差距从 low 的 -48.2 点收窄到 max 的 -3.6 点,但损伤从 -58.9 扩大到 -67.9,nested 重放通过率几乎没变。这说明匹配分数提升主要来自契约条件补偿,而不是跨路径可移植性的改善。

在私有载荷上,GPT-5.6-sol 和 Opus-4.8 的 raw 通过率均为 92.9%,随后经 added parser 分别损失 73.8 和 76.2 个百分点;补偿分别为 +78.6 和 +26.2(表 5)。临时脚本重放恢复了所有只在 wrapper 下失败的命令,35 个直接失败命令仍未解决。JSON 边界实验显示,正确往返序列化器损失为零,而未转义的 naive 嵌入造成 51.8–66.1 点损伤(附录 E.1.5)。这些结果共同支持核心结论:匹配分数不能作为模型固有属性。

实践建议

对命令发出型智能体的评估者和系统构建者,这篇论文给出几个可操作建议。

第一,报告生成契约和执行路径。匹配分数只描述它声明的路径;当路径改变或增加未披露边界时,固定回复重放能揭示可移植性。系统构建者应公开发布模型配置、生成契约、执行路径、所选运行点和最终状态验证器,而不是只报告一个匹配分数。

第二,在插值点做转义。论文报告,将存储回复在插值点用标准 shell 引号转义后,448 个公开配对全部重现 raw 路径结果;将回复作为临时脚本执行也重现 raw 结果。因此,如果部署路径会添加一层内插 shell,第一线修复是在 harness 侧把回复转义。当边界不受调用方控制(例如远程 ssh 或 CI 模式)时,临时脚本可以在文件生命周期成本下保留程序边界,同时披露边界让能力较强的模型部分补偿。

第三,用最终状态验证器而不是返回码。失败执行中相当一部分以零退出码结束,信任返回码会静默漏掉失败。验证器应检查最终字节、argv、JSON、目录状态或 Git 历史。

第四,选择模型和运行点时使用路径匹配。论文报告,部署配置会重排模型:在 26 个可比较对中有一个明确反转,四个处于单任务边缘(见第 4.2 节)。raw 生成接近饱和,几乎所有区分信号都在 nested 侧。用户应比较模型中在目标路径上的表现,而不是依赖 raw 路径分数。

第五,不要假设结构化操作能消除所有引用问题。原生 shell 工具虽然较接近 raw 执行,但效果仍依赖模型。类型化操作试点中,11/36 个程序失败,其中 10 个留下错误最终状态,常见原因是模型把指令分隔符复制进载荷。因此结构化表示移除了一个引用边界,却仍可能出现载荷级表示错误。

最后,命令接口是受评估系统的一部分,不是中性管道。部署报告应同时发布所选运行点和测量阶梯,因为提供商的努力标签不可直接比较,默认设置也映射到不同运行点。