RAG = 检索(Retrieve)+ 增强(Augment)+ 生成(Generate)
即:先根据用户问题去外部知识库找回相关文档,再把文档和问题拼在一起交给大模型回答。
这一步是在用户提问之前做好的准备工作,只需做一次(知识更新时重新做)。
| 子步骤 | 具体操作 |
|---|---|
| 文档清洗 | 去除页眉页脚、特殊字符、乱码,统一编码格式 |
| 文档切块(Chunking) | 将长文档切分为合适大小的文本块(通常 200~500 字),避免过长或过短影响检索精度 |
| 向量化(Embedding) | 用嵌入模型(如 text-embedding-ada-002、BGE)将每个文本块转成固定维度的向量 |
| 构建索引 | 将向量存入向量数据库(如 Milvus、Pinecone、Chroma、FAISS),并建立高效索引(如 HNSW、IVF) |
这个阶段的核心产出是 “向量索引库”,相当于一本书的目录。
用户提问后,先对问题本身做优化,提升检索质量。
| 子步骤 | 具体操作 |
|---|---|
| Query 改写 | 将口语化问题改写为更规范的检索语句(如“怎么退钱” → “退款流程”) |
| Query 扩展 | 生成同义词或相关问法,以覆盖更多召回结果(如“价格”扩展为“费用、收费、定价”) |
| 多路查询 | 同时生成多个不同措辞的查询向量,分别检索后再合并结果 |
这一步不是必须的,但属于加分优化项,面试时提到说明你有工程经验。
将处理好的 Query 向量化,与索引库中的向量做相似度匹配。
| 子步骤 | 具体操作 |
|---|---|
| 向量检索 | 计算 Query 向量与所有 Chunk 向量的余弦相似度或内积,召回 Top-$k$(如 $k=5$ 或 $10$)个最相似的文本块 |
| 关键词检索(混合检索) | 可结合 BM25 / TF-IDF 做关键词匹配,与向量检索结果融合(hybrid search),提升召回率 |
| 重排序(Rerank) | 用更精密的交叉编码器(Cross-Encoder)对召回的 Top-$k$ 重新打分排序,选出最相关的少数几个(如 Top-3) |
召回质量决定了最终回答的准确性,是 RAG 的命门。
将检索到的相关文本块与原始用户问题组合成一条完整的 Prompt。
| 子步骤 | 具体操作 |
|---|---|
| 构建 Prompt 模板 | 例如:“请根据以下参考内容回答问题:\n\n参考内容:{context}\n\n问题:{question}” |
| 上下文压缩 | 如果检索内容过长,可先用摘要模型压缩,避免超出上下文窗口 |
| 注入系统指令 | 添加约束条件,如“如果参考内容中没有答案,请直接说不知道,不要编造” |
这一步的 Prompt 设计直接影响模型是否会“胡说八道”。
将拼接好的 Prompt 送入大语言模型(LLM),生成最终回答。
| 子步骤 | 具体操作 |
|---|---|
| LLM 推理 | 模型基于参考内容 + 问题,生成自然语言答案 |
| 引用标注 | 可在回答中标注信息来源(如 [1]、[2]),对应到具体的文档块,增强可信度 |
| 答案校验 | 可选环节:检查生成的答案是否与检索内容一致,防止模型“跑偏” |
用户提问
↓
Query 理解(改写 / 扩展)
↓
向量检索(召回 Top-k 相关文档块)
↓
重排序(Rerank,选出最相关的少数几块)
↓
拼接 Prompt(参考内容 + 用户问题)
↓
LLM 生成回答
↓
返回用户(可带引用来源)
适合,而且是一道很实用的基础题。
能快速考察候选人对 RAG 整体架构的理解是否清晰;
适合初、中级岗位或作为高级岗位的热身题;
后续可以方便地追问细节,比如:分块策略、向量模型选择、重排序方法、如何评估检索质量等。
面试官常在这个问题基础上做延伸追问,以下是高频追问及标准应答:
答:没有固定标准,一般遵循三个原则:
答:不准的原因主要有三条:
答:
这两者通常是级联使用:粗召回 → 精排序,兼顾效率与精度。
若定义检索阶段召回相关文档的概率为:
$$ P(\text{retrieve}) = \text{Top-}k \left( \text{sim}\big(\text{Emb}(q),\, \text{Emb}(d_i)\big) \right) $$
其中 $\text{Emb}(\cdot)$ 为嵌入函数,$\text{sim}(\cdot)$ 为余弦相似度。
最终生成阶段的条件概率为:
$$ P(y \mid q) = \sum_{d \in \text{Top-}k} P(d \mid q) \cdot P_{\text{LLM}}(y \mid q, d) $$
前者由检索器决定,后者由生成模型决定。
回答流程类问题,一定不要只背阶段名称。
更好的表达方式是:“先离线的索引构建,再在线的检索生成”,并且每讲一个阶段都顺带提一句该阶段的常见坑和优化手段,这样能立刻拉开和其他候选人的差距。
评论专区
评论加载中...登录后即可发表评论