Phase 1-3 讲的是 LangChain 的框架骨架(core、LangGraph、Agent)。Phase 4 讲 Agent 最常用的一类能力——RAG(检索增强生成):让 Agent 能查知识库再回答。

这一篇是 Phase 4 开篇,先给全景。后面 6 篇会逐段深入。

什么是 RAG

RAG = Retrieval-Augmented Generation,检索增强生成。一句话:模型回答前,先从知识库检索相关资料,把资料塞进 prompt,让模型基于资料回答

为什么要这么做?因为模型的知识是训练时固化的,有截止日期、不知道你的私有数据。RAG 让模型能「临时查阅」最新或私有资料,再回答——就像开卷考试。

RAG:回答前先查资料

RAG 的五段流水线

搭一个 RAG,核心是一条五段流水线:

文档加载 → 文本切分 → 向量化 → 存储 → 检索

每一段都是 Phase 1 讲的 Runnable,最后 retriever 检索到的资料,塞进 prompt 交给模型。

RAG 五段流水线全景

逐段一句话:

干什么 关键问题
加载(Loaders) 把 PDF/网页/数据库等原始内容读进来 格式五花八门,怎么读干净
切分(Splitters) 把长文档切成小块 切多大切不好都会影响检索
向量化(Embeddings) 把文本块转成向量 选什么模型,质量差异大
存储(VectorStores) 把向量存起来,支持相似搜索 选什么库,规模差异大
检索(Retrievers) 给查询,返回最相关的几块 怎么才算「相关」,策略很多

这五段,后面每段单独一篇(26-30)。这一篇先让你有全景。

建库 vs 查询:两个阶段

理解 RAG 要分清两个阶段:

建库阶段(离线,做一次):把文档加载、切分、向量化、存进向量库。这是一次性的准备工作,建好后可反复用。

建库阶段

查询阶段(在线,每次问都做):用户问问题 → 把问题向量化 → 在库里检索相关块 → 把块塞进 prompt → 模型回答。

查询阶段

两阶段共用「向量化」和「向量库」——建库时往里存,查询时从里查。这也是为什么选 embedding 模型和向量库要慎重:换一次,整个库要重建。

整条链用 LCEL 串起来

RAG 的查询阶段,本质是一条 LCEL 链(Phase 1 讲的):

# retriever 检索 → 拼进 prompt → 模型生成
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
    | parser
)

retriever 是 Runnable,prompt 是 Runnable,model 是 Runnable——所以整条 RAG 链自然继承流式、批处理、追踪(第 4 篇讲的 LCEL 红利)。这就是为什么 Phase 1 要先讲 Runnable 和 LCEL——RAG 是它们最典型的应用。

RAG 链是 LCEL 链

固定 RAG vs Agentic RAG

RAG 有两种用法,后面会展开(第 31 篇):

  • 固定 RAG:每次都「检索→生成」,流程写死。简单可控,适合明确的问答场景
  • Agentic RAG:让 Agent 自己决定「要不要检索、检索什么」。更灵活,适合复杂场景

这一篇和接下来几篇讲的是固定 RAG 的基础。第 31 篇会讲怎么把它升级成 Agentic RAG。

收束:五段链路,逐段深入

这一篇给了 RAG 全景:

  • RAG = 回答前先查资料,解决模型知识固化问题
  • 五段流水线:加载→切分→向量化→存储→检索
  • 分建库(离线做一次)和查询(在线每次做)两阶段
  • 查询阶段是 LCEL 链,继承所有 Runnable 能力
  • 有固定 RAG 和 Agentic RAG 两种用法

下一篇从第一段开始——Document Loaders:怎么把 PDF、网页、数据库这些原始内容干净地读进来。


关于十三Tech

我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。

如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

十三Tech公众号二维码