RAG标准流程

RAG = 模型 + 相关已拆分的文档片段 -》生成可靠回答
Step 1 索引
- 结构化、非结构化资料,经由人工精处理后,做成源知识库。
- word、ppt、pdf、图片等
- 能用行列表格标识的是结构化数据
- 人工处理异常值、重复值
- 文本提取&文本分块。
- 转化为纯字符串
- 把字符串分成文本区块chunk
- embedding词向量嵌入,等于给分块贴上特征标签
Step 2 检索
- 问题词向量化
- 给问题贴特征标签
- 向量库匹配,找标签最相似的chunk
Step 3 生成
- 结合原始问题和参考chunk,打包成Prompt交付LLM。
- 模型根据信息回答,而不是瞎猜。
经典LangChain

LangChain 的核心思想是:把“外部知识、记忆、提示词、模型”这些散件标准化成可组合的组件,再用 Chains/Agents 串起来跑通一个 LLM 应用。图上的主线就是一条典型 RAG + 对话的数据流。
组件
- Index(索引)—— 处理“各类外部文件”
图左上角:各类外部文件 → Index。Index 负责 RAG 的“检索侧”全流程:
- Load:DocumentLoaders 加载 PDF/网页/数据库等异构源
- Split:TextSplitter 把长文档切块(chunk)
- Embed:Embedding 模型把块向量化
- Store + Retrieve:存进 VectorStore,查询时由 Retriever 按相似度取回 top-k
面试关键词:loader → splitter → embedding → vector store → retriever 这条链。
- Prompts(提示词)—— 三路输入的汇聚点
图中它是核心枢纽,收三路输入:用户提问 + Index 检索到的上下文 + Memory 的历史对话。LangChain 里对应 PromptTemplate / ChatPromptTemplate,用变量占位符把这几路内容组装成最终 prompt。
prompt = ChatPromptTemplate.from_template(
"根据以下上下文回答问题:\n{context}\n\n历史:{history}\n\n问题:{question}"
)
它的价值是模板复用 + 动态组装,而不是把 prompt 硬编码在代码里。
- Memory(记忆)—— 和 Models 形成闭环
注意图里那条回流箭头:Models 的输出会写回 Memory,下一轮再注入 Prompts。这就是多轮对话的机制。常见形态:
- ConversationBufferMemory:原样存历史
- ConversationSummaryMemory:存摘要,省 token
- ConversationBufferWindowMemory:只留最近 N 轮
- Models(模型)—— 统一的 LLM 抽象层
LangChain 把模型调用封装成统一接口,换模型不改业务代码:
- LLM:纯文本进、文本出(补全式)
- ChatModel:消息列表进(system/user/assistant)、消息出(对话式,主流)
- Chains(链)—— 底层编排之一
图中横在下面的长条,意思是它贯穿编排上面的组件。Chain 把多个组件按顺序串联:检索 → 填模板 → 调模型 → 解析输出。现代写法是 LCEL(LangChain Expression Language),用 | 管道操作符:
chain = retriever | prompt | model | StrOutputParser()
chain.invoke("什么是RAG?")
链是静态的——流程固定,每步做什么提前定好。
- Agents(智能体)—— 底层编排之二,比 Chains 高阶
Agent 是动态的:由 LLM 自己决定下一步做什么。核心循环就是我记过的 ReAct(Thought → Action → Observation),模型看到用户请求后,自主选择调用哪个 Tool、调用几次、什么时候给出最终答案。适合流程无法预先确定的场景。
| Chains | Agents | |
|---|---|---|
| 流程 | 静态,预定义 | 动态,LLM 自主决策 |
| 决策者 | 开发者写死 | 模型运行时判断 |
| 可控性/成本 | 高可控、低开销 | 灵活但慢且贵 |
| 场景 | 流程固定的 RAG/问答 | 需要多工具、多步推理的复杂任务 |
总结
LangChain 六大核心组件:Models 统一封装 LLM/ChatModel 接口;Prompts 用模板组装用户问题、检索上下文和历史记忆;Index 负责 RAG 检索侧的 loader→splitter→embedding→vectorstore→retriever 流程;Memory 保存对话历史并与模型输出形成回写闭环;底下 Chains 用类似 LCEL 的管道把组件静态串联,Agents 则由 LLM 通过 ReAct 循环动态决策调用工具。整幅图的数据流就是一个典型 RAG 问答:外部文件经 Index 检索、用户问题和 Memory 汇入 Prompts、交给 Models 推理、结果输出并写回记忆。
补一句加分项:这套图是经典版架构,LangChain 0.1+ 之后 Memory 的角色弱化、多轮状态管理推荐用 LangGraph(基于图的状态机),编排统一走 LCEL。