真实面经题目 · 原创解析

RAG 中检索文档正确但生成答案错误时,如何定位 Prompt、上下文组织、模型推理和后处理问题?

这题考的是 RAG badcase 的责任拆解:当正确证据已经被检索到,问题就不再主要是召回率,而要检查证据是否进入 prompt、是否被截断或排序淹没、指令是否约束模型使用证据、模型是否误读冲突信息、解码是否不稳定,以及后处理是否改坏答案。

出现于:百度 · 算法

60 秒回答模板

我会先把这个问题按日志回放拆开,而不是直接说调 prompt。第一步确认检索真的正确:命中的文档是否包含直接答案,版本是否最新,权限和过滤后是否仍然保留。第二步看从检索到生成之间有没有丢证据:rerank 后是否被低分截掉,父子回填是否拿错段落,上下文组装是否超 token 被截断,正确证据是否放在长上下文中间被稀释,证据编号和引用是否混乱。第三步检查 prompt 约束:是否要求模型只基于证据回答、证据不足要拒答、引用证据编号、优先使用高置信证据、处理冲突和不要使用外部常识覆盖证据。第四步检查模型生成本身:是否因为问题需要推理、多文档合成、否定条件、数字比较或时间条件而误读证据;是否温度过高、输出格式不稳定,或长上下文 lost-in-the-middle。第五步检查后处理和产品逻辑:JSON 解析、答案裁剪、模板填充、单位转换、链接替换、敏感词过滤和缓存都可能把正确答案改错。定位后再给针对性修复:优化上下文排序和证据包、加强引用约束、做答案-证据一致性校验、降低解码随机性、为复杂问题拆解推理、增加生成后验证和 badcase 回流。核心是证明错误发生在哪一跳,而不是把所有问题都归因于检索或模型幻觉。

考点 先看最终 prompt
难度 真实面经题
回答目标 让候选人能把检索正确但生成错误的 RAG badcase 系统化定位,覆盖最终 prompt 检查、上下文组织、证据引用约束、复杂推理、解码参数、后处理、生成后验证和 badcase 闭环。

深入解析

01

先确认检索正确的定义

所谓检索正确不只是向量相似度高,而是候选文档确实包含直接回答问题所需的事实、条件、时间和限制。要确认文档版本正确、权限过滤后仍在、rerank 后没有被丢弃、片段粒度足够完整。如果证据只是主题相关但不能回答,那仍然是检索或重排问题。

02

回放完整链路日志

定位要拿到 query、改写后的 query、召回候选、rerank 分数、最终进入 prompt 的证据、证据顺序、token 长度、模型输入、原始模型输出和后处理输出。只有看到每一跳,才能判断正确文档是在召回后丢了、组 prompt 时被截了,还是模型看到了却答错。

03

检查证据是否真的进入 prompt

很多错误发生在检索和生成之间:topK 截断把正确段落裁掉,父子索引回填了错误父节点,去重时删掉关键片段,token 超限从尾部截断,权限过滤后只剩不完整证据,或者 prompt 模板把证据放在模型不重视的位置。要直接检查最终 prompt,而不是只看召回列表。

04

上下文排序会影响证据使用

长上下文里正确证据如果夹在大量背景、重复片段和低相关内容中,模型可能忽略它或被其他片段误导。可以按子问题分组、把高置信证据提前、给证据编号、保留标题路径、删除重复背景,并把冲突证据显式标出来,让模型知道应该依据哪一段。

05

Prompt 需要约束证据使用方式

生成指令要明确:只能基于提供证据回答,无法从证据推出时说明不足,答案要引用证据编号,遇到冲突时说明冲突并优先使用更可信或更新的证据,不要用模型常识覆盖证据。没有这些约束,模型可能把正确文档当背景,继续按预训练知识或惯性模板回答。

06

模型可能误读复杂证据

即使证据在 prompt 中,模型也可能在否定句、例外条件、时间范围、数字比较、单位换算、多文档合成和表格读取上出错。此时要区分事实抽取错误、推理步骤错误和表达组织错误。可以让模型先抽取证据字段,再生成答案,或对复杂问题做分步推理和验证。

07

解码和输出格式也会引入错误

温度过高、top_p 过宽、最大输出太短、停止词设置不当或结构化输出约束不清,都可能让答案漂移、漏掉关键条件或被截断。对事实型 RAG,通常要降低随机性,限制模型自由发挥,并对 JSON 或表格输出做 schema 校验。

08

后处理可能把答案改坏

最终展示给用户的答案不一定等于模型原始输出。后处理里的摘要裁剪、模板拼接、单位转换、链接替换、敏感词过滤、Markdown 清洗、JSON 解析、字段映射和缓存命中都可能引入错误。定位时要比较模型 raw output 和最终 response。

09

生成后验证是兜底机制

可以增加答案-证据一致性检查,例如让 verifier 判断答案每个关键断言是否被证据支持,检查引用编号是否真实,检查数字和实体是否出现在证据中。发现不一致时触发重生成、补召回、要求引用修正或返回证据不足。

10

badcase 要归因到可修复类别

每个错误样本应标注为证据未进入 prompt、上下文过长被忽略、prompt 约束弱、复杂推理失败、冲突证据处理失败、解码不稳定、后处理错误或缓存错误。不同类别对应不同修复,混在一起只会导致盲目调参。

易错点

  • 一听到生成答案错误就直接归因于模型幻觉,不检查正确证据是否进入最终 prompt。
  • 只看召回 topK,不看 rerank、去重、token 截断和上下文组装后的实际输入。
  • 把主题相关文档当成正确检索,忽略它并不能直接支持答案。
  • prompt 没有要求基于证据、引用编号和证据不足拒答,导致模型自由发挥。
  • 长上下文中塞入大量重复背景,正确证据被淹没或放在模型不容易使用的位置。
  • 遇到冲突文档不显式处理版本、时间和可信度,让模型随机选择。
  • 模型 raw output 正确但后处理改错,没有检查解析、裁剪、模板和缓存。
  • 只调 topK 或温度,不给 badcase 做归因标签,导致修复不可复用。

面试官追问

如何判断是检索问题还是生成问题?

看正确证据是否在最终进入模型的上下文里,并且是否足够完整。如果最终 prompt 中没有直接证据,仍是检索、重排或上下文组装问题;如果证据存在且清晰,模型仍答错,才主要是生成、推理、指令或后处理问题。

正确证据在 prompt 里但模型不用怎么办?

先减少重复和低相关上下文,把高置信证据放在更醒目的位置,给证据编号,并在 prompt 中要求每个关键结论引用证据。必要时让模型先抽取证据要点,再基于要点生成答案。

如果多个文档互相冲突怎么办?

不要让模型隐式选择。应在上下文中保留来源、时间、版本和可信度,让 prompt 要求说明冲突,并按更新时间、权威来源或业务规则选择。无法判断时应输出不确定性,而不是编一个折中答案。

生成后验证怎么做?

可以把答案拆成关键断言,逐条检查是否被证据支持,数字和实体是否出现在证据中,引用编号是否对应相关片段。验证失败时触发重生成、补充证据或返回证据不足。

温度和解码参数会影响 RAG 正确性吗?

会。事实型问答通常需要较低随机性和明确停止条件,避免模型在证据外扩写。温度过高、输出过短或停止词不当都可能导致答案漂移、漏条件或被截断。

为什么要检查后处理?

因为用户看到的是最终 response,不一定是模型 raw output。JSON 解析、字段映射、摘要裁剪、单位转换、缓存命中和敏感词过滤都可能把正确模型输出变成错误展示。