ACL 2026 Findings · Answerability Gate · Hidden States · TRGE

LatentRefusal:让 Text-to-SQL 在生成 SQL 前学会停手

它不问 LLM“你确定吗”,而是直接读取模型中间层的状态:问题与 schema 对不上时,在任何 SQL 被生成之前就拒绝。

正式来源:ACL 2026 Findings基础模型:Llama-3.1-8B / Qwen-3-8B核心:TRGE latent probe原文 PDF 已保存

先说结论:在 SQL 生成之前,先判断这个问题是否真的能回答

LatentRefusal 不让 LLM 自己说“我不知道”,而是读取 LLM 中间层的隐藏状态,训练一个很小的分类器判断问题是否可回答。分数低于阈值就直接拒绝,连 SQL token 都不生成。

问题

“看起来合理”的 SQL 更危险

缺字段、指代不清、超出数据库范围的问题,LLM 仍可能编出能执行但答非所问的 SQL。

方法

读取中间隐藏状态

冻结基础 LLM,从选定的中间层取出 token 表示,再用 TRGE probe 输出“可回答概率”。

结果

高 F1,约 2ms 额外开销

在两个 8B 模型、四个基准上平均 F1 为 88.5% / 88.8%,probe 只占约 19M 参数。

一句话理解:LLM 的嘴可能会硬编,但它的“脑内中间状态”往往已经暴露了问题和 schema 对不上;LatentRefusal 就在开口前读这个信号。

哪些问题应该拒绝

缺失或越界

  • 问题要求的字段或表不存在
  • 询问数据库范围之外的知识
  • 实体在当前 schema 中找不到

无法唯一解释

  • 多个字段都可能对应同一句话
  • 约束条件含糊或依赖主观标准
  • 必须进行复杂多跳推理,但缺少关键关系
提示拒绝与内部状态拒绝对比
论文图 1:传统方法等 LLM 生成输出后再看它是否拒绝;LatentRefusal 在生成 SQL 之前读取内部状态并截断风险请求。
与权限拒绝不同:它判断的是“schema 和业务语义能否支持一个唯一、有效的 SQL”,不是“当前用户是否有权执行”。一个问题可能可回答但无权限,也可能有权限但问题本身不可回答。

整个流程怎么走

1

拼接输入

把自然语言问题和数据库 schema 组成提示序列。

2

只做一次前向计算

冻结的 LLM 处理输入,但暂不解码 SQL;从中间层 \(l^*\) 取隐藏状态。

3

TRGE 打分

轻量 probe 聚合 token 表示,输出可回答概率 \(\hat p\)

4

阈值门控

低于阈值直接返回安全拒绝;高于阈值才启动 SQL 生成。

$$ \hat p=g_\phi\!\left(H^{(l^*)}\right),\qquad \text{Gate}(q,S)= \begin{cases} \text{REFUSE}, & \hat p<\tau\\ \text{GENERATE SQL}, & \hat p\ge\tau \end{cases} $$

阈值 \( au\) 在验证集上校准。安全优先时可以提高拒绝召回率,但会误拒一些本可回答的问题;业务优先时则反过来。这使取舍变成可配置、可审计的参数。

TRGE 到底做了什么

LatentRefusal 和 TRGE 架构
论文图 2:上半部分是门控流程;下半部分是 TRGE。它在普通 attention + FFN 的两条残差路径之外,再加一条 SwiGLU 门控残差。

为什么普通线性分类器不够

Text-to-SQL 提示里 schema token 很多,真正的风险信号却可能只是“少了一个字段”“某个实体对不上”。平均池化后,这些稀疏信号很容易被淹没。

第三条门控残差的作用

SwiGLU 像一个由输入决定的软筛子:压低大量无关 schema 模板信息,放大问题与 schema 不匹配的位置,并让这些特征跨层积累。

$$ \begin{aligned} U &= Z^{(k-1)}+\operatorname{Attn}(\operatorname{LN}(Z^{(k-1)})),\\ V &= U+\operatorname{MLP}(\operatorname{LN}(U)),\\ Z^{(k)} &= V+\operatorname{SwiGLU}(\operatorname{LN}(V)). \end{aligned} $$ $$ \operatorname{SwiGLU}(x)=W_d\big(\operatorname{SiLU}(W_gx)\odot(W_ux)\big) $$

TRGE 叠加若干层后做 mean pooling,接一个线性头和 sigmoid 得到概率。基础 LLM 全部冻结,只训练 probe,所以原有 SQL 生成能力不会被修改。

训练时需要什么

监督数据

每条样本包含 schema、问题和二值标签:1 表示可回答,0 表示应拒绝。论文按数据集分别训练 probe。

隐藏状态缓存

先用冻结 LLM 跑一次前向,把选定层的隐藏状态抽出来,再训练 probe。异常的 NaN / Inf 会被截断并归一化。

部署前校准

在验证集选择阈值,明确允许多少误拒和漏拒。论文的目标是高拒绝召回下控制误拒。

实验结果怎么读

先看实验是否公平:论文在 TriageSQL、AMBROSIA、SQuAD 2.0 和内部中文金融数据集 MD-Enterprise 上测试。Llama-3.1-8B 与 Qwen-3-8B 都以 BF16 冻结运行;每个数据集单独按 8:2 训练/验证 probe,并另取约 300 条测试样本。采样型基线用 top-k=10、温度 0.7,LatentRefusal 只做一次贪心前向。

主结果:所有基线都列出来

模型 / 方法MD-EnterpriseAMBROSIASQuAD 2.0TriageSQL平均 F1
Llama / Semantic Entropy66.162.182.366.769.3
Llama / CCS53.154.162.662.958.2
Llama / Self-evaluation*66.764.674.267.268.2
Llama / Eigenscore82.563.272.477.873.8
Llama / TSV97.474.374.785.282.9
Llama / HaloScope97.073.766.182.879.9
Llama / SAPLMA*97.577.775.481.082.9
Llama / LatentRefusal99.680.286.687.788.5
Qwen / Semantic Entropy72.758.082.466.670.0
Qwen / CCS55.447.082.373.464.5
Qwen / Self-evaluation*68.160.287.456.368.0
Qwen / Eigenscore80.059.170.077.871.7
Qwen / TSV98.973.378.085.083.8
Qwen / HaloScope98.072.880.180.082.7
Qwen / SAPLMA*97.881.276.882.684.6
Qwen / LatentRefusal98.880.988.687.188.8
DeepSeek-Chat API / Prompt97.270.387.477.883.2

怎么读:LatentRefusal 的优势不是只赢某一个数据集,而是平均 F1 在两种 8B 主模型上都接近 89%。AMBROSIA 上 Qwen 的 SAPLMA 高 0.3 点,说明它不是每格都第一;但跨四个数据集的稳定性最好。带 * 的 Self-evaluation 和 SAPLMA 也需要监督训练,不能把它们当纯 zero-shot 方法。

54ms

Qwen 总延迟

基础前向约 52ms,TRGE 增加约 2ms;语义熵需要 10 次采样,约 740ms。

19M

四层 TRGE 参数量

不到 8B 主模型的 0.3%,并且只训练这个小模块。

~300

论文声称的适配样本规模

约 10 分钟可完成域内训练,但这是单张 A100-80G 的实验条件。

速度:一次前向和多次采样的差别

方法前向次数 N延迟直观解释
Semantic Entropy1052 × 10ms;实测约 740ms要生成多份答案再算分歧
CCS2100ms需要正反提示各跑一次
Self-evaluation*153ms单次生成式自评
Eigenscore5 / 1051.7 × N ms依赖多样本表示
TSV152ms单次隐藏状态检测
HaloScope150ms单次内部信号检测
SAPLMA*153ms监督式 latent probe
LatentRefusal154ms主模型前向约 52ms,TRGE 约 2ms

结构消融:TRGE 的哪部分有效

变体F1Probe 延迟说明
完整 TRGE87.12.6ms四层 + SwiGLU
去掉 SwiGLU85.42.3ms门控贡献约 1.7 个 F1 点
SwiGLU → MLP83.02.2ms普通非线性变换不够
SwiGLU → GLU75.52.3ms门控形式本身很关键
SwiGLU → GeGLU85.12.0ms接近但仍低 2.0 点
线性 probe70.40.8ms最快,但无法捕捉复杂不匹配
读取层AccuracyPrecisionRecallAUCF1
-184.476.799.087.686.5
-884.577.497.888.786.4
-1685.077.299.888.487.1
-2484.476.499.887.786.5
-3282.974.799.888.485.4

层位消融:-16 层综合最好,但差距并不大;结论是“中间层略优”,不是只有这一层才有信号。

TRGE 深度参数量F1延迟
1 层9.6M82.031.04ms
2 层12.7M83.871.64ms
4 层19.0M87.092.60ms
6 层25.3M85.283.40ms
8 层31.7M84.614.45ms
12 层44.3M83.026.46ms

深度消融:四层是甜点位;继续堆层既更慢又过拟合,并非越深越好。

损失函数F1AUC
Label smoothing ε=0.187.188.7
Label smoothing ε=0.0585.188.4
Focal loss γ=285.388.3
Focal loss γ=185.286.9
BCE84.887.8
DropoutF1AUC
0.085.488.0
0.186.588.4
0.2(默认)87.188.7
0.385.588.0

附录消融的含义:适度 label smoothing 和 dropout 最好,说明约 300 条训练数据下容易过拟合;这些数字也提醒我们,论文效果并非完全“免调参”。

LatentRefusal 中文金融问答生产示例
论文图 3:同一套 Qwen3-8B 系统中,可回答的多条件监管查询得到 p=0.996,不可由结构化数据库回答的主观问题得到 p=0.000;两者端到端延迟都约 467ms。这里展示的是案例,不是大规模线上 A/B 实验。
实验真正证明了什么:在“每个数据集单独训练一个 probe”的前提下,中间隐藏状态能以很小的额外延迟识别不可回答问题。它尚未证明一个 probe 能跨企业、跨 schema 直接复用,也没有证明面对全新拒绝类型仍稳定。

创新点

把拒绝变成生成前门控

不依赖模型最后是否听话地说“不知道”,也不需要先产生或执行风险 SQL。

利用中间层的 latent signal

把可回答性视作表示空间里的分类问题,单次前向即可完成。

为 schema-heavy 输入设计 TRGE

第三条门控残差专门针对“schema 噪声多、错误线索少且局部”的 Text-to-SQL 特性。

放到智能问数系统里怎么用

问题 + 权限裁剪后的 schema

先按用户权限裁剪元数据,避免不可见字段进入模型。

LatentRefusal Gate

判断问题在当前 schema 和业务语境下是否可回答。

Text-to-SQL Agent

只有通过门控才做 schema linking、SQL 生成与修复。

权限与执行校验

再做 SQL AST 权限校验、成本控制、数据库执行和结果脱敏。

使用条件:它需要白盒访问本地模型的隐藏状态,因此不能直接套在只提供 API 的闭源模型上;而且每个业务域可能都要重新标注和训练 probe。

审稿人视角

  • 四个数据集是分别训练、分别测试,尚不能证明一个 probe 能跨数据库、跨领域通用。
  • MD-Enterprise 是内部数据集,无法复现;论文的“企业级中文金融 QA”结论需要谨慎看待。
  • 它擅长缺字段和局部不匹配,但语义近似字段(如 revenue / gross_profit)和复杂多跳 JOIN 仍会失败。
  • 阈值决定真实安全性。只报告固定阈值 F1 不足以替代生产中更重要的风险覆盖率、误拒成本和分布漂移监控。

综合评价:这是一个很适合做“SQL 生成前安全闸”的思路,尤其适合私有化部署模型;但它解决的是 answerability,不应与 RBAC、数据脱敏或最终 SQL 授权混为一谈。