news 2026/4/15 21:58:00

LangChain 核心组件全解析:构建大模型应用的 “乐高积木”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain 核心组件全解析:构建大模型应用的 “乐高积木”

玄同 765

大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)

CSDN · 个人主页 | GitHub · Follow


关于作者

  • 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调
  • 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker
  • 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案

「让 AI 交互更智能,让技术落地更高效」
欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能!


在大模型应用开发中,你是否曾被这些问题困扰:

  • 如何让大模型调用外部工具(如数据库、API)?
  • 如何将大模型与自有知识库结合,实现精准问答?
  • 如何构建多轮对话系统,让模型记住上下文?
  • 如何将大模型能力封装为可复用的组件?

LangChain 作为大模型应用开发的 “瑞士军刀”,通过一系列模块化核心组件,让开发者可以像搭乐高积木一样快速构建复杂的大模型应用。本文将从底层原理出发,带你彻底搞懂 LangChain 的核心组件,以及如何用它们构建生产级大模型应用。


一、LangChain 的核心设计理念:模块化与可组合性

LangChain 的核心理念是将大模型应用拆解为独立组件,通过组合实现复杂功能。这些组件可以独立使用,也可以灵活组合,覆盖了大模型应用开发的全流程:

LangChain核心组件

模型层(Models)

数据连接层(Data Connection)

链(Chains)

代理(Agents)

记忆(Memory)

工具(Tools)

每个组件都有明确的职责,开发者可以根据需求选择合适的组件进行组合,大大降低了大模型应用的开发门槛。


二、核心组件 1:模型层(Models)—— 大模型的 “接口层”

提示:运行以下示例前,请确保已安装最新版核心包及插件:

pipinstall-U langchain langchain-openai langchain-community langchain-text-splitters faiss-cpu

模型层是 LangChain 与大模型交互的核心组件。在 LangChain 1.0+ 中,所有模型都继承自Runnable接口,支持统一的invoke调用。

1. 核心类型

(1)LLM(大语言模型)

处理纯文本输入输出。

fromlangchain_openaiimportOpenAI# 初始化OpenAI LLM (需要环境变量 OPENAI_API_KEY)# llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.7)# 使用 Mock LLM 演示(无需 API Key)fromlangchain_core.language_models.llmsimportLLMfromtypingimportOptional,List,AnyclassMockLLM(LLM):def_call(self,prompt:str,stop:Optional[List[str]]=None,**kwargs:Any)->str:returnf"这是关于{prompt[:10]}的技术博客内容..."@propertydef_llm_type(self)->str:return"mock"llm=MockLLM()# 推荐使用 invoke 方法response=llm.invoke("请写一篇关于LangChain的技术博客")print(response)
(2)ChatModel(对话模型)

专门处理对话场景,输入输出均为消息对象(Messages)。

fromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,SystemMessage# chat_model = ChatOpenAI(model="gpt-3.5-turbo")# 使用 Mock ChatModel 演示fromlangchain_core.language_models.chat_modelsimportBaseChatModelfromlangchain_core.outputsimportChatResult,ChatGenerationfromlangchain_core.messagesimportAIMessageclassMockChatModel(BaseChatModel):def_generate(self,messages,stop=None,**kwargs):returnChatResult(generations=[ChatGeneration(message=AIMessage(content="你好!我是 AI 技术博主。"))])@propertydef_llm_type(self):return"mock"chat_model=MockChatModel()# 多轮对话messages=[SystemMessage(content="你是一名专业的技术博客作者"),HumanMessage(content="请写一篇关于LangChain核心组件的技术博客")]response=chat_model.invoke(messages)print(response.content)
(3)EmbeddingModel(嵌入模型)

将文本转换为向量,用于语义检索。

fromlangchain_openaiimportOpenAIEmbeddings# embeddings = OpenAIEmbeddings()# 使用 Mock Embeddings 演示fromlangchain_core.embeddingsimportEmbeddingsclassMockEmbeddings(Embeddings):defembed_documents(self,texts:List[str])->List[List[float]]:return[[0.1]*1536for_intexts]defembed_query(self,text:str)->List[float]:return[0.1]*1536embeddings=MockEmbeddings()# 生成文本向量text="LangChain is a framework for building LLM applications"vector=embeddings.embed_query(text)print(f"向量维度:{len(vector)}")

2. 关键特性

  • 统一接口:不同大模型的接口差异被抽象为统一的 API,开发者无需为每个模型单独适配;
  • 参数配置:支持温度(temperature)、最大 Token 数(max_tokens)等参数的全局配置;
  • 异步支持:所有模型都支持异步调用,提升大模型应用的并发性能;
  • 模型缓存:支持缓存模型响应,避免重复调用相同请求,降低成本。

三、核心组件 2:数据连接层(Data Connection)—— 大模型的 “知识库”

数据连接层负责将外部数据(如文档、数据库、API 数据)与大模型结合,实现检索增强生成(RAG)

1. 核心组件

(1)Document Loaders(文档加载器)

将外部文档加载为 LangChain 的Document对象。目前这些加载器主要位于langchain-community包中。

fromlangchain_community.document_loadersimportPyPDFLoader# 加载PDF文档# loader = PyPDFLoader("langchain_whitepaper.pdf")# documents = loader.load()# print(f"加载的文档页数:{len(documents)}")
(2)Text Splitters(文本分割器)

将长文档分割为小片段。LangChain 现在拥有独立的langchain-text-splitters包。

fromlangchain_text_splittersimportRecursiveCharacterTextSplitter# 初始化文本分割器text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,# 每个片段的最大字符数chunk_overlap=200# 片段之间的重叠部分)# 模拟分割文档# split_documents = text_splitter.split_documents(documents)
(3)Vector Stores(向量数据库)与 Retrievers(检索器)

存储向量并支持语义检索。建议使用langchain-chromaFAISS

fromlangchain_community.vectorstoresimportFAISS# 模拟文档数据fromlangchain_core.documentsimportDocument docs=[Document(page_content="LangChain 是一个大模型应用开发框架")]# 使用前面定义的 embeddings (MockEmbeddings) 创建本地向量库vector_store=FAISS.from_documents(docs,embeddings)# 创建检索器retriever=vector_store.as_retriever(search_kwargs={"k":1})# 执行检索retrieved_docs=retriever.invoke("什么是 LangChain?")print(f"检索结果:{retrieved_docs[0].page_content}")


四、核心组件 3:链(Chains)与 LCEL —— 组件的 “流水线”

链(Chains)负责将多个组件组合成一个可执行的流水线。在 LangChain 1.0+ 中,推荐使用LangChain Expression Language (LCEL)来构建链,它比传统的Chain类更灵活、更易于调试。

1. 现代组合方式:LCEL

LCEL 允许你使用|运算符将 Prompt、模型和输出解析器连接起来。

fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParser# 创建 Prompt 模板prompt=ChatPromptTemplate.from_template("请写一篇关于 {topic} 的技术博客")# 构建 LCEL 链 (Prompt -> LLM -> OutputParser)chain=prompt|chat_model|StrOutputParser()# 执行链response=chain.invoke({"topic":"LangChain 1.0 架构"})print(response)

2. 传统链(Legacy Chains)

虽然官方推荐 LCEL,但传统的LLMChainRetrievalQA等在旧代码库中依然常见。

# 旧版导入方式try:fromlangchain.chainsimportLLMChainexceptImportError:print("请安装 langchain 包以使用旧版链")

3. 为什么选择 LCEL?

LCEL 不仅仅是一种语法糖,它为现代大模型应用提供了核心工程能力:

  • 流式处理 (Streaming):自动支持从模型到输出解析器的流式输出;
  • 并行执行 (Parallelism):使用RunnableParallel轻松实现并发调用;
  • 异步支持 (Async):所有 LCEL 链原生支持ainvoke
  • 中间步骤可视化:可以轻松追踪链中的每一个环节。

五、核心组件 4:记忆(Memory)—— 大模型的 “对话上下文”

记忆组件负责存储对话历史。在 1.0+ 架构中,推荐直接在 LCEL 链中管理消息历史,或者使用RunnableWithMessageHistory

1. 基础记忆:ConversationBufferMemory

这是最简单的记忆组件,存储完整的对话历史。

try:fromlangchain.memoryimportConversationBufferMemoryexceptImportError:print("请安装 langchain 包以使用旧版记忆组件")# 初始化记忆组件memory=ConversationBufferMemory()# 在传统对话链中使用# from langchain.chains import ConversationChain# conversation = ConversationChain(llm=llm, memory=memory)

2. 现代记忆管理方式

现代做法是使用ChatMemoryHistory配合RunnableWithMessageHistory,这样可以更好地控制状态持久化。

fromlangchain_community.chat_message_historiesimportChatMessageHistoryfromlangchain_core.runnables.historyimportRunnableWithMessageHistory# 初始化消息历史history=ChatMessageHistory()# 现代链配合历史记录(伪代码示例)# with_history = RunnableWithMessageHistory(chain, lambda session_id: history)


六、核心组件 5:代理(Agents)—— 大模型的 “决策中心”

代理(Agents)让大模型可以根据用户请求,自主决策调用哪些工具。

1. 现代 Agent 构建方式

LangChain 现在推荐使用create_react_agent或更强大的LangGraph。以下是一个标准的 ReAct Agent 构建流程:

fromlangchain.agentsimportcreate_react_agent,AgentExecutorfromlangchainimporthub# 1. 定义工具集fromlangchain_core.toolsimporttool@tooldefget_weather(city:str)->str:"""获取指定城市的实时天气"""returnf"{city}的天气是:晴,25度"tools=[get_weather]# 2. 获取 ReAct 提示词模板 (需要联网或手动定义)# prompt = hub.pull("hwchase17/react")# 这里我们模拟一个简单的 Prompt 模板fromlangchain_core.promptsimportPromptTemplate template="尽力回答以下问题。你可以使用以下工具:{tools}... 问题:{input} {agent_scratchpad}"prompt=PromptTemplate.from_template(template)# 3. 构建 Agent 运行器# agent = create_react_agent(chat_model, tools, prompt)# executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 4. 执行任务# response = executor.invoke({"input": "北京今天天气怎么样?"})

注意:对于更复杂的逻辑控制,推荐学习 LangGraph,它是目前构建生产级 AI Agent 的首选框架。


七、核心组件 6:工具(Tools)—— 大模型的 “手脚”

工具是大模型与外部系统交互的接口。在 1.0+ 中,推荐使用@tool装饰器。

fromlangchain_core.toolsimporttoolfrompydanticimportBaseModel,FieldclassSearchInput(BaseModel):query:str=Field(description="搜索关键词")@tool("search_tool",args_schema=SearchInput)defsearch(query:str)->str:"""在互联网上搜索信息"""returnf"搜索结果:{query}的相关信息..."

八、组件组合:构建生产级大模型应用 (RAG 实战)

通过组合 LangChain 的核心组件,我们可以快速构建复杂的生产级大模型应用。以下是一个典型的检索增强生成 (RAG)系统示例(使用 Mock 组件演示可运行流程):

fromlangchain_core.runnablesimportRunnablePassthroughfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplate# 1. 模拟检索器 (Retriever)classMockRetriever:definvoke(self,query:str):return"LangChain 的核心价值在于其模块化设计和强大的生态系统。"retriever=MockRetriever()# 2. 定义 Prompt 模板template="""基于以下内容回答问题: {context} 问题: {question} """prompt=ChatPromptTemplate.from_template(template)# 3. 构建 LCEL RAG 链# 使用前面定义的 chat_model (MockChatModel)rag_chain=({"context":retriever.invoke,"question":RunnablePassthrough()}|prompt|chat_model|StrOutputParser())# 4. 执行问答response=rag_chain.invoke("LangChain 的核心价值是什么?")print(f"RAG 回答:{response}")

九、总结:LangChain 的核心价值

LangChain 1.0+ 的核心价值在于标准化与工程化

  • 模型层:通过Runnable接口统一了所有组件的调用方式;
  • 数据连接层:标准化的 RAG 流程,极大降低了知识库构建难度;
  • LCEL:声明式的链式表达,让复杂的逻辑变得清晰且易于并行化;
  • 生态化:丰富的社区插件(Community)和合作伙伴集成(OpenAI, Anthropic 等)。

如果你想构建稳定、可扩展的大模型应用,掌握 LangChain 1.0+ 的模块化设计和 LCEL 是必经之路!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 14:27:33

敏捷咨询实战:如何让DevOps从理念到高效落地

“我们引入了先进的DevOps工具,为什么效率提升不明显?”、“开发与运维之间的墙似乎变薄了,但并未消失。”——这是许多企业在推行DevOps过程中遇到的真实困惑,也是敏捷咨询服务常常需要解决的核心问题。DevOps不仅仅是工具链的堆…

作者头像 李华
网站建设 2026/4/14 10:16:59

专著评职称加多少分?—专著加分影响因素分析

专著评职称加多少分?评职称的著作是怎么加分的?下面淘淘学术来回答作者的这个疑问。一、专著评职称加多少分学术专著是一项重要的学术成果,但是在评职称的时候具体加分多少,是有一些区别的。因为不同省份,不同类的单位…

作者头像 李华
网站建设 2026/4/12 8:29:38

SGM圣邦微 SGM2036S-1.1XXDH4G/TR DFN-4 线性稳压器(LDO)

特性 工作输入电压范围:1.6V至5.5V固定输出电压:0.8V、0.9V、1.0V、1.05V、1.1V、1.2V、1.3V、1.35V、1.5V、1.8V、1.85V、2.1V、2.2V、2.3V、2.5V、2.6V、2.7V、2.8V、2.85V、2.9V、3.0V、3.1V、3.3V、3.6V、4.2V、4.4V和5.0V输出电压可从0.8V调节至5.…

作者头像 李华
网站建设 2026/4/4 9:36:54

BMI325,低功耗特性、快速启动和硬件同步的传感器

型号介绍 今天我要向大家介绍的是 Bosch 的一款放大器——BMI325。 该芯片提供了多种数字接口(SPI、IC、I3C)和独立可编程 I/O 引脚,支持高级功能中断配置,并内置智能功能引擎,支持计步器、步检测、倾斜检测、方…

作者头像 李华