白歌在白板上画出 RAG 的三段式架构:"检索 → 增强 → 生成,本质是把'大海捞针'变成'带地图寻宝'——先找到相关文档,再让 AI 基于证据回答。"
RAG 核心机制与流程
定义与作用
RAG(Retrieval Augmented Generation,检索增强生成)是一种架构模式:在 AI 生成回答之前,先从私有知识库中检索相关信息,拼接成上下文注入 Prompt,让 AI 基于真实数据作答。
私有数据 + LLM = 领域专家
核心价值:
- 消除幻觉:AI 基于真实文档回答,而非"编造"
- 私有知识:AI 能回答公司内部信息(产品规格、内部制度)
- 可控更新:更新文档库即可刷新 AI 知识,无需重新训练模型
核心原理:完整 RAG 流程
图释:用户问题不直接发给 AI,而是先经过向量库检索,将相关的文档片段拼入 Prompt 作为"答题参考",最终 AI 基于这些参考资料生成回答。
对比:无 RAG vs 有 RAG
操作前:无 RAG 时(AI 凭"记忆"回答)
用户:「飞翔科技员工请假需要提前几天?」
AI: 「作为 AI 助手,我没有飞翔科技的具体信息。
通常企业请假需要提前 1-3 天,建议咨询公司 HR。 」
↑ 泛泛而谈,无法给出准确答案
操作后:有 RAG 时(AI 基于员工手册回答)
用户:「飞翔科技员工请假需要提前几天?」
AI: 「根据《飞翔科技员工手册》第三章请假制度:
- 事假需提前 3 个工作日申请
- 病假可当日电话报备,事后补交医院证明
- 年假需提前 1 周提交申请并由部门负责人审批 」
↑ 精确、有依据、可信
完整示例:手动实现 RAG(理解原理)
场景说明
在引入 QuestionAnswerAdvisor 之前,先手动实现一个简化版 RAG,帮助理解底层机制。
关键代码
@RestController
public class ManualRagController {
private final VectorStore vectorStore;
private final ChatClient chatClient;
public ManualRagController(VectorStore vectorStore,
ChatClient.Builder builder) {
this.vectorStore = vectorStore;
this.chatClient = builder.build();
}
@GetMapping("/manual-rag")
public String ask(@RequestParam String question) {
// Step 1: 检索相关文档
List<Document> documents = vectorStore.similaritySearch(
SearchRequest.builder()
.query(question)
.topK(3)
.similarityThreshold(0.7)
.build()
);
// Step 2: 构建上下文
String context = documents.stream()
.map(doc -> doc.getContent())
.collect(Collectors.joining("\n\n"));
// Step 3: 构建增强 Prompt
String prompt = String.format("""
你是飞翔科技员工助手。基于以下文档内容回答问题。
如果文档中没有相关信息,请明确说明「文档库中未找到」。
相关文档:
%s
用户问题:%s
回答:
""", context, question);
// Step 4: 调用 AI
return chatClient.prompt()
.user(prompt)
.call()
.content();
}
}
运行结果及分析
// 输入:请假需要提前几天?
// Step 1 检索到 3 条相关片段(相似度 0.89 / 0.82 / 0.76)
// Step 2-3 拼接 Prompt(约 1500 Token)
// Step 4 AI 返回精确答案,引用员工手册具体条款
关键观察:在没有特意训练/微调模型的情况下,AI 就能精准回答企业内部问题——这就是 RAG 的魔力。
面试高频题
Q1:RAG 为什么能减少幻觉?
RAG 将"开放式生成"约束为"基于证据生成"。AI 不是凭空编造答案,而是在给定的文档上下文中寻找答案。Prompt 中的"如果文档中没有相关信息,请明确说明"指令进一步抑制了 AI 编造信息的倾向。
Q2:RAG 和模型 Fine-tuning 的区别是什么?
RAG:知识存在外部向量库中,AI 实时检索。适合动态更新的知识库,成本低,无需 GPU。Fine-tuning:知识被写入模型参数,AI 内化。适合固定的格式/风格训练,成本高,需要标注数据。两者可互补使用:RAG 提供知识,Fine-tuning 优化风格。
本章小结
- RAG = 检索(VectorStore)→ 增强(拼接 Prompt)→ 生成(ChatModel)
- 无 RAG 时 AI 泛泛而谈或编造,有 RAG 时基于真实文档回答
- 手动实现 RAG 只需四步:相似搜索 → 提取上下文 → 拼接 Prompt → 调用 AI
- QuestionAnswerAdvisor 将这个流程自动化(下一节详解)