在大模型应用开发的浪潮中,很多开发者都会遇到一个共性难题:单独调用LLM(大语言模型)只能实现简单的文本生成,无法对接外部数据、无法调用工具,更无法完成多步骤的复杂任务。而LangChain的出现,正是为了解决这一痛点——它不是一款替代LLM的工具,而是一个“连接大语言模型与真实世界”的开源框架,能让开发者像搭积木一样,快速构建从简单对话机器人到复杂智能代理的各类LLM应用。
本文将从LangChain的核心认知、核心组件、实战案例、框架对比、生态体系五个维度,进行全面且详细的解析,既适合CSDN上追求技术深度的开发者,也适合微信公众号上想快速入门的技术爱好者,所有代码可直接复制运行,助力大家快速上手LangChain。

一、LangChain核心认知:它到底能解决什么问题?
1.1 什么是LangChain?
LangChain是2022年由Harrison Chase推出的开源开发框架,核心定位是“连接LLM与外部数据、工具”,为LLM应用开发提供标准化的组件和流程编排能力,降低智能应用的开发门槛。它支持Python和JavaScript/TypeScript双语言生态,其中Python版本功能更完善、社区更活跃,是当前主流的开发选择。
简单来说,LLM是“大脑”,而LangChain是“神经网络和手脚”——它让LLM能“记住”对话历史、“读取”外部文档、“使用”各类工具(如搜索引擎、数据库),从而完成更复杂的任务。
1.2 LangChain解决的3大核心痛点
单独使用LLM时,我们会面临三个难以解决的问题,而LangChain恰好针对性地给出了解决方案:
-
上下文窗口有限:LLM无法处理超长文本(如几百页的PDF),LangChain通过文本分割、向量检索等组件,让LLM能高效处理长文本数据;
-
无法访问外部动态数据:LLM的训练数据有时间限制(如GPT-4训练到2023年),无法获取实时新闻、企业内部文档等动态数据,LangChain通过文档加载器、检索器等组件,实现外部数据与LLM的无缝对接;
-
缺乏工具交互能力:LLM只能生成文本,无法调用搜索引擎、计算器、数据库等工具,LangChain通过工具(Tools)和代理(Agents)组件,让LLM能自主决策、调用工具完成复杂任务。
1.3 LangChain的核心优势
相比其他LLM应用框架,LangChain的核心优势集中在“模块化、可扩展性、全生态”三个方面,具体如下:
-
外部数据无缝集成:提供丰富的文档加载器,支持PDF、Word、网页、数据库等200+数据源的加载与处理,轻松实现“检索增强生成(RAG)”,让LLM基于专属数据生成回答;
-
强大的工具调用能力:内置数十种常用工具(搜索引擎、计算器、代码执行器等),支持自定义工具扩展,通过代理组件让LLM自主决策工具调用逻辑;
-
灵活的记忆机制:提供多种记忆组件,实现对话历史的存储、管理与复用,让应用具备多轮对话上下文理解能力;
-
跨LLM兼容性:支持对接OpenAI、Anthropic、Google Gemini、开源LLM(Llama 2、ChatGLM、Qwen)等主流模型,可灵活切换底层模型,降低对单一供应商的依赖;
-
完善的生态体系:集成向量数据库、Web框架、工作流工具等各类生态组件,提供LangSmith(调试)、LangServe(部署)等配套工具,覆盖从原型开发到生产部署的全流程。
二、LangChain核心组件详解:像搭积木一样构建应用
LangChain的核心架构围绕“组件(Components)”和“链(Chains)”展开,整体分为“基础组件层-链层-应用层”三层结构,核心设计思想是“组合优于继承”。下面我们逐一解析最常用的6大核心组件,每个组件都搭配可运行的代码示例,方便大家实操。
2.1 提示词模板(Prompt Templates):让提示词更高效、更规范
提示词是LLM生成符合预期结果的关键,而提示词模板是LangChain中用于动态生成提示词的组件。它允许开发者定义固定的提示词结构,通过传入参数动态填充内容,避免重复编写相似提示词,同时支持格式校验、多轮对话提示词管理等功能。
代码示例1:基础提示词模板
from langchain.prompts import PromptTemplate
# 定义模板:包含2个参数(product-产品名,audience-目标人群)
prompt_template = PromptTemplate(
input_variables=["product", "audience"],
template="请为{product}撰写一句面向{audience}的宣传语,要求简洁有力、突出产品核心优势。"
)
# 动态填充参数生成提示词
prompt = prompt_template.format(
product="智能降噪耳机",
audience="职场通勤人群"
)
# 调用LLM生成结果(需提前安装openai库并配置API密钥)
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.8)
response = llm.invoke(prompt)
print("生成的宣传语:", response.content)
代码示例2:多轮对话模板(ChatPromptTemplate)
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
# 1. 系统提示:设定LLM的角色和行为准则
system_prompt = SystemMessagePromptTemplate.from_template(
"你是一名专业的产品文案顾问,擅长结合产品特性和目标人群痛点撰写宣传语。"
)
# 2. 人类提示:接收用户输入的动态参数
human_prompt = HumanMessagePromptTemplate.from_template(
"产品:{product},核心优势:{advantage},目标人群:{audience},请撰写3句宣传语。"
)
# 3. 组合为对话模板
chat_prompt_template = ChatPromptTemplate.from_messages([system_prompt, human_prompt])
# 4. 填充参数并生成提示词
prompt = chat_prompt_template.format_prompt(
product="便携式充电宝",
advantage="20000mAh容量、双向快充、轻薄便携",
audience="大学生群体"
).to_messages()
# 5. 调用LLM生成结果
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
response = llm.invoke(prompt)
print("生成的宣传语:", response.content)
2.2 记忆(Memory):让LLM记住对话历史
Memory组件用于管理对话历史的状态,让LLM能“记住”之前的对话内容,实现多轮对话的上下文理解。LangChain提供多种记忆类型,包括简单的对话缓冲区、对话摘要记忆、持久化记忆(如SQL、Redis存储)等,满足不同场景需求。
代码示例:对话缓冲区记忆(最常用)
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
# 初始化LLM和记忆组件
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.5)
memory = ConversationBufferMemory()
# 构建对话链(将LLM和记忆组件结合)
conversation_chain = ConversationChain(llm=llm, memory=memory, verbose=True)
# 多轮对话
conversation_chain.predict(input="你好,我想了解LangChain的核心组件")
conversation_chain.predict(input="能再详细说说Prompt Templates吗?")
conversation_chain.predict(input="它和普通的提示词有什么区别?")
# 查看对话历史
print("对话历史:", memory.load_memory_variables({}))
2.3 文档加载器与文本分割器:对接外部文档
文档加载器(Document Loaders)用于加载外部数据源(如PDF、Word、网页、数据库),将其转换为LangChain可处理的Document格式;文本分割器(Text Splitters)用于将超长文本分割成小块(适配LLM的上下文窗口),同时保留文本的语义关联性。
代码示例:加载PDF并分割文本
# 安装依赖:pip install langchain-community pypdf
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 加载PDF文档(需指定PDF文件路径)
loader = PyPDFLoader("LangChain官方文档.pdf")
documents = loader.load() # 加载所有页面,返回Document列表
# 2. 分割文本:按字符递归分割,确保语义连贯
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每个文本块的长度
chunk_overlap=50, # 相邻文本块的重叠长度(避免语义断裂)
length_function=len
)
split_documents = text_splitter.split_documents(documents)
# 查看分割结果
print(f"分割后共有{len(split_documents)}个文本块")
print("第一个文本块内容:", split_documents[0].page_content)
2.4 向量存储与检索器:实现高效文本检索
向量存储(Vector Stores)用于存储文本块的向量表示(通过Embeddings模型转换),支持快速相似性检索;检索器(Retrievers)用于从向量存储中检索与用户查询最相关的文本块,是实现RAG(检索增强生成)的核心组件。LangChain支持50+向量数据库(如Chroma、FAISS、Pinecone)。
代码示例:使用Chroma向量存储实现检索
# 安装依赖:pip install langchain-community chromadb sentence-transformers
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 加载并分割文档(延续上面的PDF加载逻辑)
loader = PyPDFLoader("LangChain官方文档.pdf")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_documents = text_splitter.split_documents(documents)
# 2. 初始化Embeddings模型(用于将文本转换为向量)
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
# 3. 构建向量存储(将文本块转换为向量并存储)
vector_store = Chroma.from_documents(
documents=split_documents,
embedding=embeddings,
persist_directory="./chroma_db" # 持久化存储路径
)
vector_store.persist()
# 4. 初始化检索器(从向量存储中检索相关文本)
retriever = vector_store.as_retriever(
search_kwargs={"k": 3} # 检索最相关的3个文本块
)
# 5. 检索测试
query = "LangChain的核心组件有哪些?"
relevant_documents = retriever.get_relevant_documents(query)
print(f"检索到{len(relevant_documents)}个相关文本块:")
for doc in relevant_documents:
print(doc.page_content)
2.5 工具(Tools)与代理(Agents):让LLM自主调用工具
工具(Tools)是LangChain对接外部服务的接口,内置数十种常用工具(如搜索引擎、计算器、代码执行器、数据库查询),也支持自定义工具;代理(Agents)是“决策大脑”,负责根据用户需求,自主判断需要调用哪些工具、调用顺序,以及如何使用工具的结果生成最终回答。
代码示例:使用Agent调用搜索引擎和计算器
# 安装依赖:pip install langchain-community openai duckduckgo-search
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain.tools import DuckDuckGoSearchRun, CalculatorTool
# 1. 初始化LLM
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.5)
# 2. 初始化工具(搜索引擎+计算器)
tools = [
DuckDuckGoSearchRun(name="Search"), # 搜索引擎工具
CalculatorTool() # 计算器工具
]
# 3. 初始化Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, # 常用的Agent类型
verbose=True, # 打印Agent的思考和调用过程
handle_parsing_errors=True
)
# 4. 测试Agent(复杂任务:需要搜索+计算)
query = "2026年春节期间全国旅游人次是多少?请计算这个数字的10%是多少?"
response = agent.run(query)
print("最终回答:", response)
2.6 链(Chains):组件的流程编排
链(Chains)用于将多个核心组件按业务逻辑串联成工作流,解决单一组件无法完成复杂任务的问题。LangChain提供多种预构建的链,也支持通过LCEL(LangChain Expression Language)自定义链,实现组件的灵活组合。
代码示例:构建RAG链(检索+生成)
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
# 1. 初始化LLM、Embeddings和向量存储(延续上面的向量存储逻辑)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.5)
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vector_store = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)
# 2. 构建检索器
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
# 3. 构建RAG链(检索相关文本 + LLM生成回答)
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # 将检索到的文本全部传入LLM生成回答
retriever=retriever,
return_source_documents=True # 返回检索到的原始文本(用于验证)
)
# 4. 测试RAG链
query = "LangChain如何实现多轮对话的上下文管理?"
result = rag_chain({"query": query})
# 输出结果
print("生成回答:", result["result"])
print("\\n检索到的相关文本:")
for doc in result["source_documents"]:
print(doc.page_content)
三、LangChain实战案例:从零搭建2个常用应用
下面我们结合上面的核心组件,实战搭建两个最常用的LLM应用——多轮对话机器人和RAG检索问答系统,代码完整可运行,新手也能快速上手。
实战1:多轮对话机器人(带记忆功能)
功能:记住用户的历史对话,能根据上下文进行连贯回复,适用于客服、咨询等场景。
# 安装依赖:pip install langchain openai
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferWindowMemory
# 1. 初始化配置
llm = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0.6, # 回复的随机性,0.6适中
openai_api_key="你的API密钥" # 可通过环境变量配置,更安全
)
# 2. 初始化记忆组件(窗口记忆:只记住最近3轮对话,避免记忆过长)
memory = ConversationBufferWindowMemory(k=3)
# 3. 构建对话链
conversation_chain = ConversationChain(
llm=llm,
memory=memory,
verbose=True # 打印思考过程,方便调试
)
# 4. 启动对话
print("多轮对话机器人(输入'退出'结束对话):")
while True:
user_input = input("你:")
if user_input == "退出":
print("机器人:再见!")
break
response = conversation_chain.predict(input=user_input)
print(f"机器人:{response}")
实战2:RAG检索问答系统(基于本地PDF)
功能:加载本地PDF文档,用户可针对PDF内容进行提问,LLM会基于PDF内容生成准确回答,适用于文档咨询、知识库问答等场景。
# 安装依赖:pip install langchain-community openai chromadb pypdf sentence-transformers
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 初始化配置
llm = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0.5,
openai_api_key="你的API密钥"
)
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2") # 轻量高效的Embeddings模型
# 2. 加载并分割PDF文档
pdf_path = "你的PDF文件路径.pdf" # 替换为自己的PDF路径
loader = PyPDFLoader(pdf_path)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
split_documents = text_splitter.split_documents(documents)
# 3. 构建向量存储并持久化
vector_store = Chroma.from_documents(
documents=split_documents,
embedding=embeddings,
persist_directory="./pdf_rag_db"
)
vector_store.persist()
# 4. 构建RAG链
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_store.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)
# 5. 启动问答系统
print("PDF检索问答系统(输入'退出'结束对话):")
while True:
user_input = input("你:")
if user_input == "退出":
print("系统:再见!")
break
result = rag_chain({"query": user_input})
print(f"系统:{result['result']}")
# 可选:打印检索到的相关文本
# print("\\n相关参考:")
# for i, doc in enumerate(result["source_documents"], 1):
# print(f"{i}. {doc.page_content}")
四、LangChain与其他主流框架的区别(选型指南)
很多开发者会混淆LangChain与其他LLM框架,其实它们的定位差异很大,选择时需结合自身场景。下面通过表格对比LangChain与主流框架的核心区别,帮助大家快速选型。
| 应用层编排框架 | LangChain/LangGraph | 构建LLM应用(Agent/RAG) | 自身不训练模型,专注组件拼接、流程编排,适配复杂业务场景 |
| 模型训练/微调框架 | Hugging Face Transformers | 模型开发/微调/推理 | 核心是封装模型架构,LangChain需依赖其加载本地模型,二者互补 |
| 端到端开发平台 | LlamaIndex/GPT Index | 轻量化RAG开发 | 更聚焦检索增强场景,API更简洁;LangChain覆盖更广,灵活性更高但学习成本稍高 |
| 低代码/可视化平台 | LangFlow/PromptFlow | 可视化编排LLM流程 | 是LangChain的可视化封装,适合非开发者快速搭建,定制化能力弱于原生LangChain |
| 智能体专用框架 | AutoGPT/BabyAGI | 自主型Agent开发 | 侧重“自主决策+多步任务”,但组件化、生态兼容性弱于LangChain |
选型建议:
-
快速搭建RAG系统:优先选择LlamaIndex;
-
开发复杂Agent/多场景融合应用(RAG+Agent+工具):选择LangChain/LangGraph;
-
模型训练/微调:用Hugging Face Transformers,搭配LangChain做应用落地;
-
非开发者/快速原型验证:用LangFlow/PromptFlow;
-
极简自主型Agent原型:尝试AutoGPT。
五、LangChain生态体系与进阶方向
5.1 核心生态组件
LangChain的生态已经非常完善,除了核心框架,还有三个关键配套工具,覆盖开发、调试、部署全流程:
-
LangSmith:LLM应用的调试、监控和追踪平台,能可视化Agent的思考过程、组件调用链路,帮助开发者定位问题,优化应用性能;
-
LangServe:用于将LangChain应用部署为API服务,支持快速集成到Web应用、移动端等场景,提供高可用、可扩展的部署方案;
-
LangGraph:基于图结构的编排框架,用于构建复杂的有状态Agent、多智能体协作应用,支持循环、分支等复杂控制流。
5.2 进阶学习方向
掌握基础组件和实战案例后,可从以下方向进阶,提升LangChain应用开发能力:
-
自定义工具开发:根据业务需求,开发专属工具(如对接企业内部系统、API);
-
多智能体协作:使用LangGraph构建多Agent系统,实现复杂任务的分工协作;
-
性能优化:学习文本分割策略、向量检索优化、缓存机制,提升应用响应速度和准确性;
-
开源LLM适配:将LangChain与Llama 2、ChatGLM等开源模型结合,实现本地化部署,降低成本。
六、总结与入门建议
6.1 核心总结
LangChain的核心价值的是“连接与编排”——它不替代LLM,而是为LLM提供“手脚”和“记忆”,让LLM能对接外部数据、调用工具,完成更复杂的实际业务需求。其组件化、可扩展的设计,让开发者能快速搭建各类LLM应用,从简单的对话机器人到复杂的企业级智能代理。
对于开发者而言,LangChain不是“可选工具”,而是“必备工具”——它能大幅降低LLM应用的开发门槛,提升开发效率,帮助我们将大模型的能力落地到实际业务中。
6.2 新手入门建议
环境搭建:先安装LangChain核心库(pip install langchain langchain-community),配置OpenAI或开源LLM的API密钥,完成基础环境准备;
组件学习:先掌握Prompt Templates、Memory、Chains三个基础组件,再学习Retrieval、Tools、Agents,循序渐进;
实战练习:先实现简单的对话链,再搭建RAG系统,最后尝试Agent工具调用,通过实战巩固知识点;
文档参考:遇到问题时,优先查看LangChain官方文档(https://python.langchain.com/)和社区案例,获取最准确的信息。
最后,LangChain的生态还在快速发展,新的组件和功能不断更新,建议大家多关注官方动态,多动手实践,才能真正掌握这一强大的LLM应用开发框架。
附录:常用依赖安装命令
# 核心依赖
pip install langchain langchain-core langchain-community
# LLM依赖(OpenAI)
pip install openai
# 文档加载依赖(PDF、Word等)
pip install pypdf python-docx
# 向量存储依赖(Chroma、FAISS)
pip install chromadb faiss-cpu
# Embeddings依赖(Hugging Face)
pip install sentence-transformers
# 工具依赖(搜索引擎、计算器)
pip install duckduckgo-search
![[LangChain RAG] 06 文档加载、Chroma 向量库与检索增强问答-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260829115912-6a92c990605f7-220x150.png)
