跳转至

RAG系统设计深入 - 从原型到生产级架构

适用场景:2028年AI系统设计面试中,RAG相关问题已成为出现频率最高的题型之一 前置知识01-AI系统设计面试指南 中的RAG基础题


为什么RAG是面试高频题

RAG系统设计是考察候选人"AI系统工程化能力"的最佳载体: - 涉及数据处理、检索、生成、评估全链路 - 需要在准确性、延迟、成本之间做工程权衡 - 落地过程中有大量非直觉的坑(分块策略、检索质量、幻觉控制) - 几乎所有大厂都在部署RAG系统


1. 生产级RAG架构全景

1.1 完整架构(面试画图用)

Text Only
┌──────────────────── 离线索引流水线 ────────────────────┐
│                                                        │
│  数据源 → 文档解析 → 清洗/去重 → 分块 → Embedding      │
│  (PDF/HTML/  (Unstructured/  (规则+     (多策略)  (BGE/  │
│   DB/API)    Docling)       模型去重)           GTE)    │
│                                    ↓                    │
│                    向量库(Milvus) + 倒排索引(ES) + 图谱   │
│                                                        │
└────────────────────────────────────────────────────────┘

┌──────────────────── 在线查询流水线 ────────────────────┐
│                                                        │
│  用户Query → Query理解 → Query改写/扩展 → 路由判断      │
│              (意图分类)   (HyDE/多查询)   (检索/直答)    │
│                                ↓                        │
│              混合检索(Dense + Sparse + 知识图谱)         │
│                                ↓                        │
│              Rerank(Cross-Encoder / LLM-as-Judge)       │
│                                ↓                        │
│              上下文组装(压缩 + 排序 + Token预算管理)      │
│                                ↓                        │
│              LLM生成(流式输出 + 引用标注)                │
│                                ↓                        │
│              后处理(幻觉检测 + 安全过滤 + 缓存)          │
│                                                        │
└────────────────────────────────────────────────────────┘

┌──────────────────── 持续优化闭环 ──────────────────────┐
│  用户反馈 → 质量评估(自动+人工) → 数据飞轮 → 模型微调    │
└────────────────────────────────────────────────────────┘

1.2 各环节性能参考值

环节 延迟 说明
Query改写 200-500ms LLM调用,可与检索并行
向量检索(百万级) 5-20ms Milvus/FAISS,HNSW索引
BM25检索(千万级) 10-50ms Elasticsearch
Cross-Encoder Rerank(Top-20) 50-150ms GPU推理
LLM生成(首Token) 200-800ms TTFT,取决于模型和负载
LLM生成(完整回答) 2-8s 取决于输出长度
E2E总延迟 3-10s 用户可接受范围

2. 关键设计决策(面试重点追问)

2.1 分块策略:影响检索质量的第一因素

Text Only
策略对比:
┌──────────────┬──────────────────┬─────────────────┬──────────────┐
│ 策略         │ 优点             │ 缺点            │ 适用场景      │
├──────────────┼──────────────────┼─────────────────┼──────────────┤
│ 固定大小     │ 实现简单          │ 可能切断语义     │ 快速原型      │
│ (512 tokens) │                  │                 │              │
├──────────────┼──────────────────┼─────────────────┼──────────────┤
│ 语义分块     │ 保持语义完整性     │ 块大小差异大     │ 长文档/报告   │
│ (按段落/标题) │                  │ 实现复杂         │              │
├──────────────┼──────────────────┼─────────────────┼──────────────┤
│ 递归分块     │ 兼顾语义和大小     │ 需调优分割符     │ 通用场景      │
│ (LangChain)  │ 有重叠保持上下文   │                 │ (推荐默认)   │
├──────────────┼──────────────────┼─────────────────┼──────────────┤
│ 父子分块     │ 检索精度高        │ 存储多份         │ 精度要求高    │
│ (小块检索    │ 返回上下文丰富     │ 索引复杂         │ 的企业场景    │
│  大块返回)   │                  │                 │              │
└──────────────┴──────────────────┴─────────────────┴──────────────┘

面试常见追问:"如果用户的问题跨越了多个块怎么办?" - 方案1: 分块时加适当重叠(overlap 10-20%) - 方案2: 检索后将相邻块合并 - 方案3: 多查询检索 — 把用户问题拆成多个子查询,各自检索后合并结果

2.2 检索策略:为什么混合检索是标配

Text Only
混合检索流程:

用户Query
    ├──→ Dense检索(语义相似度)
    │     "如何办理退货" → 找到"退换货流程说明"
    ├──→ Sparse检索(关键词匹配)
    │     "如何办理退货" → 精确匹配"退货"关键词
    └──→ [可选] 知识图谱检索
          "如何办理退货" → 图谱关联: 退货→退货政策→退款流程
RRF融合(Reciprocal Rank Fusion)
    score(d) = Σ 1/(k + rank_i(d))   k通常取60
Cross-Encoder Rerank (Top-N → Top-K)

为什么不只用向量检索: 1. 向量检索擅长语义匹配,但对精确关键词(产品型号、法规编号)效果差 2. BM25擅长精确匹配,但对同义表述("退货" vs "退换")召回不足 3. 混合检索互补,RRF融合无需训练,效果稳定提升5-15%

2.3 Rerank的必要性

Text Only
无Rerank:  向量检索Top-10 → 直接送入LLM → 相关文档可能排在第7、8位
                                            LLM受上下文位置影响(Lost in the Middle)

有Rerank:  向量检索Top-50 → Cross-Encoder重排 → 最相关的排到前5
                                                  LLM效果显著提升

Cross-Encoder vs Bi-Encoder对比:

维度 Bi-Encoder(向量检索) Cross-Encoder(Rerank)
速度 快(ANN检索,毫秒级) 慢(逐对打分,百毫秒级)
精度 高(query和doc交叉注意力)
用途 大规模召回 精排Top-N

2.4 幻觉控制(面试核心追问)

Text Only
幻觉控制多层防线:

Layer 1: 检索质量保障
  - 高质量分块 + 混合检索 + Rerank → 确保送入LLM的上下文相关
  - 设置相关性阈值(cosine similarity < 0.5 则不检索)

Layer 2: Prompt约束
  - "仅基于以下参考资料回答,如果资料中没有相关信息,请说'我没有找到相关信息'"
  - 要求LLM输出引用标记 [1][2] 对应参考文档

Layer 3: 后处理验证
  - NLI(自然语言推理)模型验证: 生成内容是否能从检索文档推导出
  - 引用验证: 检查 [1] 标记的内容是否真的来自文档1
  - 自一致性: 多次生成对比,不一致的部分标记低置信度

Layer 4: 人工反馈闭环
  - 用户点踩 → 触发人工审核 → 标注bad case → 优化检索/Prompt

3. 高级RAG架构模式

3.1 Agentic RAG(2028面试热点)

传统RAG是单次"检索→生成",Agentic RAG引入自主决策循环

Text Only
用户问题 → Agent判断:
    ├── 简单事实题 → 单次RAG足够
    ├── 复杂分析题 → 多步检索策略:
    │     Step 1: 检索背景信息
    │     Step 2: 基于Step1结果,细化查询
    │     Step 3: 检索补充细节
    │     Step 4: 综合生成答案
    ├── 多数据源题 → 路由到不同知识库(技术/财务/法规)
    └── 需要计算/推理 → 使用工具(代码执行/API调用)后再生成

3.2 Graph RAG

场景:知识之间有强关联关系(组织架构、法规引用、技术依赖)

Text Only
文档 → 实体识别(NER) → 三元组抽取(LLM)
     → 知识图谱(Neo4j/NebulaGraph)

查询时:
  用户Query → 实体识别 → 图谱子图检索
  → 子图 + 向量检索结果 → 合并上下文 → LLM生成

优势:能回答"关系型"问题("A部门负责人向谁汇报?""这个API依赖哪些下游服务?")

3.3 多模态RAG

场景:文档包含图表、公式、表格(技术文档、财报、医疗影像报告)

Text Only
文档 → 拆分:
    ├── 文本 → 文本Embedding(BGE-M3)
    ├── 表格 → 结构化解析 + 文本描述Embedding
    ├── 图片 → VLM描述生成(Qwen-VL) → 文本Embedding
    │          + 原图CLIP向量 → 视觉索引
    └── 公式 → LaTeX提取 → 语义解释Embedding

检索时:
  文本Query → 多模态混合检索 → 返回文本+图片+表格
  → 多模态LLM生成(GPT-4o/Qwen-VL) → 带图表引用的回答

4. 生产环境关键问题

4.1 成本优化

Text Only
成本组成(典型RAG系统, 1000 QPS):
  Embedding API:   ~$500/月 (可替换为本地模型: BGE-M3)
  向量数据库:       ~$2000/月 (Milvus集群, 千万级文档)
  LLM推理(核心):   ~$15000/月 (GPT-4o级别)
  Rerank模型:      ~$1000/月 (GPU推理)
  基础设施:        ~$3000/月 (K8s集群)
  ────────────────────────────────
  总计:            ~$21500/月

优化策略:
  1. 语义缓存: 相似Query复用之前的回答 → LLM调用减少30-50%
  2. 级联模型: 简单问题→7B小模型(成本1/20),复杂→大模型
  3. 本地Embedding: BGE-M3自建 vs API调用 → 成本降90%
  4. 及时截断: 检索到高置信结果后停止额外检索

4.2 评估体系(面试必问)

Text Only
RAG评估维度:

1. 检索质量(Context)
   - Recall@K: Top-K检索中包含正确答案的比例
   - MRR: 正确答案在检索结果中的平均排名倒数
   - Context Relevance: 检索内容与问题的相关度(LLM评判)

2. 生成质量(Answer)
   - Faithfulness(忠实度): 回答是否能从检索内容推导出(最重要!)
   - Answer Relevance: 回答是否针对问题
   - Correctness: 与标准答案的匹配度

3. 端到端质量
   - Answer Correctness: 最终答案的准确率
   - 用户满意度: 点赞/点踩比例

评估工具: RAGAS / TruLens / DeepEval
自动化评估: LLM-as-Judge(GPT-4o评分) + 人工抽样校准

4.3 数据飞轮

Text Only
持续优化循环:

用户交互 → 日志收集(Query, 检索结果, 回答, 用户反馈)
质量分析:
  - 低分回答聚类 → 发现系统薄弱点
  - 无检索结果的Query → 知识库缺口
  - 高频Query → 缓存/预计算候选
优化行动:
  - 补充缺失知识到文档库
  - 优化分块/检索策略
  - 微调Embedding模型(Domain-specific)
  - 调整Prompt模板

5. 面试模拟:设计企业知识管理RAG系统

面试官:"请设计一个面向大型企业(5万员工)的内部知识管理系统,支持跨部门文档检索和问答。"

需求澄清(5min)

  • 文档规模:百万级文档(公告/制度/技术文档/会议纪要),持续增长
  • 格式:PDF/Word/PPT/Confluence页面/企业微信消息
  • 用户规模:5万员工,峰值QPS约500
  • 安全要求:部门级权限隔离,涉密文档不能跨部门泄露
  • 延迟要求:首Token 2秒内,完整回答10秒内
  • 准确率要求:对制度/流程类问题准确率>95%

架构设计(10min)

Text Only
文档接入层:
  Confluence/SharePoint/飞书 Webhook → 文档采集服务
  → 格式解析(Docling) → 元数据提取(部门/密级/分类/时间)
  → 权限标签注入 → 分块+Embedding → 索引写入

查询层:
  用户(SSO登录, 携带部门/角色信息) → Query
  → 权限过滤(预过滤: Milvus Partition + ES Filter)
  → 混合检索(Dense + BM25, RRF融合) → Rerank → 权限二次校验
  → LLM生成(引用标注) → 安全审核 → 返回

特殊处理:
  - 涉密文档: 独立Partition + 加密存储 + 审计日志
  - 多语言: BGE-M3天然支持中英混合
  - 时效性: 制度文档自动标注有效期,过期文档降权

关键决策(10min)

权限设计:这是企业RAG最核心的难点

Text Only
方案选择: 文档级ACL + 预过滤

文档入库时:
  每个文档 → 提取ACL(允许的部门/角色列表) → 存入元数据

检索时:
  用户Query + 用户权限信息
  → Milvus Partition By 部门 (粗粒度隔离)
  → + ES过滤条件 (细粒度ACL)
  → 结果只返回用户有权查看的文档

为什么不用后过滤?
  后过滤: 先检索100条 → 过滤掉无权限的 → 可能只剩5条
  预过滤: 在检索阶段直接限定权限范围 → 保证结果数量充足


最后更新:2026年2月