在 RAG 系统中 Prompt 应该如何组织检索上下文?

在 RAG 系统中 Prompt 应该如何组织检索上下文?
这道题考的是 RAG 检索上下文的组织策略,本质上是在问:怎么把检索到的内容更好地拼接、排序、优化,然后塞进 Prompt 让 LLM 生成正确答案。
核心就一句话:检索上下文不是简单拼接,而是一套从查询优化到后处理的技术组合。
1. 先理解本质——检索上下文是个"拼图游戏"
RAG 的工作流程是这样的:
用户提问 → Query 向量化 → 在向量数据库里做相似度匹配 → 把命中的文档块拼接起来 → 塞进 Prompt → LLM 生成回答
你可以把它想象成 拼图:
用户的问题是"拼图主题",向量检索是"按颜色形状找碎片",上下文组织就是"把碎片摆到正确位置、调整方向",最后 LLM 是"看图说话的人"。

为什么上下文组织很重要?
因为检索回来的内容可能:
- 太长或太短
- 和问题不太相关
- 包含噪音信息
直接塞给 LLM,模型容易"跑偏"或"答非所问"。
2. 上下文组织的三板斧——混合搜索 + 递归检索 + 子问题拆分
这是最常用的三种策略,解决不同场景的问题。
混合搜索:关键词 + 语义的"双保险"
关键词搜索(BM25)找精确匹配,语义搜索(向量检索)找意思相近的。
用户问"感冒了怎么办",关键词搜"感冒",语义搜"治疗感冒的方法",两者结果取并集,命中率更高。
适用场景:查询多样化、包含专有名词或口语化表达。
递归检索:从碎片到大段,"先精准再扩展"
先用小片段检索(比如单句),找到相关片段后,再扩大范围检索周围的段落。
就像查字典:先定位到具体词条,再看上下文解释。
适用场景:需要平衡检索精度和信息丰富度。
子问题查询:复杂问题"分而治之"
把一个大问题拆成多个小问题,每个小问题用不同数据源回答,最后汇总。
用户问"对比 Python 和 Java 的性能、语法、生态",拆成三个子问题分别检索,最后整合。
适用场景:多维度、需要综合多个数据源的问题。

3. 查询优化——让检索更准的"作弊技巧"
光有检索策略还不够,还需要 查询优化 来提升检索质量。
HyDE 方法:先"猜答案",再找证据
让 LLM 根据问题生成一个"假设答案",然后用这个假设答案去做检索。
为什么这样做?因为假设答案包含了更多语义信息,能找到和真实答案更相似的文档。
例子:用户问"如何预防心脏病",LLM 生成假设答案"预防心脏病需要控制饮食、定期运动、定期体检",用这段话去找文档,比直接搜"预防心脏病"效果更好。
查询重写:换种说法,命中率更高
把用户的自然语言 query 改写成更利于检索的形式,比如:
- 同义词替换
- 补充隐含信息
- 分解复合问句
例子:"那款手机拍照好" → "拍照效果好的手机型号 拍照评测"。
重排序:把最好的放在前面
向量检索召回 N 个结果,通过重排序模型(比如 Cross-Encoder)重新评估相关性,把最相关的文档排到前面,只取 Top-K 塞进 Prompt。
核心作用:过滤噪音,提高上下文质量。

4. 进阶技术——CRAG 自我修正 + RAPTOR 层次化
CRAG:给检索器装上"质检员"
CRAG(Corrective Retrieval Augmented Generation)的核心思想是:让模型判断检索质量,差的时候主动纠正。
流程是这样的:
- 检索得到上下文
- 让 LLM 判断:这些内容和问题相关吗?
- 评估结果分三档:
- 正确:直接用,继续生成
- 模糊:混合网络搜索补充
- 错误:丢弃检索结果,切换到纯网络搜索
说白了,就是加了一个"纠错层",不让低质量检索结果误导 LLM。
RAPTOR:构建知识的"层次化索引"
RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)的思路是:把文档组织成一棵树,从具体到抽象。
构建过程:
- 把文档切成底层文本块(叶子节点)
- 相邻文本块聚类,生成上一层摘要
- 重复直到形成树根(最高层摘要)
检索时可以从不同层次取内容:问细节从叶子节点找,问概览从根节点找。
例子:用户问"量子计算概述",从顶层摘要检索;问"量子纠缠原理",从底层细节检索。

面试怎么答
基础版(能过):
RAG 的检索上下文组织主要分为三个环节:检索、拼接、后处理。
检索阶段常用混合搜索,结合关键词和语义搜索提高召回率;检索回来的文档需要做分块处理,分块大小要和嵌入模型匹配(比如 sentence-transformers 适合单句级别)。
拼接时常用递归检索或子问题查询来提升相关性;最后通过重排序把最相关的文档排到前面,过滤噪音。
加分版(眼前一亮):
检索上下文的组织是一套完整的技术栈。
检索策略上,混合搜索兼顾精确和语义匹配;递归检索平衡精度和丰富度;子问题查询适合复杂多维度问题。
查询优化上,HyDE 用假设答案作为检索锚点,比直接搜原问题效果更好;查询重写能处理口语化表达。
后处理上,重排序过滤低相关文档;CRAG 能自动判断检索质量,差的时候触发网络搜索;RAPTOR 构建层次化索引,支持不同抽象级别的检索。
实际应用中要根据场景选择组合策略,没有银弹。
一句话总结
RAG 的检索上下文组织,本质是通过检索策略、查询优化、后处理的三层配合,让最相关的内容以最优顺序进入 Prompt。
