本文目录
  1. 一、今天的知识地图
  2. 二、为什么需要 RAG?
  3. 2.1 普通大模型的三个常见局限
  4. 2.2 RAG 的核心思想
  5. 2.3 RAG 没有修改模型参数
  6. 三、RAG 的标准流程
  7. 3.1 知识库准备阶段
  8. 3.2 用户问答阶段
  9. 3.3 完整数据流
  10. 四、为什么 RAG 项目常用 LangChain?
  11. 4.1 RAG 与 LangChain 的关系

RAG 基础原理与完整流程

适合零基础复习。本篇只整理今天已经学习的内容:RAG 基础、LangChain 的定位、Models、消息、多轮对话、invoke()、Prompt Template、Zero-shot,以及最基础的 Chain/LCEL。
学习边界:本文不讲 Few-shot 的实现代码,也不展开后续 RAG 模块。


一、今天的知识地图

大模型的局限
    ↓
为什么需要 RAG
    ↓
RAG 的标准流程
    ↓
为什么常用 LangChain 组织流程
    ↓
Models:LLM / Chat Model / Embedding Model
    ↓
Messages 与多轮对话
    ↓
Prompt 与 PromptTemplate
    ↓
Zero-shot
    ↓
prompt | llm → Chain(LCEL)

二、为什么需要 RAG?

2.1 普通大模型的三个常见局限

把普通大模型想象成一个正在“闭卷考试”的人。它很聪明,但可能遇到三个问题:

  1. 不了解私有知识:例如公司制度、内部文档、个人资料通常不在训练数据里。
  2. 知识可能过时:模型训练时掌握的知识存在时间边界。
  3. 可能产生幻觉:不知道答案时,模型仍可能生成看似合理但并不真实的内容。

例如,直接问模型:

我们公司的年假申请流程是什么?

模型没有看过公司的内部制度,无法可靠回答。

2.2 RAG 的核心思想

RAG 全称:

Retrieval-Augmented Generation,检索增强生成。

一句话理解:

先查资料,再让大模型根据查到的资料回答。

用户问题
   ↓
从知识库检索相关资料
   ↓
把“资料 + 问题”交给大模型
   ↓
大模型基于资料生成答案

RAG 相当于给大模型提供了一场“开卷考试”。检索到的资料是本次回答使用的参考材料。

2.3 RAG 没有修改模型参数

RAG 通常不是重新训练模型,也不是“优化模型参数”。它是在模型生成答案前,动态提供相关上下文。

正确表达:

把检索到的上下文和用户问题一起交给大模型,由大模型生成答案。


三、RAG 的标准流程

RAG 可以分成两个阶段:知识库准备阶段和问答阶段。

3.1 知识库准备阶段

原始文档(PDF / Word / TXT 等)
            ↓
        文档读取
            ↓
      文本清洗 / 处理
            ↓
       文本切块 Chunk
            ↓
    Embedding 文本向量化
            ↓
       存入向量数据库

为什么要切块?一份文档可能很长,既不适合整篇交给模型,也不利于精确检索。切成多个较小的 Chunk 后,可以找出与问题最相关的片段。

为什么要向量化?Embedding Model 会把文本转换成向量,使计算机能够比较文本之间的语义相似度。

3.2 用户问答阶段

用户提出问题
      ↓
问题 Embedding 向量化
      ↓
在向量数据库中进行语义相似度检索
      ↓
召回最相关的若干 Chunk
      ↓
把“相关 Chunk + 用户问题”填入 Prompt
      ↓
交给大模型生成答案
      ↓
返回结果

3.3 完整数据流

flowchart TD
    A[原始文档] --> B[文档读取]
    B --> C[清洗与处理]
    C --> D[文本切块 Chunk]
    D --> E[Embedding 向量化]
    E --> F[向量数据库]
    Q[用户问题] --> G[问题向量化]
    G --> F
    F --> H[相似度检索]
    H --> I[相关文本 Chunk]
    Q --> J[Prompt Template]
    I --> J
    J --> K[完整 Prompt]
    K --> L[LLM / Chat Model]
    L --> M[最终答案]

四、为什么 RAG 项目常用 LangChain?

一个完整 RAG 项目涉及很多环节:

Loader → Splitter → Embedding → Vector Store
       → Retriever → Prompt → Model → Output

如果不用框架,也完全可以自己调用 PDF 解析库、Embedding API、向量数据库 API 和大模型 API,再手动编写连接逻辑。但组件越多,代码越容易与具体厂商的接口耦合。

LangChain 的价值在于:

  • 为常见组件提供相对统一的抽象和调用方式;
  • 帮助组织不同组件之间的数据流;
  • 方便把多个步骤组合成完整工作流;
  • 降低更换模型、Embedding 或向量数据库时的耦合。

注意:“降低耦合”不等于所有组件都能无成本地一行替换。不同服务仍可能有自己的参数和特性。

4.1 RAG 与 LangChain 的关系

RAG:一种技术架构思想

LangChain:实现大模型应用的一种开发框架

RAG 并不依赖 LangChain:

RAG
├── 自己用 Python 实现
├── 使用 LangChain 实现
├── 使用 LlamaIndex 等其他框架实现
└── 使用其他技术组合实现

所以:

RAG ≠ LangChain。LangChain 可以帮助我们更方便地实现 RAG。