LangChain是一个强大的开源LLM应用开发框架本文深入解析了其四大核心概念Model I/O与LLM交互、Chain串联组件的工作流、Memory对话状态管理和LCEL声明式组件组合语法。文章通过实例展示了如何使用这些概念构建自动化工作流并介绍了2026年的新特性及进阶学习路径帮助读者全面掌握LangChain轻松入门大模型开发。一、引言LangChain 是由 Harrison Chase 于2022年10月发起的开源LLM应用开发框架比ChatGPT问世还要早一个月。经过近三年的发展LangChain已从单一开源包成长为覆盖开发、调试、部署全流程的完整生态系统。截至2026年LangChain在GitHub上已获得超过90,000 Stars每月数百万次下载成为企业级LLM应用开发的标准基础设施。本文将深入解析LangChain的四大核心概念Model I/O、Chain、Memory、LCEL帮助你建立完整的知识体系。二、整体架构概览2.1 分层架构设计LangChain采用分层架构不同层级各司其职又可协同工作LangChain生态应用层langgraphAgent编排、状态管理、工作流组件层langchainChains、Agents、Retrieval集成层langchain-community第三方模型、工具、向量库核心层langchain-core基础抽象、LCEL、Runnable接口•langchain-core提供基础抽象与LCEL是组件协同的核心•langchain-community第三方集成模块覆盖Model I/O、Retrieval、Tool等•langchain包含Chains、Agents、Retrieval等核心业务组件•langgraph编排多个节点负责整个工作流的调度与状态跳转2.2 核心组件关系用户输入Prompt TemplatesLLMOutput Parsers最终输出MemoryChainTools三、Model I/O与LLM的沟通桥梁Model I/O是应用与LLM交互的核心模块类似于JDBC与数据库的关系。其核心价值在于解耦应用逻辑与底层模型实现让你可以自由切换不同提供商OpenAI、Anthropic、Google等而不改变业务代码。3.1 三步工作流程Model I/O的工作流程分为三个关键步骤Parse 输出解析Predict 模型调用Format 输入格式化Prompt TemplatesChat ModelsOutput Parsers3.2 Prompt TemplatesPrompt Templates 用于结构化提示词支持变量替换和复用from langchain_core.prompts import ChatPromptTemplate# 方式一from_messages推荐prompt ChatPromptTemplate.from_messages([ (system, 你是一个{role}专门帮助用户解决{topic}问题), (human, 我的问题是{question})])# 方式二from_template传统方式prompt ChatPromptTemplate.from_template( 你是{role}请用{style}风格回答以下问题{question})# 格式化输入formatted_prompt prompt.format( role技术顾问, topic编程, questionPython如何处理异常, style简洁专业)print(formatted_prompt)输出System: 你是一个技术顾问专门帮助用户解决编程问题Human: 我的问题是Python如何处理异常3.3 Chat ModelsLangChain提供统一的模型接口支持多种提供商from langchain_openai import ChatOpenAIfrom langchain_anthropic import ChatAnthropicfrom langchain_google_genai import ChatGoogleGenerativeAI# OpenAIopenai_llm ChatOpenAI( modelgpt-4o, temperature0.7, streamingTrue # 启用流式输出)# Anthropicclaude_llm ChatAnthropic( modelclaude-3-5-sonnet-20241022, temperature0.7)# Google Geminigemini_llm ChatGoogleGenerativeAI( modelgemini-2.0-flash-exp, temperature0.7)3.4 Output ParsersOutput Parsers 将原始输出转换为结构化数据from langchain_core.output_parsers import StrOutputParserfrom langchain_core.output_parsers import JsonOutputParserfrom langchain.output_parsers import PydanticOutputParserfrom pydantic import BaseModel# 字符串解析器最常用str_parser StrOutputParser()# JSON解析器json_parser JsonOutputParser()# Pydantic解析器推荐用于结构化输出class Answer(BaseModel): result: str confidence: float sources: list[str]pydantic_parser PydanticOutputParser(pydantic_objectAnswer)# 使用示例response llm.invoke(What is 22?)parsed str_parser.invoke(response)print(parsed) # 23.5 完整调用示例将三个组件串联成完整流程from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser# 初始化模型llm ChatOpenAI(modelgpt-4o-mini, temperature0)# 创建Prompt模板prompt ChatPromptTemplate.from_template( 用一句话解释{concept}用中文回答)# 创建输出解析器parser StrOutputParser()# 方式一传统方式手动调用formatted_prompt prompt.format(conceptLLM)response llm.invoke(formatted_prompt)result parser.invoke(response)print(result)# 方式二LCEL管道方式推荐chain prompt | llm | parserresult chain.invoke({concept: LLM})print(result)四、Chains串联组件的工作流Chains链用于将多个组件串联成自动化工作流实现步骤化任务处理。4.1 LLMChain最基本的链用于将Prompt模板、LLM、输出解析器组合from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain.chains import LLMChainllm ChatOpenAI(modelgpt-4o-mini)prompt ChatPromptTemplate.from_template( 帮我写一首关于{topic}的诗)chain LLMChain(llmllm, promptprompt)result chain.run(topic春天)print(result)4.2 Sequential Chain顺序执行多个链from langchain.chains import SequentialChainfrom langchain.chains import LLMChainfrom langchain_core.prompts import ChatPromptTemplate# 链1生成标题title_chain LLMChain( llmllm, promptChatPromptTemplate.from_template(为以下内容生成一个标题{content}), output_keytitle)# 链2生成摘要summary_chain LLMChain( llmllm, promptChatPromptTemplate.from_template(用50字概括以下内容{content}), output_keysummary)# 组合顺序链sequential_chain SequentialChain( chains[title_chain, summary_chain], input_variables[content], output_variables[title, summary])result sequential_chain.invoke({content: Python是一门易学难精的编程语言...})print(result)4.3 传统方式 vs LCEL方式对比特性传统方式 (LLMChain)LCEL方式语法面向对象方法调用管道运算符 灵活性较低固定模式高可自由组合并行支持需额外处理原生支持流式输出需额外配置原生支持异步支持需异步封装原生async/await五、LCEL语法LangChain Expression LanguageLCEL是LangChain最强大的特性之一它将所有组件统一为Runnable接口通过管道运算符实现声明式组合。5.1 Runnable接口LangChain v1.x中所有组件都实现了Runnable接口from langchain_core.runnables import Runnable# Runnable接口的核心方法class Runnable: def invoke(self, input, configNone): 同步调用 pass async def ainvoke(self, input, configNone): 异步调用 pass def stream(self, input, configNone): 流式输出 pass def batch(self, inputs, configNone): 批量处理 pass5.2 管道运算符|运算符将前一个组件的输出作为下一个组件的输入# 基本语法chain component_a | component_b | component_c# 等价于result component_c.invoke(component_b.invoke(component_a.invoke(input)))5.3 完整示例对比传统方式from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserllm ChatOpenAI(modelgpt-4o-mini)prompt ChatPromptTemplate.from_template(用中文介绍{topic})parser StrOutputParser()# 手动串联formatted prompt.format(topic人工智能)response llm.invoke(formatted)result parser.invoke(response)print(result)LCEL方式# 一行搞定chain prompt | llm | parserresult chain.invoke({topic: 人工智能})print(result)5.4 并行与分支LCEL支持并行处理和条件分支from langchain_core.runnables import RunnableParallel, RunnableBranch# 并行执行多个分支parallel_chain RunnableParallel( chinese prompt | llm | parser, english (prompt | llm | parser).bind(languageen), code code_prompt | llm | parser)# 条件分支branch_chain RunnableBranch( (lambda x: x.get(type) code, code_chain), (lambda x: x.get(type) data, data_chain), default_chain # 默认链)5.5 流式输出LCEL原生支持流式输出chain prompt | llm | parser# 流式输出一个字一个字显示for chunk in chain.stream({topic: 量子计算}): print(chunk, end, flushTrue)5.6 LCEL的优势优势说明简洁性用管道运算符替代嵌套函数调用可组合性组件可自由组合易于扩展原生支持并行、流式、异步开箱即用可观测性易于调试和监控性能官方称并行处理效率提升30%-50%六、Memory对话状态的守护者Memory内存用于在对话过程中维护状态解决LLM上下文窗口有限的问题。6.1 短期记忆 vs 长期记忆Memory 分类长期记忆跨会话持久化·知识积累VectorStoreRetrieverMemory短期记忆单次会话·上下文保持BufferMemoryBufferWindowMemorySummaryMemory6.2 ConversationBufferMemory最简单的内存保存完整对话历史from langchain.memory import ConversationBufferMemoryfrom langchain.chains import LLMChainfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatellm ChatOpenAI(modelgpt-4o-mini)# 创建带记忆的链memory ConversationBufferMemory( memory_keyhistory, return_messagesTrue # 返回消息对象列表)prompt ChatPromptTemplate.from_template( 基于以下对话历史回答问题历史{history}问题{question})chain LLMChain(llmllm, promptprompt, memorymemory)# 多轮对话print(chain.invoke({question: 我叫张三}))print(chain.invoke({question: 我叫什么名字}))6.3 ConversationBufferWindowMemory限制保存最近N轮对话避免历史过长from langchain.memory import ConversationBufferWindowMemorymemory ConversationBufferWindowMemory( k3, # 只保留最近3轮对话 memory_keychat_history, return_messagesTrue)6.4 ConversationSummaryMemory自动总结对话要点适合长对话from langchain.memory import ConversationSummaryMemorymemory ConversationSummaryMemory( llmllm, # 用于生成摘要的LLM memory_keysummary, return_messagesTrue)6.5 VectorStoreRetrieverMemory基于向量检索的语义记忆VectorStoreRetrieverMemory是LangChain提供的长期记忆组件它将对话内容存储在向量数据库中通过语义相似性检索来回忆相关信息。与短期记忆不同它不显式跟踪对话顺序而是根据语义相关性动态检索最显著的记忆片段。6.5.1 核心特点特性说明存储方式向量数据库FAISS、Chroma、Pinecone等检索方式语义相似性搜索而非时间顺序适用场景跨会话记忆、语义检索、长周期知识积累优势支持海量记忆、按语义检索、不受token限制6.5.2 工作原理检索记忆查询嵌入模型向量相似度搜索返回Top-K结果保存记忆输入嵌入模型向量存储6.5.3 初始化向量存储方式一FAISS本地向量库import faissfrom langchain.docstore import InMemoryDocstorefrom langchain_community.vectorstores import FAISSfrom langchain_openai import OpenAIEmbeddingsfrom langchain.memory import VectorStoreRetrieverMemoryfrom langchain.chains import ConversationChainfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplate# 初始化嵌入模型和LLMembedding OpenAIEmbeddings()llm ChatOpenAI(modelgpt-4o-mini)# 创建FAISS向量存储embedding_size 1536 # OpenAIEmbeddings维度index faiss.IndexFlatL2(embedding_size)vectorstore FAISS(index, embedding, InMemoryDocStore(), {})# 创建retrieverk3表示返回最相关的3条记忆retriever vectorstore.as_retriever(search_kwargs{k: 3})# 创建向量记忆memory VectorStoreRetrieverMemory( retrieverretriever, memory_keychat_history)# 保存一些对话记忆memory.save_context( {input: 我最喜欢的食物是披萨}, {output: 好的我记住了 你喜欢披萨})memory.save_context( {input: 我喜欢在周末去跑步}, {output: 运动是个很好的习惯})memory.save_context( {input: 我最近在学习Python编程}, {output: Python是一门很实用的语言继续加油})# 检索相关记忆print(memory.load_memory_variables({prompt: 我应该吃什么}))输出{chat_history: input: 我最喜欢的食物是披萨\noutput: 好的我记住了...}方式二Chroma本地向量库from langchain_community.vectorstores import Chromafrom langchain.embeddings import OpenAIEmbeddings# 创建Chroma向量存储vectorstore Chroma.from_documents( documents[], # 初始为空 embeddingOpenAIEmbeddings())# 创建memorymemory VectorStoreRetrieverMemory( retrievervectorstore.as_retriever(search_kwargs{k: 3}), memory_keyhistory)方式三Pinecone云端向量数据库from langchain_pinecone import PineconeVectorStorefrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.memory import VectorStoreRetrieverMemory# 连接Pineconevectorstore PineconeVectorStore.from_params( index_namemy-index, embeddingOpenAIEmbeddings(), namespacememory)memory VectorStoreRetrieverMemory( retrievervectorstore.as_retriever(search_kwargs{k: 5}), memory_keylong_term_memory)6.5.4 在ConversationChain中使用将向量记忆与对话链结合# 创建对话链prompt ChatPromptTemplate.from_template(基于以下记忆回答用户问题。如果没有相关信息请如实说明。记忆{chat_history}问题{input})conversation ConversationChain( llmllm, memorymemory, promptprompt, verboseTrue)# 第一次对话response1 conversation.invoke({input: 我的爱好是什么})print(response1)# 第二次对话跨会话response2 conversation.invoke({input: 我应该学习什么编程语言})print(response2)6.5.5 高级配置检索策略相似度搜索默认retriever vectorstore.as_retriever( search_typesimilarity, # 默认 search_kwargs{k: 3})最大边际相关性MMR- 更具多样性retriever vectorstore.as_retriever( search_typemmr, # 避免返回相似度过高的结果 search_kwargs{k: 5, fetch_k: 20})带分数阈值的检索retriever vectorstore.as_retriever( search_kwargs{k: 5, score_threshold: 0.7})6.5.6 使用场景与注意事项适用场景不适用场景跨会话持久化记忆需要严格时间顺序的场景基于语义而非关键词的检索短对话、简单上下文海量历史信息存储实时性要求极高的场景个性化用户画像构建隐私敏感的数据注意事项k值选择k越大检索越多但可能引入噪声k越小可能遗漏重要信息嵌入模型选择与场景匹配的嵌入模型中文推荐text-embedding-3-small或中文专用模型存储成本云端向量数据库有存储费用本地FAISS/Chroma免费但占用磁盘定期清理长期使用后需要清理无效记忆避免检索质量下降6.6 LangGraph中的持久化LangGraph提供检查点机制实现状态持久化from langgraph.checkpoint.memory import MemorySaverfrom langgraph.graph import StateGraph, START# 创建带持久化的图checkpointer MemorySaver()graph StateGraph(GraphState)graph.add_node(process, process_node)graph.add_edge(START, process)graph.compile(checkpointercheckpointer)# 线程ID用于恢复状态config {configurable: {thread_id: user_123}}result graph.invoke({input: hello}, config)# 恢复状态继续执行result graph.invoke({input: continue}, config)6.7 LangGraph 执行流程LangGraph 的执行流程清晰简洁核心围绕状态State、节点Node、**边Edge**三个概念展开LangGraph执行流程State 状态Node 节点Edge 边循环执行直到完成核心概念概念说明关键函数State图的共享状态可以是dict或Pydantic模型StateGraph(GraphState)Node执行逻辑的函数接收state并返回更新graph.add_node(name, func)Edge定义节点间的流转关系graph.add_edge()/graph.add_conditional_edges()compile将图编译为可执行的appgraph.compile()最小示例from langgraph.graph import StateGraph, START, END# 1. 定义状态类型class GraphState(TypedDict): input: str result: str# 2. 定义节点函数def node_a(state: GraphState) - GraphState: return {result: f处理: {state[input]}}def node_b(state: GraphState) - GraphState: return {result: state[result] 节点B}# 3. 构建图graph StateGraph(GraphState)graph.add_node(A, node_a)graph.add_node(B, node_b)graph.add_edge(START, A) # 起点 → Agraph.add_edge(A, B) # A → Bgraph.add_edge(B, END) # B → 终点# 4. 编译并执行app graph.compile()result app.invoke({input: hello})print(result) # {input: hello, result: 处理: hello 节点B}执行流程用户调用app.invoke(input)传入初始状态图从 START 节点开始按照边的定义依次执行每个节点接收当前state处理后返回更新后的state执行到 END 节点或无出边时结束返回最终状态作为结果与Chain相比LangGraph适合需要多步骤状态传递、条件分支、人机协作的复杂场景是构建AI Agent的核心框架。七、总结与进阶路径7.1 核心概念回顾概念作用关键类Model I/O与LLM交互的标准化接口ChatOpenAI, PromptTemplate, OutputParserChain串联组件的工作流LLMChain, SequentialChainLCEL声明式组件组合语法管道运算符 Memory对话状态管理BufferMemory, VectorStoreMemory7.2 2026年新特性LCEL全面取代旧语法v1.x推荐全部使用LCELLangGraph整合复杂工作流优先使用LangGraphMCP协议支持标准化工具和数据接入LangSmith监控生产环境必备7.3 进阶学习路径LangChain基础LCEL深入 RAG实战LangGraph工作流Agent开发 多Agent系统如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。大模型入门到实战全套学习大礼包1、大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通2、大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。3、AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。4、大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。5、大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。适用人群第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】