← 返回 Day 120 正文

Day 120 · 图解

Day 120 — LangChain 与 RAG 图解

1. RAG 系统架构图

┌──────────────────────────────────────────────────────────────┐
│                       RAG 系统架构                            │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌─────────────┐     ┌──────────────┐     ┌──────────────┐  │
│  │   文档源     │     │   处理管道    │     │   向量存储    │  │
│  │             │     │              │     │              │  │
│  │  📄 PDF     │ ──→ │  Loader     │ ──→ │  Embedding   │  │
│  │  📝 Text    │     │  Splitter   │     │  FAISS/      │  │
│  │  🌐 Web     │     │              │     │  Chroma      │  │
│  │  📊 CSV     │     │              │     │              │  │
│  └─────────────┘     └──────────────┘     └──────┬───────┘  │
│                                                   │         │
│  ═══════════════ 离线索引阶段 ═════════════════════╪═══════  │
│  ═══════════════ 在线查询阶段 ═════════════════════╪═══════  │
│                                                   │         │
│  ┌─────────────┐     ┌──────────────┐     ┌──────▼───────┐  │
│  │   用户问题   │     │   检索引擎    │     │   检索结果    │  │
│  │             │ ──→ │  向量相似度   │ ──→ │   Top-K      │  │
│  │  "装饰器是   │     │  搜索        │     │   文档片段    │  │
│  │   什么?"   │     │              │     │              │  │
│  └─────────────┘     └──────────────┘     └──────┬───────┘  │
│                                                   │         │
│  ┌─────────────┐     ┌──────────────┐     ┌──────▼───────┐  │
│  │   最终回答   │ ←── │  LLM 生成    │ ←── │  Prompt 组装  │  │
│  │             │     │  GPT-4       │     │  上下文+问题  │  │
│  │  "装饰器是   │     │              │     │              │  │
│  │   Python中   │     │              │     │              │  │
│  │   的设计模式" │     │              │     │              │  │
│  └─────────────┘     └──────────────┘     └──────────────┘  │
│                                                              │
└──────────────────────────────────────────────────────────────┘

2. LangChain LCEL 链流程

输入                    组件1                  组件2                组件3
 │                       │                     │                    │
 ▼                       ▼                     ▼                    ▼
┌────────┐  ┌─────────────────┐  ┌────────────┐  ┌──────────────┐
│        │  │  Prompt Template │  │    LLM     │  │   Output     │
│ 用户   │→ │                 │→ │   GPT-4    │→ │   Parser     │→ 文本
│ 问题   │  │  {context}      │  │            │  │              │
│        │  │  {question}     │  │            │  │              │
└────────┘  └─────────────────┘  └────────────┘  └──────────────┘
    │              ▲
    │              │
    ▼              │
┌────────┐  ┌─────────────────┐
│Retriever│  │  format_docs    │
│  检索   │  │  格式化文档      │
└────────┘  └─────────────────┘
    ▲
    │
┌────────┐
│Vector  │
│Store   │
└────────┘

3. 向量检索原理

查询向量                    向量空间
    │                    (高维空间中的点)
    │                         │
    ▼                         ▼
┌─────────┐            ┌──────────────────┐
│ "装饰器" │            │                  │
│ embedding│──→         │    ● v1(装饰器)   │  ← 最近
│ [0.2,    │    距离     │                  │     距离
│  -0.4,   │←──计算──→ │  ● v3(迭代器)    │  ← 中等
│  0.6,    │            │                  │
│  ...]    │            │            ● v2  │  ← 远
└─────────┘            │           (猫)   │
                       └──────────────────┘
                       
距离度量: 余弦相似度 / 欧氏距离 / 内积

4. 文档分割策略

原始文档(1000 字符):
┌──────────────────────────────────────────────────────────────┐
│ Python 装饰器是一种设计模式...装饰器本质上是一个高阶函数...  │
│ Python 生成器使用 yield 关键字...生成器的优势在于惰性求值...  │
│ Python 上下文管理器通过 __enter__ 和 __right__ 方法...       │
└──────────────────────────────────────────────────────────────┘

chunk_size=300, chunk_overlap=50 分割后:

┌─────────────────────────┐
│ chunk 1: 装饰器相关      │
│ (300字符)                │
└──────────┬──────────────┘
           │ 重叠 50 字符
┌──────────▼──────────────┐
│ chunk 2: 生成器相关      │
│ (300字符)                │
└──────────┬──────────────┘
           │ 重叠 50 字符
┌──────────▼──────────────┐
│ chunk 3: 上下文管理器    │
│ (300字符)                │
└─────────────────────────┘