Day01_LangChain初体验

RAG标准流程

RAG = 模型 + 相关已拆分的文档片段 -》生成可靠回答

Step 1 索引

  1. 结构化、非结构化资料,经由人工精处理后,做成源知识库。
    1. word、ppt、pdf、图片等
    2. 能用行列表格标识的是结构化数据
    3. 人工处理异常值、重复值
  2. 文本提取&文本分块。
    1. 转化为纯字符串
    2. 把字符串分成文本区块chunk
    3. embedding词向量嵌入,等于给分块贴上特征标签

Step 2 检索

  1. 问题词向量化
    1. 给问题贴特征标签
  2. 向量库匹配,找标签最相似的chunk

Step 3 生成

  1. 结合原始问题和参考chunk,打包成Prompt交付LLM。
  2. 模型根据信息回答,而不是瞎猜。

经典LangChain

LangChain 的核心思想是:把“外部知识、记忆、提示词、模型”这些散件标准化成可组合的组件,再用 Chains/Agents 串起来跑通一个 LLM 应用。图上的主线就是一条典型 RAG + 对话的数据流。

组件

  1. Index(索引)—— 处理“各类外部文件”

图左上角:各类外部文件 → Index。Index 负责 RAG 的“检索侧”全流程:

  • Load:DocumentLoaders 加载 PDF/网页/数据库等异构源
  • Split:TextSplitter 把长文档切块(chunk)
  • Embed:Embedding 模型把块向量化
  • Store + Retrieve:存进 VectorStore,查询时由 Retriever 按相似度取回 top-k

面试关键词:loader → splitter → embedding → vector store → retriever 这条链。

  1. Prompts(提示词)—— 三路输入的汇聚点

图中它是核心枢纽,收三路输入:用户提问 + Index 检索到的上下文 + Memory 的历史对话。LangChain 里对应 PromptTemplate / ChatPromptTemplate,用变量占位符把这几路内容组装成最终 prompt。

prompt = ChatPromptTemplate.from_template(
  "根据以下上下文回答问题:\n{context}\n\n历史:{history}\n\n问题:{question}"
)

它的价值是模板复用 + 动态组装,而不是把 prompt 硬编码在代码里。

  1. 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?")

链是静态的——流程固定,每步做什么提前定好。

  1. Agents(智能体)—— 底层编排之二,比 Chains 高阶

Agent 是动态的:由 LLM 自己决定下一步做什么。核心循环就是我记过的 ReAct(Thought → Action → Observation),模型看到用户请求后,自主选择调用哪个 Tool、调用几次、什么时候给出最终答案。适合流程无法预先确定的场景。

ChainsAgents
流程静态,预定义动态,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。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇