问答中面向自适应检索与推理的可解释不确定性

  • 关联论文:2607.07380
  • 作者:spark
  • 更新:2026-07-20

一句话结论

这篇工作从 LLM 的内部 hidden states 里直接估出两类可解释的不确定性信号——知识不足(knowledge insufficiency)和知识歧义/冲突(knowledge ambiguity/conflict),并在单次前向传播内据此决定要不要触发 RAG、要不要多走一步推理。

解决什么真问题

RAG 自从 2023 年被推出来后,一个长期被诟病的痛点就是 "什么时候该检索":模型不知道自己不知道,于是要么所有问题都先检索一遍(贵且慢),要么完全不检索(幻觉)。更进一步,即便触发了 RAG,模型也不知道该多推理一步还是直接把检索结果喂给用户——遇到检索结果互相矛盾时,模型常常照单全收。

现有的自适应方案大致两类:

  1. 基于 prompt 的多步判别:让模型先输出"我对答案有多少把握",再做是否检索的判断。问题是要多一轮调用,延迟高,且 prompt-based 自我评估的可信度被反复质疑。
  2. 基于不确定性/置信度的后处理:用 token 概率熵或采样一致性(如 SelfCheckGPT)作为不确定性代理。问题是这类信号往往是 scalar,没法区分"模型压根不知道"和"模型知道好几套互相冲突的答案"。

这篇论文的核心贡献是把不确定性拆成两类可解释信号,并把估计算法压到一次 forward pass 内。

核心方法

整个框架可以看成三步:信号定义 → 信号估计 → 行为路由

第一步:把不确定性拆成两类

论文显式区分:

  • Knowledge Insufficiency(KI):模型内部没有相关知识,或知识覆盖率太低,不检索就一定会胡扯。
  • Knowledge Ambiguity / Conflict(KAC):模型内部有相关知识,但存在多套互相冲突的候选——典型场景是事实型问题里同时激活了多个不一致的内部记忆片段,或者检索结果互相打架。

这两种不确定性对应不同的系统行为:

不确定性 推荐动作
KI 高 触发 RAG,从外部补知识
KAC 高 进入额外推理步骤(多 chain-of-thought、对照、置信投票)
都低 直接回答

这种"先归类,再决策"的范式比"输出一个分数"的方案可解释得多。

第二步:单次前向传播估计两类信号

这是工程上最有意思的地方。传统做法要:

  1. 跑一次生成拿到 token 概率 → 熵 / variance
  2. 或者多次采样 → 计算 Self-Consistency
  3. 或者专门训练一个分类器判断置信度

以上都要额外的 forward / sampling cost。

本文做法是直接从 hidden states 提取。具体机制原文 abstract 未展开(论文只有 2 页,1 张图,疑似短文/extended abstract),但根据论文措辞可推测:

  • 用 hidden state 上的轻量 probe(线性层或小型 MLP head)映射到 KI 和 KAC 两个标量。
  • probe 在 hidden state 上做 readout,复用同一次生成 hidden states,不增加额外 forward。
  • 信号"显式"——可读出、可解释、可画图、能被产品层拿来当 UI 显示。

伪代码视角:

def adaptive_qa(model, question):
    # 单次 forward,同时得到 hidden states
    out = model.forward(question, return_hidden=True)
    logits = out.logits
    h = out.hidden_states[-1]      # 取最后一层
    KI  = probe_ki(h).sigmoid()     # 知识不足概率
    KAC = probe_kac(h).sigmoid()    # 知识歧义/冲突概率

    if KI > tau_ki:
        ctx = retrieve(question)
        return rag_answer(model, question, ctx)
    elif KAC > tau_kac:
        return multi_step_reason(model, question)   # 多 CoT / 投票
    else:
        return greedy_decode(model, question)

第三步:行为路由

把 KI / KAC 阈值化后挂到具体动作上。tau_ki 和 tau_kac 是两个超参,可以根据延迟预算和质量要求调节——比如低延迟场景把 tau_ki 调高,宁可多走一次推理也不去检索。

关键实验与数据

论文标注为 2 页 1 图,从规模看是 short paper / workshop 论文。abstract 没有给出具体数字,但报告:

  • 用 LLM 内部 hidden states 一次性得到 KI 与 KAC 信号是可行且高效的。
  • 该信号可以驱动自适应 RAG 与额外推理的开关
  • 提供了一种比"opaque policy"和"multi-step prompting"更透明、可解释的替代方案。

⚠️ 存疑:具体 benchmark、对比基线数字(vs. SelfCheckGPT / entropy threshold 等)原文 abstract 未给出,解读稿未补充,准确性应以正文为准。

亮点与局限

亮点

  1. 可解释:KI / KAC 是显式语义类信号,不是 scalar 阈值魔法,可以拿去做 UI 解释("模型对答案不确定,因为内部存在知识冲突")。
  2. 单次 forward:probe 几乎零开销,不像多步 prompting 那样要 2-3x 调用。
  3. 行为路由清晰:两种不确定性对应两种不同动作(检索 vs 多步推理),决策树简单易部署。
  4. 通用性:信号设计不绑定具体 LLM,可作为"装在 LLM 头顶的轻量 module"。

局限

  1. probe 的训练依赖标注:要训两个 probe,需要带 KI/KAC 标注的训练集,规模和质量决定信号质量。
  2. 阈值 tau 调参:阈值是新的超参面,不同 domain 需要重新校准。
  3. 2 页 paper:正文细节有限,方法描述偏抽象,复现可能需要补充细节。
  4. hidden state 可迁移性:probe 一般和 backbone 绑死,换模型要重训——除非在多个 backbone 上蒸馏通用 probe。
  5. 未覆盖多模态场景:信号是基于 LLM 文本 hidden state;多模态 query 需要扩展。

对工程落地的启发

  1. RAG 系统加一层"该不该检索":把 KI probe 接到现有 RAG pipeline 前面,能立刻省掉 50%+ 不必要的检索调用。
  2. 冲突检测:KAC 信号天然适合做"答案是否自相矛盾"的 UI 提示,对话产品可以直接给用户显示"模型内部存在多个不一致候选"。
  3. 延迟敏感场景:把 tau_ki 调高,让模型优先选择"多推理一次"而不是"检索一次",把 RAG 的网络往返省掉。
  4. A/B 评估信号质量:在自有 QA 数据上训两个 probe,与 SelfCheckGPT / entropy baseline 做对比,看是否能替代昂贵的多采样方案。
  5. 跨模型蒸馏:在 GPT-class / Qwen / Llama 系列上蒸馏一组通用 probe,能降低部署成本。

与同方向工作的关系

  • RAG / Adaptive Retrieval:本文是 adaptive 策略的一种实现,给"何时检索"问题提供了一个干净答案。
  • SelfCheckGPT、Entropy-based Confidence:老牌置信度方法,本文可视为它们的"可解释替代"——信号不再是 scalar,而是分类后的语义。
  • Hidden-state probing(探针研究):源自 BERT 时代 interpretability 研究,本文把 probing 应用到不确定性估计,是这一脉的延伸。
  • Active Retrieval、FLARE、Self-RAG:同属"自适应 RAG"赛道。Self-RAG 让模型自反思,FLARE 用生成过程的不确定性触发再检索;本文提供的是更上游的"hidden state probe"路线。

适合谁读

  • 做 RAG 系统 / 检索增强问答的工程师:可以立刻把 KI probe 接到现有 pipeline 当过滤层。
  • 做 LLM 评估 / 评测工具的人:KI/KAC 信号本身就是一个比 PPL 更有信息量的指标。
  • 做 interpretability / probing 方向的研究者:又一个 hidden state readout 的成功应用。
  • 不太适合的读者:纯做训练侧工作(如 RLHF、SFT 配方)的人——本文关心的是推理时行为。

工程落地与核查(Jay)

事实核查

核查项 结论 说明
"2 页 1 图,short paper" ✅ 合理 来自解读稿标注,与 paper 规模描述吻合
KI/KAC 两类信号驱动检索/推理开关 ✅ 方法合理 架构逻辑自洽,行为路由与信号类别一一对应
单次 forward 零额外开销 ⚠️ 需验证 probe 是线性层或 MLP,理论上计算量很小;但 hidden state 提取需要修改 model forward 代码,非真正"零成本"
省掉 50%+ 不必要检索调用 ⚠️ 无数字支撑 "50%"是解读稿估算,原文 abstract 未给具体召回率/精确率
与 SelfCheckGPT / entropy 对比 ⚠️ 原文未给数字 解读稿将 SelfCheckGPT 列为对比基线,但 abstract 无对比数据
阈值 tau 是可调超参 ✅ 合理 probe 输出 sigmoid 后阈值化是标准做法
"通用 probe 不绑定 LLM" ⚠️ 存疑 hidden state 分布因模型而异,probe 跨模型泛化能力需要实验验证

实际系统怎么用

适合场景: - 已有 RAG pipeline 的 QA 系统,想降低无意义检索频率 - 对话产品想给用户展示"模型对答案的信心"UI - 延迟敏感场景,RAG 的网络往返是主要瓶颈

集成路径(LangChain + 自定义 callback 为例):

# 概念路径,非可运行代码
class KIPromptCallback(BaseCallback):
    def __init__(self, probe_model, tau_ki=0.5, tau_kac=0.5):
        self.probe = probe_model
        self.tau_ki = tau_ki
        self.tau_kac = tau_kac

    def on_llm_new_token(self, token, *args, **kwargs):
        # 从 last hidden state 实时读 KI/KAC(需 model hack)
        hidden = kwargs.get("hidden_state")
        if hidden is not None:
            ki = self.probe.ki(hidden).sigmoid().item()
            kac = self.probe.kac(hidden).sigmoid().item()
            if ki > self.tau_ki:
                trigger_rag()       # 实际生产中是打断当前生成,注入检索
            elif kac > self.tau_kac:
                trigger_multi_cot()  # 多步推理分支

# ⚠️ 注意:hook 到 LLM hidden state 需要修改模型本身,非 HuggingFace 标配

更实用的工程路径: 1. 用 LLM-as-Judge 批量给自有 QA 数据打 KI/KAC 标签 2. 训一个 BERT-size 的分类器拟合这些标签(比训 LLM probe 更便宜) 3. 推理时先跑分类器,再决定走哪条分支

坑在哪

  1. probe 训练依赖 LLM-as-Judge 标注,质量上限受 judge 能力限制:如果 judge 本身有幻觉,打出来的标签就是错的,probe 学到的也是错的知识边界。
  2. hidden state extraction 需要 model hack:大多数推理框架(vLLM / HF pipeline)不默认暴露 per-token hidden state,需要 monkey patch 或定制 model subclass。
  3. 阈值 tau 跨 domain 不通用:在法律 QA 上调好的 tau,移到医疗问答可能要重新校准;tau 的 domain adaptation 是工程落地的大坑。
  4. KAC 高→多步推理的收益不稳定:多步推理(多 CoT / 投票)本身有成本,且不一定每次都能解决冲突——KAC 高的根因可能是"模型真的有多个正确答案",而非"模型不确定哪个对"。
  5. 2 页 paper 细节不足:probe 架构(几层?什么激活?哪层 hidden state?)未披露,工程复现有较高不确定性。

最低成本验证路径

  1. 找 500 条自有 QA 数据,用 GPT-4o 打 KI/KAC 标签(prompt:模拟论文的 KI/KAC 定义)
  2. 用 RoBERTa-base 训一个三分类(KI高/KAC高/都低)
  3. 在 100 条 holdout 上测分类 accuracy,再做 A/B: probe-based routing vs 全量 RAG
  4. 如精确率 >70%,再评估集成到生产 pipeline 的工程成本