RAG架构Skill rag-architecture

RAG架构技能专注于设计和优化检索增强生成(RAG)系统,涵盖文档处理、嵌入模型选择、检索策略、上下文组装等关键环节,用于构建知识基础的AI应用,如LLM问答、知识检索。关键词:RAG、检索增强生成、嵌入模型、向量搜索、语义搜索、LLM应用、AI架构设计。

RAG应用 0 次安装 0 次浏览 更新于 3/11/2026

name: rag-architecture description: 检索增强生成(RAG)系统设计模式、分块策略、嵌入模型、检索技术和上下文组装。用于设计RAG管道、提高检索质量或构建知识基础的LLM应用。 allowed-tools: Read, Glob, Grep

RAG架构

何时使用此技能

使用此技能时:

  • 为LLM应用设计RAG管道
  • 选择分块和嵌入策略
  • 优化检索质量和相关性
  • 构建知识基础的AI系统
  • 实现混合搜索(密集 + 稀疏)
  • 设计多阶段检索管道

关键词: RAG、检索增强生成、嵌入、分块、向量搜索、语义搜索、上下文窗口、基础、知识库、混合搜索、重排、BM25、密集检索

RAG架构概述

┌─────────────────────────────────────────────────────────────────────┐
│                       RAG管道                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────────┐  │
│  │   摄入管道   │    │   索引管道   │    │    向量存储          │  │
│  │              │───▶│              │───▶│    (嵌入)          │  │
│  └──────────────┘    └──────────────┘    └──────────────────────┘  │
│         │                   │                       │               │
│   文档                分块 +                  索引向量              │
│                     嵌入                                            │
│                                                     │               │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────────┐  │
│  │    查询处理   │    │  检索引擎    │    │   上下文组装        │  │
│  │              │───▶│              │───▶│    + 生成            │  │
│  └──────────────┘    └──────────────┘    └──────────────────────┘  │
│         │                   │                       │               │
│   用户查询            Top-K分块              LLM响应               │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

文档摄入管道

文档处理步骤

原始文档
      │
      ▼
┌─────────────┐
│   提取内容  │ ← PDF、HTML、DOCX、Markdown
│             │
└─────────────┘
      │
      ▼
┌─────────────┐
│   清理和    │ ← 移除样板、标准化
│   标准化    │
└─────────────┘
      │
      ▼
┌─────────────┐
│   分块文档  │ ← 分割成可检索单元
│             │
└─────────────┘
      │
      ▼
┌─────────────┐
│  生成嵌入   │ ← 创建向量表示
│             │
└─────────────┘
      │
      ▼
┌─────────────┐
│   存储索引  │ ← 持久化向量 + 元数据
│             │
└─────────────┘

分块策略

策略比较

策略 描述 最佳适用 分块大小
固定大小 按令牌/字符计数分割 简单文档 256-512令牌
句子基础 在句子边界分割 叙述性文本 可变
段落基础 在段落边界分割 结构化文档 可变
语义 按主题/意义分割 长文档 可变
递归 分层分割 混合内容 可配置
文档特定 自定义每文档类型 专门化(代码、表格) 可变

分块决策树

内容类型?
├── 代码
│   └── 基于AST或函数级分块
├── 表格/结构化
│   └── 保持表格完整,分块周围文本
├── 长叙述
│   └── 语义或递归分块
├── 短文档(<1页)
│   └── 整个文档作为分块
└── 混合内容
    └── 递归,带类型特定处理器

分块重叠

无重叠:
[分块1: "快速棕色"] [分块2: "狐狸跳过"]
                             ↑
               边界信息丢失

有重叠(20%):
[分块1: "快速棕色狐狸"]
                    [分块2: "棕色狐狸跳过"]
                         ↑
             边界间上下文保留

推荐重叠: 分块大小的10-20%

分块大小权衡

较小分块(128-256令牌)        较大分块(512-1024令牌)
├── 更精确检索                  ├── 每分块更多上下文
├── 每分块较少上下文            ├── 可能包含无关内容
├── 更多分块搜索                ├── 较少分块搜索
├── 适用于事实Q&A                ├── 适用于摘要
└── 更高检索召回                └── 更高检索精度

嵌入模型

模型比较

模型 维度 上下文 优势
OpenAI text-embedding-3-large 3072 8K 高质量,昂贵
OpenAI text-embedding-3-small 1536 8K 良好质量成本比
Cohere embed-v3 1024 512 多语言,快速
BGE-large 1024 512 开源,有竞争力
E5-large-v2 1024 512 开源,指令调整
GTE-large 1024 512 阿里巴巴,适用于中文
Sentence-BERT 768 512 经典,易于理解

嵌入选择

需要最佳质量,成本可接受?
├── 是 → OpenAI text-embedding-3-large
└── 否
    └── 需要自托管/开源?
        ├── 是 → BGE-large 或 E5-large-v2
        └── 否
            └── 需要多语言?
                ├── 是 → Cohere embed-v3
                └── 否 → OpenAI text-embedding-3-small

嵌入优化

技术 描述 何时使用
嵌套嵌入 可截断到较小维度 内存受限
量化嵌入 INT8/二进制嵌入 大规模搜索
指令调整 前缀任务指令 专门化检索
微调嵌入 领域特定训练 专门化领域

检索策略

密集检索(语义搜索)

查询: "如何部署容器"
         │
         ▼
    ┌─────────┐
    │ 嵌入查询 │
    └─────────┘
         │
         ▼
    ┌─────────────────────────────────┐
    │ 向量相似性搜索                  │
    │ (余弦、点积、L2)              │
    └─────────────────────────────────┘
         │
         ▼
    Top-K语义相似分块

稀疏检索(BM25/TF-IDF)

查询: "Kubernetes pod部署YAML"
         │
         ▼
    ┌─────────┐
    │分词 + 评分│
    └─────────┘
         │
         ▼
    ┌─────────────────────────────────┐
    │ BM25排名                         │
    │ (词频 × IDF)                   │
    └─────────────────────────────────┘
         │
         ▼
    Top-K词汇匹配分块

混合搜索(两者最佳)

查询 ──┬──▶ 密集搜索 ──┬──▶ 融合 ──▶ 最终排名
        │                   │      │
        └──▶ 稀疏搜索 ─┘      │
                                   │
        融合方法:                ▼
        • RRF(互惠排名融合)
        • 线性组合
        • 学习重排

互惠排名融合(RRF)

RRF分数 = Σ 1 / (k + rank_i)

其中:
- k = 常数(通常60)
- rank_i = 每个检索结果中的排名

示例:
文档A: 密集排名=1, 稀疏排名=5
RRF(A) = 1/(60+1) + 1/(60+5) = 0.0164 + 0.0154 = 0.0318

文档B: 密集排名=3, 稀疏排名=1
RRF(B) = 1/(60+3) + 1/(60+1) = 0.0159 + 0.0164 = 0.0323

结果:文档B排名更高(更好的综合相关性)

多阶段检索

两阶段管道

┌─────────────────────────────────────────────────────────┐
│ 阶段1: 召回(快速,高召回)                           │
│ • ANN搜索(HNSW, IVF)                                │
│ • 检索top-100候选                                     │
│ • 延迟: 10-50ms                                       │
└─────────────────────────────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│ 阶段2: 重排(慢速,高精度)                           │
│ • 交叉编码器或LLM重排                                 │
│ • 评分top-100 → 返回top-10                             │
│ • 延迟: 100-500ms                                     │
└─────────────────────────────────────────────────────────┘

重排选项

重排器 延迟 质量 成本
交叉编码器(本地) 中等 计算
Cohere重排 快速 API成本
基于LLM的重排 慢速 最高 高API成本
BGE重排器 快速 良好 计算

上下文组装

上下文窗口管理

上下文预算: 128K令牌
├── 系统提示: 500令牌(固定)
├── 对话历史: 4K令牌(滑动窗口)
├── 检索上下文: 8K令牌(动态)
└── 生成缓冲区: ~115K令牌(可用)

策略: 在预算内最大化检索上下文质量

上下文组装策略

策略 描述 何时使用
简单拼接 连接top-K分块 小上下文,简单Q&A
相关性排序 最相关优先 一般检索
时间顺序 时间排序 时间查询
分层 摘要 + 细节 长形式生成
交错 混合来源 多源查询

中间迷失问题

LLM注意力模式:
┌─────────────────────────────────────────────────────────┐
│ 开始          中间           结束                      │
│    ████              ░░░░             ████              │
│  高注意力      低注意力       高注意力                 │
└─────────────────────────────────────────────────────────┘

缓解:
1. 将最相关内容放在开始和结尾
2. 可能时使用较短上下文窗口
3. 使用分层摘要
4. 微调长上下文注意力

高级RAG模式

查询转换

原始查询: "告诉我关于这个项目"
                           │
         ┌─────────────────┼─────────────────┐
         ▼                 ▼                 ▼
    ┌─────────┐      ┌──────────┐     ┌──────────┐
    │  HyDE   │      │  查询扩展│     │ 子查询分解│
    │ (假设  │      │          │     │          │
    │  文档)  │      │          │     │          │
    └─────────┘      └──────────┘     └──────────┘
         │                 │                 │
         ▼                 ▼                 ▼
   假设答案          "项目、目标、      "项目范围是什么?"
   嵌入              时间线、交付物"     "交付物是什么?"

HyDE(假设文档嵌入)

查询: "光合作用如何工作?"
                │
                ▼
        ┌───────────────┐
        │ LLM生成假设   │
        │ 答案          │
        └───────────────┘
                │
                ▼
"光合作用是植物将阳光转化为能量的过程..."
                │
                ▼
        ┌───────────────┐
        │ 嵌入假设文档  │
        └───────────────┘
                │
                ▼
    使用假设嵌入搜索
    (更好匹配实际文档)

Self-RAG(带自反思的检索增强LM)

┌─────────────────────────────────────────────────────────┐
│ 1. 生成初始响应                                        │
│ 2. 决定:需要更多检索?(批判令牌)                    │
│    ├── 是 → 检索更多,重新生成                         │
│    └── 否 → 检查事实性(isRel, isSup令牌)             │
│ 3. 根据来源验证声明                                    │
│ 4. 如果需要,重新生成                                  │
│ 5. 返回验证响应                                        │
└─────────────────────────────────────────────────────────┘

代理式RAG

查询: "比较Q3跨区域收入"
                │
                ▼
        ┌───────────────┐
        │ 查询代理      │
        │ (计划步骤)  │
        └───────────────┘
                │
    ┌───────────┼───────────┐
    ▼           ▼           ▼
┌───────┐   ┌───────┐   ┌───────┐
│搜索   │   │搜索   │   │搜索   │
│ EMEA  │   │ APAC  │   │ AMER  │
│ 文档  │   │ 文档  │   │ 文档  │
└───────┘   └───────┘   └───────┘
    │           │           │
    └───────────┼───────────┘
                ▼
        ┌───────────────┐
        │  综合比较     │
        └───────────────┘

评估指标

检索指标

指标 描述 目标
Recall@K top-K中相关文档百分比 >80%
Precision@K top-K中相关百分比 >60%
MRR(平均互惠排名) 第一个相关排名的倒数 >0.5
NDCG 分级相关性排名 >0.7

端到端指标

指标 描述 目标
答案正确性 答案事实正确吗? >90%
忠实性 答案基于上下文吗? >95%
答案相关性 回答问题吗? >90%
上下文相关性 检索上下文相关吗? >80%

评估框架

┌─────────────────────────────────────────────────────────┐
│                RAG评估管道                              │
├─────────────────────────────────────────────────────────┤
│ 1. 查询集:代表性提问                                  │
│ 2. 真实答案:预期答案 + 源文档                         │
│ 3. 指标:                                               │
│    • 检索:Recall@K, MRR, NDCG                         │
│    • 生成:正确性、忠实性                              │
│ 4. A/B测试:比较配置                                   │
│ 5. 错误分析:识别失败模式                              │
└─────────────────────────────────────────────────────────┘

常见失败模式

失败模式 原因 缓解
检索缺失 查询-文档不匹配 混合搜索、查询扩展
错误分块 分块差 更好分割、重叠
幻觉 基础差 忠实性训练、引用
上下文丢失 长上下文问题 分层、摘要
数据陈旧 索引过时 增量更新、TTL

扩展考虑

索引扩展

规模 方法
<1M文档 单节点,精确搜索
1-10M文档 单节点,HNSW
10-100M文档 分布式,分片
>100M文档 分布式 + 激进过滤

延迟预算

典型RAG管道延迟:

查询嵌入:     10-50ms
向量搜索:     20-100ms
重排:        100-300ms
LLM生成:     500-2000ms
────────────────────────────
总计:        630-2450ms

目标p95: 交互使用<3秒

相关技能

  • llm-serving-patterns - LLM推理基础设施
  • vector-databases - 向量存储选择和优化
  • ml-system-design - 端到端ML管道设计
  • estimation-techniques - RAG系统容量规划

版本历史

  • v1.0.0 (2025-12-26): 初始发布 - RAG架构模式用于系统设计

最后更新

日期: 2025-12-26