跳到正文

RAG 技术原理与架构怎么搭?

检索增强生成系统核心组件、最佳实践及挑战详解

原题:请详细阐述检索增强生成(RAG)的技术原理、系统架构以及在实际应用中的最佳实践和挑战。

模型微调 · 字节真题

30 秒回答

  1. RAG核心流程(索引-检索-生成)的完整理解
  2. 向量数据库选型与优化要点
  3. 检索策略(稠密/稀疏/混合)的权衡
  4. 实际落地中的关键挑战(幻觉、时效性、多跳推理)

回答与解析

答案要点

  • RAG核心流程(索引-检索-生成)的完整理解
  • 向量数据库选型与优化要点
  • 检索策略(稠密/稀疏/混合)的权衡
  • 实际落地中的关键挑战(幻觉、时效性、多跳推理)
  • RAG与微调的结合思路

一、技术原理

RAG的核心思想:用外部知识弥补大模型的知识截止和幻觉问题,把LLM从"闭卷考试"变成"开卷考试"。

标准流程三步走:

  • 索引(Indexing):文档切分→Embedding编码→向量库存储
  • 检索(Retrieval):Query向量化→相似度搜索→Top-K召回
  • 生成(Generation):将检索结果拼入Prompt→LLM生成答案

关键洞察:检索质量决定RAG上限,生成能力决定下限。


二、系统架构

用户Query → Query理解/改写 → 多路检索(向量+关键词+图谱)
                ↓
        重排序(Rerank)→ 上下文压缩 → 构建Prompt
                ↓
        LLM生成 + 引用溯源 ← 答案后处理

核心组件选型

  • Embedding:BGE、M3E(中文)、OpenAI text-embedding-3
  • 向量库:Milvus(大规模)、Qdrant(轻量)、Elasticsearch(混合场景)
  • Rerank:Cross-Encoder(精度高但慢)、ColBERT(平衡)

三、最佳实践

环节 关键做法
文档切分 按语义段落切,256-512 tokens;重叠窗口作为待测变量,并用同一评测集验证边界证据、召回与成本
检索策略 稠密+稀疏混合(RRF融合),复杂场景加知识图谱
查询优化 HyDE(假设文档嵌入)、Query扩展、多Query生成
上下文处理 重排序精筛Top-5,过长时压缩或摘要
生成控制 要求模型标注引用来源,方便事实核查

四、核心挑战

  • 检索失效:Query与文档语义鸿沟→用Query改写或HyDE缓解
  • 上下文窗口:多文档拼接超限→Rerank精筛+递归摘要
  • 知识冲突:检索内容与模型参数知识矛盾→设计冲突消解Prompt
  • 时效性:知识更新后向量未同步→增量索引+版本管理
  • 多跳推理:单轮检索无法回答→ReAct循环检索或构建知识图谱

五、进阶方向

  • Agentic RAG:检索作为Tool,由Agent决策何时检索、检索什么
  • GraphRAG:用知识图谱显式建模实体关系,解决多跳问题
  • RAG+微调:用检索数据构造SFT数据,提升模型对检索内容的利用能力

口语版讲法(约4分钟)

  • 一句话定位:把RAG看作给大模型开卷考试
  • 核心流程和关键取舍:索引、检索、生成的工程细节
  • 最佳实践:混合检索、重排序、Query改写
  • 落地风险:检索失效、知识冲突、时效性
  • 进阶方向和我的判断:Agentic RAG和GraphRAG

这道题其实是在问,怎么让大模型在需要专业知识时,不靠死记硬背,而是能现场翻书。说白了,RAG的核心就是把大模型从闭卷考试变成开卷考试。

整个流程分三步:索引、检索、生成。索引就是把文档切碎,转成向量存进向量库;检索是把用户的问题也转成向量,去库里找最像的那几段;生成是把这些段落塞进提示词,让模型基于它们回答。这里有个关键认知,检索质量决定了RAG的上限,生成质量决定了下限,所以我会把大部分精力放在检索上。

具体说下索引。文档切分不是随便按字数切,我会按语义段落,块大小与重叠窗口都作为候选变量,再用同一评测集比较边界证据完整率、召回、延迟和索引成本。向量库选型上,如果数据量上亿,我会用Milvus,它分布式做得成熟;如果是几百万级别的轻量场景,Qdrant更轻便,部署成本低。Embedding模型的话,中文场景我倾向BGE或者M3E,英文用OpenAI那套。

检索这块,我会走混合路线。纯向量检索在短文本匹配上不如关键词,纯关键词又抓不住语义,所以我会把稠密检索和稀疏检索结合起来,用RRF融合排序。举个例子,在客服退款场景里,用户说“订单异常”,向量检索能理解这是状态不对,但关键词检索能精确匹配订单号,两条路一起走,召回率能提升10到15个点。

检索完还有一步重排序,很多人忽略。我会用Cross-Encoder对Top-50做精排,只留Top-5,这样能去掉噪声,保证进生成器的都是高质量片段。重排序计算量大,但值得,因为上下文窗口有限,塞入垃圾信息反而会干扰模型。

Query改写也很有用。用户的问题往往模糊,比如“怎么退款”,我会先生成几个可能的问题表述,或者用HyDE先假设一个理想答案再检索,效果提升明显。

落地中最大的挑战有三个。先看检索失效,当用户问的和文档表述差异很大时,检索就抓瞎,这点可以用Query改写或者HyDE缓解。再看知识冲突,检索到的信息跟模型参数里学到的矛盾,比如企业SOP更新了,但模型还在用旧知识,我会在提示词里明确要求“优先基于检索内容回答,忽略模型自身知识”,并在答案后标注引用来源,方便核查。还要看时效性,知识库每天更新,但向量索引重建很慢,我会做增量索引,新增数据直接插入,删除用软删除加异步重建,保证实时性。

现在很多人在做Agentic RAG,就是让模型自己决定什么时候去检索、检索什么,甚至用ReAct循环多次检索。我觉得这是RAG的进化方向,但前提是Agent的决策能力要可靠,不然容易陷入死循环。

所以我的判断是,RAG不是银弹,它适合知识密集、答案可被文档支撑的场景,比如客服、合规审查;但如果是创造性写作或者需要深层推理的,RAG只能当辅助,得配合微调或者知识图谱。我倾向于把RAG当成一个工具链,而不是一个模型,它的核心是做好检索这一环,后面生成交给大模型就行。

关键一句:Agentic RAG是进化方向,但Agent决策可靠性是关键前提

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设我们要给电商平台做一个智能客服,用户问“这款手机拍照怎么样”,模型可能会用自己的知识回答,但新品参数它不知道。你会怎么用外部知识来保证回答准确?从索引开始讲吧。

  2. 问法 2 · 层层追问

    你做过知识增强的生成系统吧?……那怎么把外部文档和生成结合起来?……检索和生成之间如何配合?……如果检索到的内容互相矛盾,你怎么处理?

  3. 问法 3 · 直球架构

    详细讲一下RAG的技术原理和系统架构,包括索引、检索、生成流程,以及实际落地中的最佳实践和主要挑战,比如幻觉、时效性、多跳推理这些问题怎么解决?

同模块相关题目