如果正确文档已经进了 topK,第一排查点通常不该再回到“召回是不是不够多”,而应该去看最终喂给模型的上下文到底长什么样。
我会按这个顺序排查:
- 正确片段是否在最终 prompt 中被截断、稀释或排序靠后。
- 模型有没有被明确要求基于检索结果回答,并在证据不足时承认不知道。
- 重排是否把更可信、更贴题的片段放到了前面。
- 上下文里是否混入了冲突、过时或无关内容。
很多幻觉其实不是检索失败,而是“拼装失败”或“约束失败”。系统看到正确证据,不等于它最终真的把那段证据当成主依据。
所以这类问题最该先查的是 context assembly,而不是盲目继续调 topK。