在 RAG 系统中,如何界定“知识边界”,即如何让模型知道何时该回答,何时该说“不知道”?
在 RAG(检索增强生成)系统中,界定“知识边界”的核心挑战在于抑制大模型(LLM)的“由于训练数据带来的内部知识(Parametric Memory)”,并强制其仅依赖检索到的外部上下文(Non-Parametric Memory)进行回答。
如果检索到的内容无法回答问题,系统必须诚实地输出“不知道”,而不是利用模型自带的知识去“编造”或“猜测”。
以下是界定这一边界的五个层面的技术方案,从检索前到生成后层层设防:
1. 检索层:设置“物理”阈值 (The Gatekeeper)
这是第一道防线。如果检索回来的内容本身就与问题不相关,那么根本就不应该让 LLM 尝试回答。
- 相似度阈值截断 (Similarity Thresholding):
- 在向量检索(Vector Search)阶段,设置一个分数的下限(如 Cosine Similarity < 0.7)。
- 逻辑: 如果检索到的 Top-K 文档的相似度分数都低于该阈值,系统直接判定“知识库中无相关信息”,直接返回预设的“不知道”话术,完全跳过 LLM 生成环节。
- 重排序模型 (Rerank) 过滤:
- 向量检索有时只能捕捉语义相关性,而非逻辑相关性。引入 Rerank 模型(如 BGE-Reranker, Cohere Rerank)对召回结果进行精排。
- 如果 Rerank 后的最高分仍然很低,则判定为无法回答。
2. 提示词工程层:建立“强约束”指令 (The Rulebook)
通过 Prompt Engineering 明确告诉模型边界在哪里。这不仅仅是加一句“不知道就说不知道”,而是需要结构化的约束。
- 负向约束 (Negative Constraints):
- 明确指令:“仅依据提供的上下文回答,严禁使用你的内部知识。”
- 兜底指令:“如果上下文中没有包含答案,请直接回复‘根据现有资料无法回答’,不要尝试编造。”
- 思维链 (Chain of Thought, CoT):
- 要求模型先提取相关片段,再生成答案。
- Prompt 示例: “请先分析上下文中是否有支持问题的句子。如果有,请引用并回答;如果没有,请输出‘无信息’。”
- 少样本学习 (Few-Shot Prompting):
- 在 Prompt 中提供几个示例(Exmaples),其中必须包含一个“上下文缺失 -> 回答不知道”的例子。这能显著提高模型遵循指令的能力。
3. 模型推理层:自我反思与置信度 (The Auditor)
让模型自己判断是否越界。
- 自我反思 (Self-Reflection / Self-Check):
- 采用两步法。
- 第一步:生成答案。
- 第二步:再调用一次 LLM(或同一个 Prompt 的后续步骤),问它:“上一步生成的答案是否完全由提供的上下文支持?如果是,输出‘是’;否则输出‘否’。”
- 如果第二步输出“否”,则将最终结果替换为“不知道”。
- 引用归因 (Citation-based Generation):
- 强制要求模型在回答的每一句话后面标注
[Source ID]。 - 在后处理阶段检查:如果模型生成了答案但无法提供有效的 Source ID,或者 Source ID 指向的文本与答案无关,则视为越界(幻觉),予以拦截。
- 强制要求模型在回答的每一句话后面标注
4. 判别模型层:自然语言推理 (The Judge)
引入一个更小、更专用的模型来充当“裁判”,不依赖生成式 LLM 的自我判断。
- NLI (Natural Language Inference) 模型:
- 使用 BERT/RoBERTa 等模型训练一个 NLI 任务分类器。
- 输入:(前提:检索到的 Context,假设:LLM 生成的 Answer)。
- 判断关系:蕴含 (Entailment)、矛盾 (Contradiction) 还是 中立 (Neutral)。
- 边界界定: 只有当关系为“蕴含”时,才输出答案;如果是“中立”或“矛盾”,说明模型在利用外部知识或胡编乱造,系统应输出“不知道”。
5. 训练层:对齐微调 (The Specialist)
如果以上方法仍无法满足高精度要求,需要对模型本身进行调整。
- 拒答微调 (Refusal-Aware Fine-tuning):
- 构建专门的 SFT (Supervised Fine-Tuning) 数据集。
- 数据集中包含大量
(Question, Irrelevant Context, "I don't know")的样本。 - 通过训练,改变模型的权重,使其学会“当 Context 不相关时,抑制回答的冲动”。
总结:最佳实践组合
在实际生产环境中,通常不会只用一种方法,而是采用漏斗式组合:
- 过滤: 检索分数 < 0.6,直接返回“不知道”。
- 约束: Prompt 中加入“仅依据上下文”和“引用来源”的要求。
- 校验: 生成后,检查是否包含有效引用,或者用轻量级 NLI 模型快速校验。
一句话总结:
界定知识边界的本质,是将 RAG 系统从 "Open-Book Exam"(开卷且允许查阅自带知识) 转变为 "Reading Comprehension"(仅限阅读理解,文章里没说的就不能答)。