[控场AI]
· 5 分钟阅读· 2,586 字

RAG应用的拒答能力:让AI学会说'我不知道'

RAG应用的拒答能力:让AI学会说'我不知道'

RAG应用需学会在文档不支持时明确拒答,这是建立用户信任的基础能力。

本文记录了一位开发者在90天AI挑战第一天,为RAG应用构建"拒答能力"的实践。核心问题是:当文档不包含答案时,如何让AI明确说"我不知道",而非自信地编造。文章指出,RAG检索器总能返回"看起来相关"的段落,但语义相似不等于答案有支撑,这是幻觉的常见路径。解决方案包括约束式提示、来源引用和证据不足时的兜底回复,并将拒答定义为合法输出。作者设计了可回答、相关但无支撑、无关三类测试问题,从答案正确性、引用质量、拒答准确性和过度拒答四个维度评估。文章还警示两个陷阱:有效引用ID不等于答案正确,检索分数阈值不能假设通用有效。最终强调,判断"自己不知道什么"是文档型AI的基础能力。

RAG应用的拒答能力:让AI学会说"我不知道"

RAG应用开发日志

让AI应用回答问题很令人兴奋,但让它识别出文档中不包含答案——这才是更有趣的挑战。

一位开发者在90天AI挑战的第一天,选择了一个看似简单却极为关键的问题作为起点:如何让RAG应用避免回答其来源文档无法支撑的问题?

这个问题的本质,是给AI系统装上"知之为知之,不知为不知"的判断力。

问题场景:当AI自信地编造答案

设想你上传了一份公司休假政策文档,然后提问:"员工每年有多少天年假?"

如果政策文档包含这个信息,应用应当给出答案并展示支撑段落。但如果换一个问题:"公司是否报销国际差旅费用?"——而文档对此只字未提,应用就应该明确说明无法在提供的材料中找到答案。

这听起来理所当然,但实际中却容易被忽视。一个自信的猜测很可能被用户误认为公司政策。在基于文档的AI应用中,无支撑回答的风险远高于拒绝回答。用户依赖这些系统获取准确信息,而非看似合理的虚构内容。

为什么RAG本身无法解决这个问题

检索增强生成(RAG)的工作方式是:检索相关内容,传递给语言模型辅助回答。流程看似完整,但存在一个根本性缺陷。

最匹配的段落,并不一定是能回答问题的段落。

搜索引擎在信息缺失时仍然能返回结果——这是检索机制的天性。检索是有用的起点,但它不保证答案有据可依。语义相似度高的段落可能只是在主题上相关,实际上并未包含问题所需的答案。

这正是RAG应用产生幻觉的常见路径:检索器找到"看起来相关"的内容,语言模型基于这些内容"合理推断"出一个答案,而这个答案在原始文档中并无支撑。

什么是语义相似度检索的固有局限?

大多数RAG系统使用向量嵌入(embedding)进行检索,即将文本转换为高维向量,通过计算余弦相似度等度量找到与问题"最接近"的段落。这种方法的根本假设是:语义上接近的文本包含问题的答案。但事实上,语义相似度衡量的是主题相关性,而非答案蕴含性(entailment)。一个段落可能讨论的是同一主题、使用相似术语,却缺少回答问题所需的具体事实。例如,问题问"年假天数",检索到的段落可能在讨论"年假申请流程"——主题高度相关,但不含答案。这种"相关但不充分"的检索结果,正是诱发语言模型进行无根据推断的直接原因。

Day 1的实现方案:小步验证

这位开发者的第一天方案刻意保持精简,核心流程包含五个步骤:

  1. 加载简短文档并切分为段落
  2. 针对问题检索相关段落
  3. 要求模型仅使用这些段落回答
  4. 要求答案附带来源引用
  5. 当段落证据不足时返回明确的兜底回复

兜底回复可以很简单:"我无法在提供的文档中找到该信息。"

关键在于——让这种回复成为一种合法且被期待的输出结果,而非系统失败的表现。许多RAG应用的误区在于,将"拒答"视为异常情况,导致模型在证据不足时仍倾向于给出一个答案。

关于"仅使用这些段落回答"的提示工程原理

要求模型"仅使用提供的段落回答"属于一种约束式提示(grounded prompting)。其核心机制是:在系统提示或用户提示中明确限定模型的知识边界,将模型的角色从"通用助手"转变为"文档阅读器"。配合来源引用要求,这一策略实际上构建了一个可验证的闭环——模型不仅要给出答案,还要指出答案来自哪一段文字,使得用户可以独立核实。值得注意的是,指令遵循能力因模型而异:部分模型在段落不足时仍会"补充常识",因此需要在提示中显式定义证据不足时的兜底回复格式,将其从"失败"重新定义为"正确行为"。

三类测试问题:暴露系统的真实能力

为了验证方案效果,这位开发者设计了三类测试问题:

  • 可回答类:文档直接包含答案
  • 相关但无支撑类:问题与文档主题相关,但答案缺失
  • 无关类:问题超出文档范围

其中第二类最具挑战性。一段文字可以在表面上看起来相关,却仍然无法支撑一个具体答案。这类情况最能暴露RAG系统的"过度自信"倾向。

每个回答需要从四个维度检查:

  • 答案是否正确
  • 引用的段落是否真正支撑该答案
  • 证据缺失时应用是否拒绝回答
  • 应用是否不必要地拒绝了本可回答的问题

最后一点同样重要——过度谨慎的RAG应用会削弱实用性。在某些场景下,用户宁愿得到一个带保留的回答,也不愿面对一刀切的拒答。

两个需要警惕的陷阱

这位开发者特别指出了两个容易被忽视的问题。

有效引用ID不等于答案正确。 引用ID只能证明被引段落存在,不能证明该段落支撑了答案中的主张。验证引用质量需要检查引用段落的内容是否真正支撑对应的声明。

检索分数阈值不能假设通用有效。 选择一个分数截断值并假设它在所有场景下都适用,是一种危险的简化。任何阈值都需要用实际文档和检索方法进行测试验证。不同文档的结构、术语分布、检索器的特性都会影响阈值的有效性。

检索分数阈值的本质与风险

向量检索通常会返回一个相似度分数(如余弦相似度),开发者常试图设定一个阈值来过滤低质量结果。但阈值的绝对值高度依赖具体条件:嵌入模型的类型(如不同厂商的嵌入模型分数分布差异显著)、文档的长度与切分粒度、查询的表述方式等。一个在短问答数据集上表现良好的阈值,迁移到长技术文档上可能完全失效。更稳妥的做法是结合相对排序(如只保留前K个结果中分数显著高于其余的段落)与验证式判断(让模型判断段落是否真正支撑答案),而非依赖单一静态阈值。

为什么这个基础能力值得优先构建

第一天只做一件事:建立小型基线,观察它在哪些地方失败,并在增加复杂度之前记录结果。

选择从这里开始,是因为"知道何时停止回答"是文档型AI应用的基础能力。如果系统无法判断自己不知道什么,那么它给出的所有答案都值得怀疑。

如果你也在构建RAG应用,不妨试试提一个"听起来相关但答案故意缺失"的问题——你的应用注意到了吗?

这个测试的价值在于:它直接检验了系统的诚实度。而诚实度,恰恰是用户信任的基石。

#RAG应用#检索增强生成#AI拒答#RAG幻觉#AI应用开发#知识库问答#文档AI
分享:

相关推荐