研究提案 已修订

保留漏斗审计:Oracle 门控的 SQL 智能体轨迹语料丢掉了哪 12.41 个百分点

HarnessSQL 用「通过指称验证与协议检查即保留」产出 2,512 条 SQL 智能体轨迹,但教师 pass@1 71.20% 与 pass@3 83.61% 之间 12.41 个百分点的归属、77.83% 失败率中 81.0% 的注释守卫伪影、协议门的两种定义、oracle 只约束假阳性、难度带保留率五项全部不进账。OVRF 用五轴账本加四统计量审计被拒侧,再做重准入干预。

智能体训练数据 Text-to-SQL 轨迹筛选 数据工程 执行验证 强化学习 语料审计 可复现性

锚点论文是 HarnessSQL(arXiv:2610.12274,香港科技大学、微软研究院、清华大学、澳门大学,v1 于 2026-10-08,cs.CL)。它把「训练—部署错配」落成了一条可执行管线:79 个数据库(Spider 2.0-Lite 的 30 个 SQLite 库 + Spider 2.0-DBT 的 49 个库移植到 SQLite)封进只读沙箱,教师(Qwen3.6-27B)在四工具 DSH-SQL 契约内 rollout,只保留通过指称等价验证与协议检查的轨迹,得到 2,512 条 SFT 语料,再做 DAPO 执行奖励 RL。Qwen3-8B 在 Spider 2.0-SQLite 上从 15.5% 升到 45.2%,14B 从 22.2% 升到 54.8%。代码已开源。

这条管线的说服力集中在「保留什么」。本提案要问的是它的反面:被丢掉的那一部分,丢得有没有道理。

背景与动机

HarnessSQL 的保留门写得很短。§3.3 的原话是「轨迹通过指称验证与协议检查后保留」,产出 2,512 条。附录 K 的表 16 补了一句「每任务三次教师 rollout」,并给出教师的 pass@1=71.20%\mathrm{pass}@1 = 71.20\%、pass@3=83.61%\mathrm{pass}@3 = 83.61\%。三个数字之间缺一条账:每任务滚三次、教师单轮通过率 71.20%、三轮内通过率 83.61%,最终留下 2,512 条——这 2,512 条到底是「首次尝试就通过的那批」,还是「每任务挑一条通过的那批」?

两种读法都与数字逐位吻合。2,512/0.7120=3,528.12{,}512 / 0.7120 = 3{,}528.1,2,512/0.8361=3,004.42{,}512 / 0.8361 = 3{,}004.4,都可取整到合理任务数。全篇没有一句话区分它们。差别不小:若取前者,pass@3−pass@1=12.41\mathrm{pass}@3 - \mathrm{pass}@1 = 12.41 个百分点对应的那一整批任务——占教师可解任务的 12.41/83.61=14.8%12.41/83.61 = 14.8\%——一条轨迹都没进语料,而这批任务恰恰是教师自己也需要重试才做对的那些。§1 把教学目标写成「教会模型何时查 schema、如何解释执行失败、如何从错误的中间假设恢复」,被排除的却正是恢复发生的地方。

第二处口径在失败的定义上。表 11 报告 77.83% 的轨迹含至少一次失败执行,77.71% 出现失败后修订,作者用这两个数论证语料捕捉到了恢复行为。附录 D 紧接着自陈:34,936 次执行里的 3,989 次失败中,3,230 次来自以 SQL 注释开头的查询被只读守卫拒绝(首 token 不是 SELECT / WITH / EXPLAIN)。3,230 / 3,989 = 81.0%。真正属于 SQL 推理错误的只剩 759 次,摊到 2,512 条上是每条 0.302 次;即使假设每条轨迹至多摊到一次,含真实 SQL 错误的轨迹占比上界也只有 30.2%,不是 77.83%。

这条区分不是抠字眼,它直接绑着论文自己的一个因果结论。附录 D 的消融把「仅由前导注释引起的失败轮」剪掉后,执行准确率从 30.4% 掉到 28.2%,作者据此判定保留良性执行失败提供了有价值的恢复监督。这个差值在 n = 135 的评测集上只有 0.40 个二项标准误(30.4% 与 28.2% 的标准误分别约 3.96 与 3.87 个百分点,未配对差值标准误约 5.54 个百分点),论文既没有 seed 也没有逐题 McNemar 对撞。更麻烦的是它的可解释性:若把只读守卫改成先剥离前导注释再判别首 token,这 2.2 个百分点所依赖的那批监督信号会整体消失——一个 harness 的解析选择,被读成了学习信号。

第三处是协议门自身的定义漂移。§2.1 定义 RprotocolR_{\mathrm{protocol}} 检验四项:只读、动作 schema 合规、不含重复冗余查询、在步长预算内终止。附录 J 的实测清单第 6 条是另一套:工具参数合法、只读、预算内、提交前执行过完整 SQL。两边是双向对不上的——§2.1 的「无重复冗余查询」不在实现清单里,实现清单的「提交前执行过完整 SQL」不在 §2.1 里。表 8 给了一个旁证:若保留门真的剔除了重复冗余查询,SFT checkpoint 在评测中的 duplicate-call rate 不该还有 16.29%(基座 58.82%、SFT+RL 6.61%)。

第四处在 oracle 的方向性上。§3.1 采用 SQL-first 下种:生成器先采样一条可执行 SQL,再从真值关系一并导出自然语言指令与执行 oracle。问题与 oracle 同源,凡指令欠定之处(并列排序、舍入时机、NULL 处理、日期字段选取),oracle 只认生成器那一种读法。附录 J 第 5 条的变异测试要求「定向变异不应保持验证结果」,约束的是假阳性——一条错误查询碰巧产出相同结果而被放过。它不约束假阴性:一条在另一种合法读法下指称等价的提交被判失败。附录 I.2 的示例反而暴露了管线对此的自救方式——那条 core 任务的指令把「以机型名作为并列排序的决胜键」「只对展示的营收与比率字段保留两位小数」写死进提示词。指令写得越细,oracle 越接近单射,通过率越高;而 Spider 2.0、BIRD-Interact、LiveSQLBench 的指令不受这层约束。

同一张表还藏着一处同向的口径漂移。表 11 有一行写作 Trajectories with query revision 99.92%,而正文对同一个数的描述是「99.92% execute at least two distinct SQL queries」——执行过至少两条不同 SQL 与 发生过查询修订 是两件事:前者只看查询集合的基数,后者要求后一条是对前一条的修改。二者在论文里共用同一个数字、同一个行标签。于是「修订」在这篇论文的读数里至少有三个版本:表 11 行标签的修订、正文的两条不同查询、以及「执行失败后修订」的 77.71%。三个数支撑的是「语料捕捉到了迭代行为」这一个结论,而它们量的是三种不同的东西。对 OVRF 的直接含义是:失败语义轴 pp 的取值集合必须先固化定义再统计,否则 ϕ\phi 会随定义漂移。

还有一侧漏斗完全没有被本文的审计对象覆盖——RL 侧。§3 写明 RL 训练池是 2,700 条合成 question–SQL prompt 加 100 条验证实例,与 SFT 的 2,512 条是两条独立的管线。SFT 侧至少有「三条 rollout、通过即保留」这句描述可审,RL 侧连这句话都没有:2,700 条从多大的候选池筛出、筛掉的是什么、与 SFT 的 2,512 条在任务上是否重叠,全篇为零。本提案的五轴账本对象因此应显式扩到 RL 池——ρatt\rho_{\mathrm{att}} 与 ϕ\phi 在 RL 侧各有一份独立取值,且两个池的任务重叠率本身就是一个需要刊出的数。

第五处是难度轴与保留率的脱钩。附录 I.1 把 DstrD_{\mathrm{str}} 做成显式下种旋钮,四个带(foundation / core / growth / stretch)各带分数区间与最少结构族数,πb\pi_b 控制课程配比。进入语料的难度分布却是 πb\pi_b 与各带保留率之积,后者从未刊出:表 16 只按来源库切成 1,797(71.5%)与 715(28.5%)。stretch 带被教师通过率筛掉多少,没人知道。

核心思路

提出 OVRF(Oracle-Verified Retention Funnel):把「保留门」从一条二元判据升级为一份可审计的五轴账本,并在账本之上做重准入实验。

账本对每一条被丢弃的 rollout ι\iota 记录五元组 K∗(ι)=(b,a,p,c,v)K^\ast(\iota) = (b, a, p, c, v):bb 是结构难度带与 Dstr(z)D_{\mathrm{str}}(z);a∈{1,2,3}a \in \{1,2,3\} 是尝试序号;pp 是失败来源,取值于 {注释守卫拒绝、真实 SQL 错误、协议不合规、超预算、无失败};cc 是触发剔除的条款标识;vv 是 oracle 判定与结果指纹。HarnessSQL 的可复现性声明里已经写明「记录每条 rollout 的执行 SQL、归一化结果指纹、拒绝原因」,账本只是把这条声明要求的字段落成表。

四个统计量从账本上直接读出,不需要重跑任何模型:

  • 尝试轴上,ρatt=#{a>1}/#{保留}\rho_{\mathrm{att}} = \#\{a>1\} / \#\{\text{保留}\}。等于 0 即确认语料是纯 pass@1\mathrm{pass}@1,14.8% 的教师可解任务整体缺席。
  • ϕ\phi 落在失败语义轴,定义为 #{真实 SQL 错误}/#{全部失败执行}\#\{\text{真实 SQL 错误}\} / \#\{\text{全部失败执行}\},与表 11 的 77.83% 正面对撞。
  • 协议轴产出的是 δproto(d)\delta_{\mathrm{proto}}(d):在 d∈{原字符串, 规范化后, 结果指纹}d \in \{\text{原字符串},\ \text{规范化后},\ \text{结果指纹}\} 三种「重复」定义下分别按 §2.1 重判语料的剔除率,报区间而不报单点。
  • ν\nu 是假阴性轴的估计,ν=Pr⁡[oracle 判失败∧存在合法读法使提交与 oracle 指称等价]\nu = \Pr[\text{oracle 判失败} \wedge \text{存在合法读法使提交与 oracle 指称等价}],抽样框现成——就是 pass@3−pass@1\mathrm{pass}@3-\mathrm{pass}@1 那批被丢弃的首次尝试。

与现有工作的区别在审计对象上。已有的轨迹选择工作(2610.13152)给已保留轨迹打结构分再筛一遍,本方案审计的是被拒绝的一侧,因为拒绝决定已经不可逆地塑形了语料;欠定问题的工作(2610.02739)在评测侧消解指令欠定,本方案把它当成语料保留的系统性偏差来测。

技术路线

第一步,挂账本并回填零训练统计量。 复用已开源代码,在 rollout 侧写 K∗K^\ast,对 2,512 条保留轨迹与全部被拒 rollout 各落一条记录。产出 ρatt\rho_{\mathrm{att}}、ϕ\phi、δproto\delta_{\mathrm{proto}} 三张表,按 bb 分层。这一步不训练,成本是重跑一次数据采集(论文口径:79 库、每任务 3 rollout、8×H800)。

外部裁判标定 ν\nu 放在第二步。从被 oracle 判失败的首次尝试中抽 200 条,与 200 条判成功的配对,双盲交给两名独立裁判(一名人类、一名与教师不同族的 LLM),判定「在指令允许的读法集合内,两者是否指称等价」。门禁设为精确率 ≥0.80\ge 0.80、召回 ≥0.75\ge 0.75,不达标就把 ν\nu 降级为区间估计并在主结局里只报告上下界。

第三步,五臂干预。 用表 7 已验证的便宜设定(Qwen3-8B、固定 1,000 条子集)做臂筛选:A0 原管线(严格退化点)、A1 重准入(把 a>1a>1 通过的轨迹按等 token 预算补入,不是等条数)、A2 真失败匹配(按 ϕ\phi 匹配的子集,与 A1 等条数)、A3 守卫修正(只读守卫先剥离前导注释再判别首 token,重采语料)、A4 难度配额(按 band 等配额重采样,切断 πb\pi_b 与保留率的隐式耦合)。重准入写成单点可调参数 λ\lambda:λ=0\lambda = 0 时 A1 严格退化为 A0。

全量复现排在第四步。通过筛选的臂在 2,512 条全量语料上跑 3 seed(对齐附录 C:3 epochs、471 updates、lr 10−510^{-5}、有效 batch 16、32,768 上下文),14B 只跑 A0 与最优臂各 1 seed。

第五步,口径升级。 主结局一律报 n = 135 的二项标准误;SFT 与对照之间用逐题 McNemar 对撞而不是两个百分数相减;表 8 的六个行为指标(尤其 immediate recovery 与 duplicate-call rate)与准确率并列报告。禁止再用 2.2 个百分点这类不足 1 个标准误的差值支撑因果结论。

两处技术挑战需要提前处理。其一是等 token 预算下的重准入会让 epoch 数变化,控制办法是固定 optimizer update 数(471)而不是固定 epoch。其二是「合法读法集合」本身没有真值,ν\nu 的估计必须依赖裁判一致性,第二步的门禁指标(Cohen’s κ≥0.6\kappa \ge 0.6)先于 ν\nu 本身报告。

预期成果

定量目标分两类。审计类:ρatt\rho_{\mathrm{att}}、ϕ\phi、δproto\delta_{\mathrm{proto}}、ν\nu 四个数首次刊出,其中 ϕ\phi 的执行级点估计是 759/3,989=0.190759 / 3{,}989 = 0.190,对应的轨迹级「含真实 SQL 错误」占比上界为 30.2%;若表 11 的 77.83% 在剥掉注释伪影后仍然成立,本方案对失败语义的判断即被证伪。干预类:在 LiveSQLBench Base-Lite SQLite 上,重准入臂相对 24.8% 的提升若 ≥3\ge 3 个百分点且达 2 个标准误,即证明被丢弃的 12.41 个百分点承载了可迁移的监督;若提升集中在 Spider 2.0-SQLite 而 OOD 不变,说明 in-domain 收益里有一部分是同库熟悉度(论文已声明训练与评测共用 30 个库,附录 E 的任务级审计证明了无任务泄漏,但不覆盖库级熟悉度)。

这条干预门槛需要一处修正,否则会自己踩进它批评的那个坑。24.8% 不是「这个语料在 LSB-SQLite 上的分数」,而是「这个语料用 DAPO 训出来在 LSB-SQLite 上的分数」。论文表 4 在同一 SFT checkpoint、同一 rollout 数据、同一训练预算下比了三种算法:GRPO 40.7 / 8.7 / 23.3,GSPO 43.7 / 9.0 / 25.2,DAPO 45.2 / 9.0 / 24.8(S2-SQLite / BI-mini / LSB-SQLite)。也就是说,在本文要把它当终点的那个 LSB 列上,DAPO 并不是三者最高的,GSPO 比它高 0.4 个百分点;域内列上 DAPO 才最高。于是「提升 ≥3\ge 3 个百分点」这个门槛,比同一张表内算法切换造成的抖动(0.4)大了七倍,看似安全,但它同时说明:若干预臂换了 RL 算法或改了 rollout 预算,读到的差值里就混着算法效应,无法归因到重准入。 修正后的执行要求是——A0 与所有干预臂必须锁死同一算法(DAPO)、同一 prompt 池与同一 rollout 预算,且主结局并列报告三算法对照;否则只报 λ\lambda 的方向与上下界,不报点估计。

定性目标是把「只保留验证通过的轨迹」这句实现描述变成一份可复现的规范:任何 oracle 门控语料都应答出四个轴的取值。对数据工程实践的直接影响是,保留门的每一条规则都要配一个对应的统计量,护栏类伪影(本次的注释守卫)不得被计入失败语义。

引用核验记录(2026-10-20 编辑时逐条回源)

本文主张一手出处结果
标题 HarnessSQL: Harness-Native Training for SQL Agents in Realistic Database Environments、v1 日期 2026-10-08abs 页命中
Qwen3-8B 15.5% → 45.2%、Qwen3-14B 22.2% → 54.8%abs 页、表 2命中(SFT 阶段 30.4% / 37.8%,RL 后 45.2% / 54.8%)
79 个数据库:Spider 2.0-Lite 30 个 SQLite + Spider 2.0-DBT 49 个 DuckDB 移植到 SQLite§3命中
2,512 条验证轨迹;保留条件为「通过指称验证与协议检查」§3.3命中逐字
教师 pass@1 71.20%、pass@3 83.61%;每任务三次教师 rollout表 11、附录 K 表 16命中
77.83% 含至少一次失败执行、77.71% 出现失败后修订、99.92% 执行至少两条不同 SQL(表 11 行标签写作 query revision)表 11、§4命中(行标签与正文表述不一致,即本文新增的第三处口径漂移)
42,704 次工具调用、34,936 次 SQL 执行、3,989 次执行失败、其中 3,230 次来自前导注释被只读守卫拒绝§4、附录 D命中(3,230 / 3,989 = 81.0%;余 759 次)
剪掉注释引起的失败轮后 30.4% → 28.2%(−2.2 个百分点)附录 D命中;n = 135 下未配对差值标准误 5.54 个百分点,2.2 个百分点仅合 0.40 个标准误(复算一致)
RprotocolR_{\mathrm{protocol}} 四项:只读、动作 schema 合规、无重复冗余查询、步长预算内终止§2.1 式 (2) 后命中逐字
附录 J 实测清单第 6 条:工具参数合法、只读、预算内、提交前执行过完整 SQL附录 J命中逐字(与 §2.1 双向对不上,即本文第三处缺口)
表 8 重复调用率:基座 58.82%、SFT 16.29%、SFT+DAPO 6.61%表 8、§4命中
RL 训练池 2,700 条合成 question–SQL prompt + 100 条验证实例§3命中
表 4 三算法对照:GRPO 40.7 / 8.7 / 23.3,GSPO 43.7 / 9.0 / 25.2,DAPO 45.2 / 9.0 / 24.8表 4命中(本文新增引用,用于修正干预门槛)
SFT 配置:3 epochs(471 optimizer updates)、lr 10−510^{-5}、有效 batch 16、32,768 上下文、8×H800附录 C、表 9命中
表 16 来源分布:Spider 2.0-Lite 1,797(71.5%)、Spider 2.0-DBT 715(28.5%)附录 K 表 16命中
OOD:BI-mini 9.0% / 11.3%,LSB-SQLite 24.8% / 28.5%表 1、§1命中

未核到 / 主动收窄:附录 I.1 的四个难度带分数区间与最少结构族数、附录 I.2 的 core 任务提示词原文、附录 E 的泄漏审计细节,本轮未逐字展开,本文只按其结论引用;stretch 带保留率论文全篇为零,本文不为其补估计值。

相关工作

  1. HarnessSQL: Harness-Native Training for SQL Agents in Realistic Database Environments(arXiv:2610.12274)——本提案的审计对象,贡献了沙箱、四工具契约与 2,512 条语料,保留漏斗的五个轴都取自它的附录。
  2. arXiv:2411.07763 — Spider 2.0: Evaluating Language Models on Real-World Enterprise Text-to-SQL Workflows,提供主评测所用的 135 条 SQLite 任务与 328 份接受真值 CSV。
  3. BIRD-INTERACT: Re-imagining Text-to-SQL Evaluation for Large Language Models via Lens of Dynamic Interactions(arXiv:2510.05318)——多轮用户模拟协议,用来判定 ν\nu 造成的是 in-domain 损失还是跨协议损失。
  4. arXiv:2610.02739 — Beyond Correctness: Resolving Underspecification in Agentic Text-to-SQL,把指令欠定当作待消解对象处理,本方案反过来把它当作 oracle 假阴性的来源来测。
  5. Quality, Not Just Outcome: A Structural Scoring Framework for Selecting Coding-Agent Trajectories for Supervised Fine-Tuning(arXiv:2610.13152)——给已保留轨迹打结构分,OVRF 补的是它不覆盖的被拒侧。