真实面经题目 · 原创解析
RAG 中检索文档正确但生成答案错误时,如何定位 Prompt、上下文组织、模型推理和后处理问题?
这题考的是 RAG badcase 的责任拆解:当正确证据已经被检索到,问题就不再主要是召回率,而要检查证据是否进入 prompt、是否被截断或排序淹没、指令是否约束模型使用证据、模型是否误读冲突信息、解码是否不稳定,以及后处理是否改坏答案。
真实面经题目 · 原创解析
这题考的是 RAG badcase 的责任拆解:当正确证据已经被检索到,问题就不再主要是召回率,而要检查证据是否进入 prompt、是否被截断或排序淹没、指令是否约束模型使用证据、模型是否误读冲突信息、解码是否不稳定,以及后处理是否改坏答案。
我会先把这个问题按日志回放拆开,而不是直接说调 prompt。第一步确认检索真的正确:命中的文档是否包含直接答案,版本是否最新,权限和过滤后是否仍然保留。第二步看从检索到生成之间有没有丢证据:rerank 后是否被低分截掉,父子回填是否拿错段落,上下文组装是否超 token 被截断,正确证据是否放在长上下文中间被稀释,证据编号和引用是否混乱。第三步检查 prompt 约束:是否要求模型只基于证据回答、证据不足要拒答、引用证据编号、优先使用高置信证据、处理冲突和不要使用外部常识覆盖证据。第四步检查模型生成本身:是否因为问题需要推理、多文档合成、否定条件、数字比较或时间条件而误读证据;是否温度过高、输出格式不稳定,或长上下文 lost-in-the-middle。第五步检查后处理和产品逻辑:JSON 解析、答案裁剪、模板填充、单位转换、链接替换、敏感词过滤和缓存都可能把正确答案改错。定位后再给针对性修复:优化上下文排序和证据包、加强引用约束、做答案-证据一致性校验、降低解码随机性、为复杂问题拆解推理、增加生成后验证和 badcase 回流。核心是证明错误发生在哪一跳,而不是把所有问题都归因于检索或模型幻觉。
所谓检索正确不只是向量相似度高,而是候选文档确实包含直接回答问题所需的事实、条件、时间和限制。要确认文档版本正确、权限过滤后仍在、rerank 后没有被丢弃、片段粒度足够完整。如果证据只是主题相关但不能回答,那仍然是检索或重排问题。
定位要拿到 query、改写后的 query、召回候选、rerank 分数、最终进入 prompt 的证据、证据顺序、token 长度、模型输入、原始模型输出和后处理输出。只有看到每一跳,才能判断正确文档是在召回后丢了、组 prompt 时被截了,还是模型看到了却答错。
很多错误发生在检索和生成之间:topK 截断把正确段落裁掉,父子索引回填了错误父节点,去重时删掉关键片段,token 超限从尾部截断,权限过滤后只剩不完整证据,或者 prompt 模板把证据放在模型不重视的位置。要直接检查最终 prompt,而不是只看召回列表。
长上下文里正确证据如果夹在大量背景、重复片段和低相关内容中,模型可能忽略它或被其他片段误导。可以按子问题分组、把高置信证据提前、给证据编号、保留标题路径、删除重复背景,并把冲突证据显式标出来,让模型知道应该依据哪一段。
生成指令要明确:只能基于提供证据回答,无法从证据推出时说明不足,答案要引用证据编号,遇到冲突时说明冲突并优先使用更可信或更新的证据,不要用模型常识覆盖证据。没有这些约束,模型可能把正确文档当背景,继续按预训练知识或惯性模板回答。
即使证据在 prompt 中,模型也可能在否定句、例外条件、时间范围、数字比较、单位换算、多文档合成和表格读取上出错。此时要区分事实抽取错误、推理步骤错误和表达组织错误。可以让模型先抽取证据字段,再生成答案,或对复杂问题做分步推理和验证。
温度过高、top_p 过宽、最大输出太短、停止词设置不当或结构化输出约束不清,都可能让答案漂移、漏掉关键条件或被截断。对事实型 RAG,通常要降低随机性,限制模型自由发挥,并对 JSON 或表格输出做 schema 校验。
最终展示给用户的答案不一定等于模型原始输出。后处理里的摘要裁剪、模板拼接、单位转换、链接替换、敏感词过滤、Markdown 清洗、JSON 解析、字段映射和缓存命中都可能引入错误。定位时要比较模型 raw output 和最终 response。
可以增加答案-证据一致性检查,例如让 verifier 判断答案每个关键断言是否被证据支持,检查引用编号是否真实,检查数字和实体是否出现在证据中。发现不一致时触发重生成、补召回、要求引用修正或返回证据不足。
每个错误样本应标注为证据未进入 prompt、上下文过长被忽略、prompt 约束弱、复杂推理失败、冲突证据处理失败、解码不稳定、后处理错误或缓存错误。不同类别对应不同修复,混在一起只会导致盲目调参。
看正确证据是否在最终进入模型的上下文里,并且是否足够完整。如果最终 prompt 中没有直接证据,仍是检索、重排或上下文组装问题;如果证据存在且清晰,模型仍答错,才主要是生成、推理、指令或后处理问题。
先减少重复和低相关上下文,把高置信证据放在更醒目的位置,给证据编号,并在 prompt 中要求每个关键结论引用证据。必要时让模型先抽取证据要点,再基于要点生成答案。
不要让模型隐式选择。应在上下文中保留来源、时间、版本和可信度,让 prompt 要求说明冲突,并按更新时间、权威来源或业务规则选择。无法判断时应输出不确定性,而不是编一个折中答案。
可以把答案拆成关键断言,逐条检查是否被证据支持,数字和实体是否出现在证据中,引用编号是否对应相关片段。验证失败时触发重生成、补充证据或返回证据不足。
会。事实型问答通常需要较低随机性和明确停止条件,避免模型在证据外扩写。温度过高、输出过短或停止词不当都可能导致答案漂移、漏条件或被截断。
因为用户看到的是最终 response,不一定是模型 raw output。JSON 解析、字段映射、摘要裁剪、单位转换、缓存命中和敏感词过滤都可能把正确模型输出变成错误展示。