LangChain 核心组件与交互
LangChain 将大模型应用拆解为六大核心组件:Models(模型,统一调用接口)、Prompts(提示词模板)、Indexes(资料检索,支撑RAG)、Memory(对话记忆)、Chains(固定流程串联)和Agents(自主决策调用工具)。这些组件像团队角色各司其职,通过数据流动协作完成复杂任务,例如企业知识库问答中,Memory记录历史、Indexes检索文档、Prompts组装指令、Models生成答案。组合方式上,早期使用固定Chain类,现在更推荐LCEL管道式组合(用|符号串联组件,灵活插入自定义步骤)和LangGraph图编排(支持条件分支、循环、人工审批等复杂流程)。无论组合方式如何变化,六大组件的核心职责不变,变的只是拼接的灵活性和可编程性。
我们第一次接触大模型时,都是直接调用 API:发一段提示词,拿回一个结果。这很简单,但真实项目往往更复杂——需要查资料、记历史、用工具、多步推理。如果每次都从零写代码,会又乱又难维护。
LangChain 的出现,就是为了解决这个问题。它把大模型应用拆成一组核心组件,每个组件负责一件事,然后像搭乐高一样把它们拼起来。今天就用最通俗的语言,聊聊这些组件是什么、它们怎么配合工作。
一、六大核心组件:一个“智能助手团队”
你可以把 LangChain 想象成一个智能助手团队,每个组件都是团队里的一个角色。
1. Models(模型)——大脑
模型是整个应用的“大脑”,负责根据输入生成文字。无论是 openai、deepseek,还是本地开源模型,LangChain 都帮你统一了调用方式。你只需要告诉它“该思考了”,它就会给出答案。
2. Prompts(提示词)——指令卡
大脑很聪明,但需要清晰的指令。Prompts 就是给模型的“指令卡”。它可以是一个固定模板,比如:
你是客服助手,请根据以下资料回答用户问题:{资料} 用户问题:{问题}
每次使用时,把真实内容填进去,就能生成一条完整的指令。
3. Indexes(索引)——资料库
模型的知识是有限的,而且不知道你公司内部的文档。Indexes 就像一个“资料库管理员”,负责把 PDF、网页、数据库里的内容切碎、存好,当你提问时,快速找出最相关的片段。这就是常说的 RAG(检索增强生成)的核心。
4. Memory(记忆)——记事本
模型本身是无状态的,每次对话都是“失忆”的。Memory 就像一个“记事本”,帮你记住之前的对话、用户偏好、中间结果,让多轮对话成为可能。比如用户说“我上个月买的那款手机”,助手能记得是哪一款。
5. Chains(链)——固定流水线
很多时候,一个任务需要多个步骤按顺序完成:先检索资料,再填进提示词,再让模型生成答案。Chains 就是把多个组件串成一条“固定流水线”。你定义好步骤,它就会按部就班地执行。
6. Agents(代理)——自主决策的管家
有些任务不是固定的,模型需要自己判断下一步做什么:是查资料?是调用计算器?还是直接回答?Agents 就像一个“自主决策的管家”,它拿着一个工具箱(Tools),根据用户请求动态选择工具,循环执行直到完成任务。
二、组件如何交互:一个真实例子
假设我们要做一个企业知识库问答助手,用户问:“我们公司的年假政策是什么?”
各组件是这样配合的:
Memory 先翻看记事本:用户之前问过“出差报销”,现在问“年假”,可能是在了解员工福利。
Indexes 从公司制度文档中检索“年假政策”,找到相关段落。
Prompts 把检索到的内容、对话历史、用户问题拼成一条完整指令:
“你是公司内部助手。根据以下制度内容回答用户问题。 制度内容:…… 用户问题:我们公司的年假政策是什么?”
Models 收到指令,生成答案:“员工入职满一年后享有 5 天年假……”
Memory 更新记事本,记下这次问答,方便后续对话。
如果用户接着问:“那请假需要找谁审批?”这时单靠检索文档可能不够,可能需要调用 HR 系统查询。这时 Agents 就出场了:
Agent 让模型判断:这个问题需要查询 HR 系统。
模型选择“调用 HR 查询工具”。
工具返回结果后,模型再结合历史生成最终答案。
整个过程中,组件各司其职,数据在它们之间流动,像一条自动化的流水线。
三、传统组合 vs 现代组合:从“固定模板”到“乐高积木”
早期 LangChain 提供了很多现成的 Chain 类,比如 RetrievalQA,开箱即用,但如果你想在检索后加一个过滤步骤,或者根据条件走不同分支,就很麻烦。
现在,LangChain 提供了两种更灵活的组合方式:
1. LCEL:管道式组合
LCEL(LangChain Expression Language)用 | 符号把组件串起来,就像 Unix 管道一样:
chain = 检索器 | 组装提示词 | 模型 | 输出解析器
你可以随时插入自定义函数,比如在检索后加一个“过滤敏感词”的步骤。所有组件都实现了统一的 Runnable 接口,所以可以像乐高积木一样自由拼接。
2. LangGraph:图编排
对于更复杂的流程——比如 Agent 循环调用工具、多步骤推理、人工审批——LCEL 就不够用了。LangGraph 把应用画成一张流程图:
节点:每个处理步骤(调用模型、执行工具、检索等)
边:数据流和控制流,可以带条件
状态:在节点间传递的共享数据,还能保存和恢复
这样,你可以轻松实现“思考 → 调用工具 → 观察结果 → 再思考”的循环,甚至多 Agent 协作、暂停等待人工确认。
关键点:无论用哪种组合方式,六大组件的职责和它们之间的基本交互逻辑并没有变。Models 还是大脑,Prompts 还是指令卡,Indexes 还是资料库。变的只是“怎么把它们拼起来”的方式——从固定模板,变成了灵活管道和可编程流程图。