即使知识库覆盖全面,检索增强生成系统也难免遇到“超出知识范围”的问题。在这种情况下,模型如果强行回答,很容易产生幻觉——用看似通顺的语句编造事实,这是企业应用中必须严格避免的。因此,设计一套清晰、可预期的拒答策略,是 RAG 系统落地时不可跳过的步骤。
1. 为什么需要明确的拒答策略
- 防止幻觉:当检索到的片段与问题不相关,或相关性得分低于阈值时,模型缺乏可靠的事实依据,此时生成任何实质性回答都存在编造风险。
- 维护用户体验:与其给出错误答案让用户产生误导,不如诚实告知“目前无法回答”,并提供后续建议,反而能建立长期信任。
- 便于问题追踪与改进:记录被拒答的问题,可以之后分析是知识库缺失,还是检索效果不佳,从而针对性优化。
2. 常见的拒答触发条件
在实际系统中,通常结合多个信号来判断是否应当拒答:
- 检索相关度不足
当 top‑k 召回片段的向量相似度得分全部低于预设阈值(例如余弦相似度 < 0.65)时,说明知识库中没有强匹配的内容。这个阈值需要根据实际场景反复实验确定。
- 答案置信度过低
在生成回答后,可以使用一个小的评分模型或基于规则的校验,判断生成的回答是否包含“根据资料无法确定”“信息暂缺”等意图。如果系统判定回答本身就是在表达不确定性,也可以直接触发拒答。
- 敏感或越权问题
对于明显超出系统使用范围的问题(如询问个人隐私、政治敏感内容、与业务无关的技术支持),应当直接拒答,而不依赖检索结果。
- 空检索结果
最简单的情况:向量数据库返回空列表,无任何候选片段。
3. 未知问题处理模板的设计原则
拒答本身也是对话体验的一部分。生硬的“我不知道”可能让用户感到挫败。一个好的拒答回复应该做到:
- 诚实告知现状:明确表示当前无法提供准确答案。
- 说明原因(可选):简单解释是基于知识库范围所限,而非系统故障。
- 给出可行的下一步:引导用户补充信息、联系人工渠道,或自行查阅相关资源。
- 保持语气一致:与品牌调性和整体助手风格统一。
以下是几个在实际系统中经过验证的拒答模板,可根据场景选用或混合。
模板 A:简洁版(适合 FAQ 类高频场景)
抱歉,我目前的知识库中暂未收录与该问题相关的信息。建议您联系相关业务负责人,或查阅最新版的内部政策文档获取准确答复。
模板 B:引导版(适合需要用户补充信息的场景)
根据现有资料,我暂时无法确定这个问题的答案。如果您能提供更多的背景信息(如产品型号、涉及的时间范围等),我可以尝试进一步查找相关材料。
模板 C:人工兜底版(适合有在线客服的场景)
这个问题超出了我当前能回答的范围。为保障您获得准确的答复,建议您转接人工客服,或拨打技术支持热线。我会将您的提问记录保存,供知识库后续优化参考。
模板 D:安全敏感版(适合涉及隐私或合规的场景)
很抱歉,出于信息安全考虑,我无法处理此类请求。如果您有与业务流程、规范文档相关的问题,我很乐意协助。
4. 在提示词中实现拒答逻辑
最直接的方式是在构造 LLM 提示词时,加入明确的拒答指令。以下是一个实用性较强的指令片段,可以集成到原有的生成提示中:
你是一个基于内部知识库回答问题的助手。请严格遵循以下规则:
- 使用提供的参考资料回答问题。
- 如果参考资料内容不足以支持任何有意义的回答,或者参考资料与问题完全无关,请直接回复:“根据现有资料,我无法提供该问题的准确答案。”
- 不要编造任何信息。
- 如果问题涉及个人隐私、密码、账号等敏感内容,请回复:“出于安全考虑,我无法处理此类请求。”
5. 构建拒答反馈闭环
单纯的拒答不是终点,而是知识库优化的起点。建议在系统中设计一个轻量的反馈收集机制:
- 对于每一次拒答,记录下原始问题、检索到的 top‑3 片段及其相似度得分。
- 定期(如每周)人工巡检被拒答的问题列表,从中识别:
- 知识库缺失类型:是否需要新增文档或补充 FAQ?
- 检索失效类型:是否需要调整嵌入模型或切块策略?
- 不当拒答类型:是否阈值设置过严,导致本可回答的问题也被拦截?
- 根据分析结果,更新知识库或调整系统参数,形成持续改进的循环。
通过这样一套清晰的拒答策略和模板设计,RAG 系统可以做到既“诚信”又“安全”,让用户在遇到边界问题时也能获得透明、有用的引导,而不是被错误的答案带偏。