跳到主要内容

RAG 与检索增强

RAG(Retrieval-Augmented Generation)把私有/最新知识检索出来,再交给模型生成,减轻幻觉与「训练集没有」的问题。LangChain / GraphRAG / LangGraph 如何分工见 RAG 与框架选型;LangGraph 动手见 [LangGraph 编排实践](/docs/ai/Agent/LangGraph 编排实践)。本篇讲面试答法与失效模式;动手见 RAG 落地实践(无框架)、[LangChain RAG 实践](/docs/ai/RAG/LangChain RAG 实践)、[Milvus 向量库实践](/docs/ai/RAG/Milvus 向量库实践);进阶见 [GraphRAG 概览与查询](/docs/ai/RAG/GraphRAG 概览与查询)。

Agent 会调检索工具,但 RAG ≠ Agent:很多产品只做「检索 + 生成」就够。

流水线(索引 → 检索 → 生成)​

文档 → 切分(chunk) → 向量化(embedding) → 写入向量库
用户问题 → 向量化 → top-k 检索 → (可选重排)→ 拼进 Prompt → LLM 生成
阶段关键决策
切分chunk 大小、重叠、按标题/段落切
嵌入模型选择、维度、是否多语
检索top-k、相似度阈值、过滤条件
生成如何引用片段、拒答策略

核心参数直觉​

参数太大时太小时
chunk噪声多、定位差上下文碎、跨段难答
top-k噪声进 Prompt、贵关键段召不回
重叠冗余、贵边界处切断语义

没有万能默认值:用小评测集看召回与答案是否引用对段落。

Naive vs Advanced(点到为止)​

形态做法何时想
Naive问句向量 → top-k → 直接生成基线、PoC
混合检索向量 + BM25/关键词专有名词、编号
重排(rerank)先多召回再精排噪声大、k 要开大
查询改写多查询 / HyDE 等用户问法飘
GraphRAG实体关系图 + 社区摘要全局主题、跨文档归纳、关系推理

面试说到「先 Naive 基线,再按失败 case 加混合/重排」比背一堆缩写更加分。单题深答见 [如何优化 RAG 检索效果](/docs/ai/Agent/面试/如何优化 RAG 检索效果)。工业界向量 RAG 常用 LangChain 拼装 Loader / Splitter / VectorStore / Retriever,见 [LangChain RAG 实践](/docs/ai/RAG/LangChain RAG 实践);向量搞不定的全局/关系题再考虑 [GraphRAG 概览与查询](/docs/ai/RAG/GraphRAG 概览与查询)。

与微调的边界​

RAG微调
适合知识常变、要可引用、要可撤稳定风格/格式/领域话术
更新成本改索引即可重训/再对齐
风险检索错 → 答错过拟合、灾难性遗忘

常见答案:知识用 RAG,行为/格式用微调或强约束 Prompt;两者可叠加。 LoRA 是参数高效微调的主流做法,见 [LoRA 低秩适配与微调](/docs/ai/Agent/面试/LoRA 低秩适配与微调)。

失效模式(高频)​

  1. 检索错:答得很自信但引用了无关段
  2. 切分坏:答案跨两个 chunk,两边都不完整
  3. 未拒答:库里没有仍胡编——要「无依据则说明找不到」
  4. 权限泄漏:检索未按租户/角色过滤

面试速记​

  1. RAG 三步? 索引(切分+嵌入+入库)、检索 top-k、把片段塞进 Prompt 再生成。
  2. 为何用 RAG? 注入私有/新知识、可引用、比反复微调更易更新。
  3. chunk / top-k 怎么调? 看评测:过大噪声、过小碎片;无万能默认。
  4. RAG vs 微调? 知识变更多用 RAG;稳定风格/格式可微调;可组合。
  5. 典型翻车? 检索错、切分断语义、不拒答、权限不过滤。