Skip to content

01.2 - RAG 系统架构总览

定位: RAG 系统的"蓝图"——理解 RAG 从简单到复杂的架构演进以及核心设计决策 面试高频度: ⭐⭐⭐⭐⭐ 考查方式: 架构设计、系统演进理解、模块选择

一、这是什么?为什么需要它?

是什么

RAG 系统架构是描述 RAG Pipeline 各组件及其交互关系的顶层设计。它能帮助我们:

  • 理解系统边界:哪些模块负责什么,输入输出是什么
  • 做出设计决策:在质量、延迟、成本之间做权衡
  • 定位问题瓶颈:系统出问题时快速定位到具体模块

为什么需要架构思维?

RAG 看起来简单(检索+生成),但实际生产系统中会有大量"看起来都对但效果不好"的问题:

"为什么 RAG 回答了我的问题但引用了不相关的来源?"
  -> 可能是检索 Top-K 中混入了噪声
  -> 可能是 Embedding 模型对领域术语理解不够
  -> 可能是 Prompt 模板没有排序检索结果

没有架构视角,就只能盲目调参。
有架构视角,就能从模块边界定位问题。

二、原理拆解

2.1 Naive RAG 架构(基准架构)

最基本的 RAG 架构,也是所有优化方案的起点:

+------------------------------------------------------------------+
|                      Naive RAG 架构                                |
|                                                                   |
|  索引阶段(离线):                                                |
|  +----------+   +----------+   +----------+   +---------+        |
|  | 原始文档   |--> | 文本分块   |--> |Embedding  |--> | 向量存储 |        |
|  | PDF/Web   |   | Splitter |   | Model    |   |Database |        |
|  +----------+   +----------+   +----------+   +---------+        |
|                                                                   |
|  推理阶段(在线):                                                |
|  +----------+   +----------+   +----------+   +---------+        |
|  | 用户查询   |--> |查询向量化  |--> | 向量检索   |--> |LLM 生成  |        |
|  |           |   | (同模型)  |   | ANN搜Top-K|   | + K块拼接|        |
|  +----------+   +----------+   +----------+   +---------+        |
|                                                                   |
|  特点:简单直接、易于实现、适合快速验证                              |
|  局限:无检索优化、无重排序、无查询转换                              |
+------------------------------------------------------------------+

核心代码(LangChain,约 10 行):

python
from langchain.chains import RetrievalQA

qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)
result = qa.invoke({"query": "问题"})

2.2 Advanced RAG 架构(增强架构)

在 Naive RAG 前后增加优化环节,是生产中常用的架构:

+------------------------------------------------------------------+
|                    Advanced RAG 架构                               |
|                                                                   |
|  用户查询                                                          |
|     |                                                              |
|     v                                                              |
|  +------------------+                                              |
|  | Pre-Retrieval    |  <-- 检索前优化:让查询更有效                     |
|  | 查询转换          |                                              |
|  | - HyDE           |  假设文档嵌入:查询 -> LLM造伪文档 -> 向量检索       |
|  | - Multi-Query    |  多查询生成:把一个问题拆成多个角度分别检索          |
|  | - Step-back      |  后退提问:从具体问题后退到更抽象的问题              |
|  | - Query Routing  |  查询路由:判断需要检索还是直接回答                  |
|  +------------------+                                              |
|     |                                                              |
|     v                                                              |
|  +------------------+                                              |
|  | 向量检索 (ANN)    |                                              |
|  | 返回 20-50 个候选  |  <-- 第一轮粗筛,用低精度高召回率                 |
|  +------------------+                                              |
|     |                                                              |
|     v                                                              |
|  +------------------+                                              |
|  | Post-Retrieval   |  <-- 检索后优化:精炼检索结果                     |
|  | - Reranking      |  用 Cross-Encoder 重排序 Top-k                  |
|  | - Hybrid Search  |  向量+关键词混合,互相补足                       |
|  | - Context Filter |  按元数据/时间/权限过滤检索结果                   |
|  | - Compression    |  压缩/提取关键信息,减少噪声                     |
|  +------------------+                                              |
|     |                                                              |
|     v                                                              |
|  +------------------+                                              |
|  | LLM 生成          |                                              |
|  | + 排序后的 Top-K   |                                              |
|  +------------------+                                              |
|                                                                   |
|  特点:检索质量显著提升、可插拔优化模块                              |
|  成本:增加延迟(Reranking 约 50-200ms)和复杂度                      |
+------------------------------------------------------------------+

优化效果量化对比

优化方案检索召回提升延迟增加适用场景
仅向量检索基线基线简单问答
+ HyDE+10-20%+200-500ms短查询/表述差异大
+ Multi-Query+15-25%+300-800ms复杂查询/多角度问题
+ Reranking+20-35%+50-200ms检索结果噪声多
+ Hybrid Search+15-30%+50-100ms专有名词/代码检索
+ 全部优化+40-60%+600ms-1.5s高质量生产系统

2.3 Modular RAG 架构(模块化架构)

当前 RAG 架构的最新范式,强调组件的可组合性和灵活性:

+------------------------------------------------------------------+
|                    Modular RAG 架构                                |
|                                                                   |
|  +------------------+                                             |
|  |  路由层 (Router)  |  <-- 决定如何路由每个查询                         |
|  |  - 意图识别       |                                             |
|  |  - 查询分类       |                                             |
|  +--------+---------+                                             |
|           |                                                       |
|   +-------+--------+--------+--------+                           |
|   |                |        |        |                            |
|   v                v        v        v                            |
| +--------+ +-----------+ +------+ +------+                      |
| |向量检索  | | 图检索     | |Web搜 | |直答  |   <-- 多种搜索/回答方式   |
| |(Vector) | | (Graph)   | |(Web) | |(QA)  |                      |
| +--------+ +-----------+ +------+ +------+                      |
|   |                |        |        |                            |
|   +-------+--------+--------+--------+                           |
|           |                                                       |
|           v                                                       |
|  +------------------+                                             |
|  |  融合层 (Fusion)  |  <-- 多路结果融合                              |
|  |  合并/去重/排序   |                                             |
|  +------------------+                                             |
|           |                                                       |
|           v                                                       |
|  +------------------+                                             |
|  |  生成层 (Gen)     |                                             |
|  |  增强 Prompt 生成 |                                             |
|  +------------------+                                             |
|           |                                                       |
|           v                                                       |
|  +------------------+                                             |
|  | Agent层(可选)    |  <-- 多轮交互/自我反思                          |
|  | 记忆/规划/工具   |                                             |
|  +------------------+                                             |
|                                                                   |
|  特点:高度灵活、可定制、适合复杂场景                                |
|  成本:架构复杂度高、调试和维护成本高                                |
+------------------------------------------------------------------+

典型的路由策略

python
# 查询路由的伪代码逻辑
def route_query(query: str) -> str:
    intent = classify_intent(query)  # 分类查询意图
    
    if intent == "factual":
        return "vector_search"       # 事实性问题 -> 向量检索
    elif intent == "relational":
        return "graph_search"        # 关系型问题 -> 图检索
    elif intent == "realtime":
        return "web_search"          # 实时信息 -> 网页搜索
    elif intent == "greeting":
        return "direct_answer"       # 问候 -> 直接回答
    else:
        return "hybrid_search"       # 默认 -> 混合检索

2.4 三种架构对比总结

维度Naive RAGAdvanced RAGModular RAG
复杂度
检索质量基线中高
延迟中高
灵活性低(固定流程)中(可插拔优化)高(可编排)
维护成本
适用场景快速验证/PoC生产系统复杂业务/多模态
典型用户个人开发者初创团队大型企业

三、图解全景

RAG 系统的完整 Pipeline(含数据流)

                     离线索引阶段
                    =============
                                             +----------+
  +----------+    +----------+    +--------+  |向量数据库 |
  | 文档加载   |    | 文本分块   |    |Embedder|  |  +-----+ |
  | PDFLoader |--->| Recursive |--->| BGE    |->|  |Chunk|..|
  | WebLoader |    | 256/64    |    | E5     |  |  +-----+ |
  +----------+    +----------+    +--------+  +----------+
                                                   ^
                   在线推理阶段                      |
                   =============                   |
  +----------+    +----------+    +--------+        |
  | 用户输入   |    | 查询转换   |    |Embedder|     |
  | "..."     |--->| HyDE     |--->| (同模型)|-----+
  +----------+    +----------+    +--------+
                                       |
                                  +----v----+    +----------+
                                  | 向量检索  |    | 重排序    |
                                  | ANN搜索   |--->|Reranker  |
                                  | Top-100  |    | Top-3    |
                                  +---------+    +----+-----+
                                                      |
                                                      v
                                  +----------+    +----------+
                                  | Prompt    |    | LLM 生成  |
                                  | 组装      |--->| 回答+引用 |
                                  +----------+    +----------+

架构选择决策树

你要构建的 RAG 系统需要什么?

  +-- 快速验证一个想法?
  |     -> Naive RAG(几天内搭建完成)
  |
  +-- 生产系统,需要稳定可靠?
  |     -> Advanced RAG + Reranking(核心优化)
  |
  +-- 需要处理多种数据类型?
  |     -> Modular RAG + Router(灵活路由)
  |
  +-- 需要多轮交互/推理?
  |     -> Agentic RAG(见进阶板块)
  |
  +-- 需要处理复杂的实体关系?
        -> Graph RAG(见进阶板块)

四、实战验证

4.1 体验三种架构的代码递进

python
# 层级 1:Naive RAG
from langchain.chains import RetrievalQA

qa_v1 = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
)

# 层级 2:Advanced RAG - 加入 Reranker
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker

compressor = CrossEncoderReranker(
    model_name="BAAI/bge-reranker-v2-m3"
)
retriever_v2 = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectorstore.as_retriever(search_kwargs={"k": 20})
)
qa_v2 = RetrievalQA.from_chain_type(llm=llm, retriever=retriever_v2)

# 层级 3:Modular RAG - 路由 + 多路检索
# 使用 LangChain 的 RouterChain
from langchain.chains.router import MultiRetrievalQAChain

qa_v3 = MultiRetrievalQAChain.from_retrievers(
    llm=llm,
    retriever_infos=[
        {"name": "技术文档", "description": "技术相关", "retriever": tech_retriever},
        {"name": "公司政策", "description": "制度和HR", "retriever": policy_retriever},
    ],
    default_retriever=vectorstore.as_retriever()
)

4.2 架构质量对比实验

bash
# 用相同数据集对比不同架构的 RAGAS 分数
# 安装:pip install ragas

# 1. Naive RAG 评估
# 2. Advanced RAG(+Reranker)评估
# 3. Advanced RAG(+HyDE + Reranker)评估

# 典型的评估结果趋势:
# Naive RAG:    faithfulness=0.72, relevancy=0.68
# +Reranker:    faithfulness=0.81, relevancy=0.76
# +HyDE:        faithfulness=0.84, relevancy=0.79
# 两者全加:     faithfulness=0.87, relevancy=0.81

五、面试视角

问题答案要点
Naive RAG 的主要缺陷是什么?1) 无查询优化,短查询/歧义查询效果差;2) 无重排序,Top-K 中可能混入噪声;3) 单次检索,不支持多步推理;4) 无反馈机制,无法自我纠正
Reranking 为什么有效?向量检索用 Bi-Encoder(查询和文档独立编码,速度快但精度有限);Reranker 用 Cross-Encoder(查询和文档一起编码,速度慢但精度高)。组合使用兼顾效率与精度
HyDE 解决了什么问题?查询和文档的表述方式不同(尤其短查询),导致向量距离不准确。HyDE 用 LLM 生成一个"伪文档",让查询->伪文档->检索,缩短语义差距
Modular RAG 相比 Advanced RAG 的优势?Modular RAG 把各模块解耦,可以灵活组合、替换、编排;支持路由决策(不同查询走不同路径);更容易扩展(加入图检索、Web 搜索等新模块)
生产环境 RAG 首选架构?为什么?Advanced RAG + Reranker。它在质量、延迟、复杂度之间取得了最佳平衡。Naive 质量不够,Modular 过度设计
如何选择检索的 K 值?取决于:1) LLM 的上下文窗口(越大能接受越多块);2) 文档块大小(小块需要更多 K);3) 质量需求(高精度少K,高召回多K)。典型值:3-10(有 Reranker 时粗筛 20-50+精排3-5)

📚 相关链接

  • **什么是RAG** — RAG 基础概念
  • **RAGvs微调-技术选型对比** — RAG 与微调的场景决策
  • **AgenticRAG** — Modular RAG 的延伸:Agent 驱动的 RAG
  • **检索与重排序** — 检索和重排序的详细原理
  • <- 返回 **RAG基础索引**

Knowledge4J — Java 知识库