Phase 1-3 讲的是 LangChain 的框架骨架(core、LangGraph、Agent)。Phase 4 讲 Agent 最常用的一类能力——RAG(检索增强生成):让 Agent 能查知识库再回答。
这一篇是 Phase 4 开篇,先给全景。后面 6 篇会逐段深入。
什么是 RAG
RAG = Retrieval-Augmented Generation,检索增强生成。一句话:模型回答前,先从知识库检索相关资料,把资料塞进 prompt,让模型基于资料回答。
为什么要这么做?因为模型的知识是训练时固化的,有截止日期、不知道你的私有数据。RAG 让模型能「临时查阅」最新或私有资料,再回答——就像开卷考试。
RAG 的五段流水线
搭一个 RAG,核心是一条五段流水线:
文档加载 → 文本切分 → 向量化 → 存储 → 检索
每一段都是 Phase 1 讲的 Runnable,最后 retriever 检索到的资料,塞进 prompt 交给模型。
逐段一句话:
| 段 | 干什么 | 关键问题 |
|---|---|---|
| 加载(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 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/记忆、生产化收束这条线更新。

