RAG 知识库查不到答案时怎么办:让 AI 学会说“不知道”的设计方法
RAG 系统最危险的时刻,是检索结果和问题不相关、模型却照样给出一个流畅的答案。解决思路是三层兜底:检索层判断“有没有相关材料”,生成层要求“只依据材料作答”,产品层提供“不知道时的下一步”。 让系统坦白说“资料里没有”,比编一个看似正确的答案有价值得多。
为什么会编答案
检索总会返回“最相似”的几段内容,哪怕它们其实不相关。模型拿到这些片段后,倾向于结合自己的常识补全答案。用户看到的是一个自信的回答,却无法分辨哪些来自知识库、哪些是模型的猜测。
第一层:检索层判断
- 设置相关度阈值:相似度低于阈值的片段不送进模型。阈值没有通用数值,需要用你自己的问题集测试确定。
- 结合重排序:先粗召回再重排,用重排得分判断相关性通常更稳定。
- 全部低于阈值时直接走兜底,不调用生成。
第二层:生成层约束
你是【公司】的内部知识库助手。只能依据下面的“参考资料”回答。
规则:
1. 如果参考资料中没有能回答问题的信息,直接回复:“知识库中暂未找到相关内容。”然后给出建议的下一步;
2. 如果资料只能回答一部分,先回答能回答的部分,再明确说明哪部分没有找到;
3. 每个结论后用 [来源编号] 标注出处;
4. 不要使用资料以外的常识补充具体数字、政策或流程。
参考资料:
【检索结果,带编号】
问题:【用户问题】
第三层:产品层兜底
- 给出下一步:联系哪个部门、提交工单入口、相关文档目录;
- 改写建议:提示用户换个说法,或展示“你是不是想问”;
- 记录未命中问题:把无答案的问题存入日志,定期补充文档。
如何测试
- 准备三类问题:资料中有答案的、部分有的、完全没有的;
- 逐条检查:没有答案的问题是否正确拒答,有答案的是否被误拒;
- 调整阈值和提示词,直到两类错误都可接受。
常见坑
- 阈值太高会导致大量误拒,用户觉得“什么都不知道”;
- 只在提示词里要求“不知道就说不知道”,没有检索层判断,效果往往不稳定;
- 无答案日志没人看,知识库永远补不上缺口。