前言
大语言模型(LLM)正在改变软件开发的方式,而 LangChain 作为连接LLM与外部世界的桥梁,已成为开发者必备的工具之一。自2022年10月发布以来,它迅速成为GitHub上最热门的AI框架之一(139k Star)。
如果你正打算开发基于大模型的应用,无论是智能客服、文档问答,还是自动化工作流,LangChain都能让你事半功倍。本文将从零开始,系统介绍LangChain的核心概念、六大模块、两种主流架构(RAG与Agent),并通过完整代码带你快速上手。
一、LangChain是什么?
LangChain是一个开源框架 ,用于构建由大语言模型(LLMs)驱动的应用程序。它本身不提供模型,而是帮你更高效地使用各种模型(OpenAI、DeepSeek、Claude、本地模型等)。
它的核心价值在于:
-
连接:将LLM与外部数据(PDF、网页、数据库)、工具(搜索、计算器、API)无缝对接。
-
编排:把多个调用组合成"链"(Chain),实现复杂逻辑。
-
记忆:管理对话上下文,让应用具备长期记忆能力。
简单比喻:大模型是聪明但健忘且没有工具的大脑 ,而LangChain则给它配备了手、眼、耳和记事本。
二、为什么需要LangChain?
直接调用API不香吗?
当然可以!比如你用DeepSeek或OpenAI的API直接开发,完全可行。但当你的应用越来越复杂时,会遇到这些问题:
| 挑战 | LangChain的解决方案 |
|---|---|
| 切换模型(比如从OpenAI换到Claude)需要重写调用代码 | 统一Model I/O接口,换模型只需改配置 |
| 多个API调用(检索+生成+工具)难以编排 | 内置Chain和Agent,结构化组合 |
| 缺乏对话记忆 | Memory模块开箱即用 |
| 无法访问私有数据 | Retrieval模块(RAG)轻松集成向量检索 |
| 需要调用外部工具(搜索、日历、数据库) | Tools模块统一管理 |
LangChain能帮你做什么?
-
文档问答:基于内部手册、技术文档的问答系统
-
智能客服:上下文感知的对话机器人
-
自动化报告生成:从数据中提取洞察并生成自然语言摘要
-
多步推理任务:让Agent自主调用工具完成复杂目标
三、LangChain的六大核心组件
学习LangChain,首先需要理解它的架构。官方将组件分为六大模块(参考v0.2架构):
| 模块 | 功能描述 | 重要程度 |
|---|---|---|
| Model I/O | 管理模型输入输出(Prompt模板、模型调用、输出解析) | ★★★★★ |
| Chains | 将多个步骤串联为完整流程 | ★★★★★ |
| Memory | 存储对话历史或长期知识 | ★★★★ |
| Retrieval | 实现RAG:加载、分割、向量化、检索外部数据 | ★★★★★ |
| Agents | 自主决策并调用工具 | ★★★★ |
| Callbacks | 日志、监控、流式输出 | ★★★ |
1. Model I/O ------ 最常用模块
-
Format :使用
PromptTemplate构建动态输入 -
Predict:统一接口调用LLM(支持DeepSeek、OpenAI、本地模型等)
-
Parse :通过
OutputParser将模型输出转为JSON等结构化格式
2. Chains ------ 编排引擎
一个LLMChain就是最简单的链:Prompt → LLM → OutputParser。复杂的链可以组合多个步骤,比如RetrievalQA链自动执行检索+生成。
3. Memory ------ 记忆管理
-
ConversationBufferMemory:完整历史 -
ConversationSummaryMemory:摘要压缩(适合长对话) -
VectorStoreRetrieverMemory:用向量库长期存储
4. Retrieval ------ RAG基石
包含:文档加载器(Loader)→ 文本分割器(Splitter)→ 嵌入模型(Embeddings)→ 向量存储(VectorStore)→ 检索器(Retriever)。这是企业落地最广的场景。
5. Agents ------ 智能体
Agent = LLM + Memory + Tools + Planning + Action。它让模型自主决定下一步该做什么,比如"先搜索,再计算,最后生成报告"。
6. Callbacks ------ 可观测性
配合 LangSmith 可实现链路追踪、调试、评估,是生产级应用的关键。
四、两大应用架构详解
架构一:RAG(检索增强生成)
适用场景:需要基于外部知识库(技术文档、产品手册、代码库)回答的问题。
核心流程:
-
加载:从多种源(网页、PDF、Markdown)加载文档
-
分割:将长文档切成合适大小的块(chunk)
-
向量化:用嵌入模型将文本转为向量
-
存储:存入向量数据库(如FAISS、Chroma)
-
检索:用户提问时,从库中召回最相关的块
-
生成:将检索结果与问题组合成Prompt,让LLM回答
技术难点:
-
文件解析(PDF中的表格、图片)
-
分块策略(固定大小 vs 语义切割)
-
检索精度(相似度算法 + 重排序Reranker)
架构二:Agent(智能体)
适用场景:需要多步推理、调用外部工具(API、计算器、数据库)的复杂任务。
核心要素:
-
LLM:决策中枢
-
记忆:短期(上下文窗口)与长期(向量库或微调)
-
工具:扩展能力(搜索、代码执行、业务API)
-
规划:任务分解(如ReAct、Plan-and-Execute)
-
行动:执行具体操作
五、开发环境准备
环境要求
-
Python 3.10+
-
推荐Anaconda管理虚拟环境
-
开发IDE:PyCharm / VS Code
安装核心依赖
bash
# 基础包
pip install langchain langchain-core langchain-community
# 模型接入(以DeepSeek为例)
pip install langchain-deepseek
# 向量库
pip install faiss-cpu # 或 faiss-gpu
# 本地嵌入模型
pip install sentence-transformers
# 网页加载等工具
pip install beautifulsoup4
配置API密钥
创建 config.py(以DeepSeek为例):
python
OPENAI_API_KEY = "sk-xxx"
OPENAI_MODEL = "deepseek-chat"
OPENAI_BASE_URL = "https://api.deepseek.com"
六、从零到一:代码实战
1. 最简单的对话
python
from langchain_deepseek import ChatDeepSeek
from langchain_core.messages import HumanMessage
import config
llm = ChatDeepSeek(
model="deepseek-chat",
api_key=config.OPENAI_API_KEY,
temperature=0.7
)
response = llm.invoke([HumanMessage("什么是RAG?")])
print(response.content)
2. 使用Prompt模板 + JSON输出
python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
parser = JsonOutputParser()
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位技术专家。回答必须仅返回标准JSON格式,不要多余文字。\n{format_instructions}"),
("human", "{question}")
]).partial(format_instructions=parser.get_format_instructions())
chain = prompt | llm | parser
result = chain.invoke({"question": "解释Python中的装饰器"})
print(result)
3. RAG完整示例(加载网页文档 → 向量检索 → 问答)
python
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_deepseek import ChatDeepSeek
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import config
# 1. 加载文档(以Python官方教程为例)
loader = WebBaseLoader("https://docs.python.org/3/tutorial/index.html")
docs = loader.load()
# 2. 分割
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. 嵌入与向量存储
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vector_store = FAISS.from_documents(chunks, embeddings)
# 4. 创建检索器
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
# 5. 构建RAG链
llm = ChatDeepSeek(model="deepseek-chat", api_key=config.OPENAI_API_KEY)
prompt = ChatPromptTemplate.from_template("""
请严格依据下面提供的参考内容回答问题,禁止编造:
【参考上下文】
{context}
【用户问题】
{question}
""")
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 6. 执行问答(使用中立问题)
query = "Python中的列表推导式是什么?"
result = rag_chain.invoke(query)
print(result)
4. 使用Agent调用检索工具
python
from langchain.tools.retriever import create_retriever_tool
from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor
# 创建工具
tool = create_retriever_tool(
retriever,
"PythonDocsRetriever",
"用于搜索Python官方文档中的信息"
)
# 加载Agent提示模板
prompt = hub.pull("hwchase17/openai-functions-agent")
# 构建Agent
agent = create_openai_functions_agent(llm, [tool], prompt)
executor = AgentExecutor(agent=agent, tools=[tool], verbose=True)
# 运行
response = executor.invoke({"input": "Python的列表和元组有什么区别?"})
print(response["output"])
七、LangChain生态扩展
除了核心库,还有几个重要项目:
| 项目 | 作用 |
|---|---|
| LangGraph | 基于图的多智能体编排,支持循环、分支等复杂工作流 |
| LangSmith | 生产级调试、监控、评估平台,与LangChain深度集成 |
| LangServe | 将Chain或Agent部署为REST API服务 |
LangGraph 和 LangSmith 被认为是未来最有潜力的模块。
八、学习建议与常见问题
推荐学习路径
-
先跑通示例代码:感受整个流程,不要只看不练。
-
阅读官方文档 :
python.langchain.com是最权威的参考。 -
从简单项目开始:比如一个基于本地PDF的问答系统。
-
关注RAG和Agent:这是目前企业应用的两个主要方向。
-
多利用测试数据:在做技术选型或优化时,先准备评测集。
常见问题
-
Q:LangChain和LlamaIndex有什么区别?
- LlamaIndex更专注于索引和检索(RAG),而LangChain更全面,涵盖Agent、Chain等。
-
Q:LangChain支持哪些模型?
- 几乎所有主流模型(OpenAI、Anthropic、Cohere、DeepSeek、HuggingFace本地模型等),通过
langchain-community集成。
- 几乎所有主流模型(OpenAI、Anthropic、Cohere、DeepSeek、HuggingFace本地模型等),通过
-
Q:RAG中的Embedding模型如何选择?
- 中文场景推荐
bge-small或text2vec;英文可用all-MiniLM-L6-v2;追求精度可用bge-large。
- 中文场景推荐
结语
LangChain极大地简化了LLM应用开发流程,它不是一个"黑盒",而是一套清晰、可组合的组件库。无论你是构建智能客服、自动化报告工具,还是研究多智能体系统,LangChain都能提供可靠的基础设施。
记住:LangChain的核心思想是"连接"与"编排",而真正的创新在于你如何组合这些组件来解决实际业务问题。
希望本文能帮你快速上手LangChain。如果你在实践中有任何收获或疑问,欢迎在评论区交流讨论!