真实面经题目 · 原创解析
RAG 生成阶段如何把 top3/top10 文本块和文档信息组织进 Prompt,控制模型基于证据输出?
这题考 RAG 生成阶段的证据组织和约束生成能力,重点是把 top3/top10 chunk、文档元数据、冲突处理和引用规则放进 Prompt,而不是简单拼接检索结果。回答要聚焦 evidence packing 和 grounded generation,不要扩成泛泛的召回优化。
真实面经题目 · 原创解析
这题考 RAG 生成阶段的证据组织和约束生成能力,重点是把 top3/top10 chunk、文档元数据、冲突处理和引用规则放进 Prompt,而不是简单拼接检索结果。回答要聚焦 evidence packing 和 grounded generation,不要扩成泛泛的召回优化。
RAG 生成阶段我不会把 top3 或 top10 文本块直接原样塞给模型,而会先做证据选择、去重、排序和结构化包装。Prompt 通常分四块:第一是系统约束,明确只能基于给定证据回答,证据不足要说明无法确认,不能编造来源;第二是用户问题和任务要求;第三是证据区,每个 chunk 要有 evidence_id、文档标题、来源、时间、章节、相关性和正文片段,边界要清楚,避免模型把不同文档混在一起;第四是输出格式,要求结论、依据、引用和不确定点分开。top3 更适合高精度问答,直接作为主要证据;top10 更适合覆盖复杂问题,但要按主题聚类、去重、压缩,把强相关证据放前面,弱相关证据只作为补充。控制模型基于证据输出,不能只靠一句 prompt,还要配合检索阈值、rerank、引用校验、无证据拒答、冲突证据提示和生成后 faithfulness 评估。最终目标是让每个关键结论都能追溯到具体 chunk,而不是让模型看过资料后自由发挥。
题面说结合 top3 或 top10 文本块及相关文档生成最终结果,关键是结合不是堆上下文。topK 越大,覆盖更广,但噪声、重复、冲突和 token 成本也会上升。生成前应先判断用户问题类型、证据相关性、是否需要多文档综合,再决定使用 top3、top5、top10 或分批摘要。
每个文本块应包装成结构化 evidence block,而不是裸文本。字段可以包括 evidence_id、doc_title、source、section、published_or_updated_at、chunk_rank、relevance_score、权限或版本信息、chunk_text。这样模型知道每段证据来自哪里,后处理也能检查答案引用是否存在。
top3 通常强调高精度,适合答案集中在少量文档里的事实问答,可以把三段作为 primary evidence。top10 强调覆盖,适合复杂问题、跨文档总结或方案分析,但需要先去重、按主题聚类、压缩弱相关片段,并把最强证据放在前面。否则模型容易被低相关片段带偏,或者把多个文档的不同条件混成一个结论。
系统约束应写清:只能使用证据区内容回答;每个关键结论要附 evidence_id;证据不足时回答现有证据不足以判断;不要使用外部常识补事实缺口;不要把文档标题当正文事实;不要输出证据没有支持的推断。输出格式可以要求结论、依据、引用、不确定性、下一步需要的信息分栏。
多文档 RAG 经常遇到版本冲突、时间先后、权限不同和文本块里的 prompt injection。Prompt 中要告诉模型优先使用更新时间更近、来源更权威、与问题约束更匹配的证据;遇到冲突要显式说明,而不是强行合并。系统还应把文档内容当作不可信资料,禁止文档片段覆盖系统指令或要求模型泄露规则。
只写 Prompt 不能保证完全 grounded。还要记录 query、topK、rerank 分数、最终引用和答案,做 faithfulness、citation precision、answer relevance、拒答合理性和人工抽检。必要时可做生成后校验:逐条判断答案 claim 是否被引用 chunk 支持,不支持的结论删除、降置信或触发二次检索。
如果问题答案集中、检索置信度高,用 top3 可以降低噪声和成本;如果问题需要综合多个方面或召回不确定,用 top10 覆盖更好,但要配合 rerank、去重和压缩。
这是 citation faithfulness 问题。可以做 claim-level 校验,逐条判断结论是否被引用 chunk 支持;不支持的内容要删除、改成不确定,或触发补充检索。
不要让模型自行选一个看起来顺的答案。应按来源权威性、更新时间、适用范围排序,并在答案里说明冲突点和当前更可信依据;无法判断时明确证据不足。
把文档内容明确标为不可信证据,只允许用于事实依据,不允许覆盖系统规则、输出格式和安全边界;同时对高风险片段做清洗和注入检测。