LangChain学习笔记
一、LangChain 是什么?为什么需要它?
LangChain 是一个开源框架,用于构建由大型语言模型(LLM)驱动的应用程序。它本身不是一个语言模型,而是一套标准化的接口和模块化组件,让你能轻松地将各种大语言模型(如 OpenAI GPT、Anthropic Claude、Google Gemini 等)与外部数据源(如文档、数据库、API)连接起来,构建出功能复杂且实用的 AI 应用。
1.1 解决了什么核心问题?
传统 LLM 应用存在三大痛点:
| 痛点 | LangChain 的解决方案 |
|---|---|
| 上下文记忆缺失 → 对话断裂 | 提供对话缓冲区、摘要记忆等多种记忆管理模块,支持多轮连续对话 |
| 外部数据接入困难 → 无法利用私有知识 | 内置 30+ 种文档加载器,与主流向量数据库无缝集成,支撑 RAG(检索增强生成) |
| 复杂任务分解能力不足 → 无法执行多步操作 | 通过链式编排(Chains)和智能体(Agents),将复杂任务拆解为可执行的子步骤 |
LangChain 通过模块化设计将复杂流程拆解为可复用的组件链,开发者只需关注业务逻辑实现即可快速搭建系统。
1.2 框架定位:三层架构
LangChain 的生态由三个层次构成:
-
langchain-core:定义最基础的抽象接口,如聊天模型、向量存储、检索器等,无第三方集成,依赖极轻量。 -
langchain:面向开发者的主库,包含文档加载器、提示模板、链、代理等高层组件。 -
langchain-community/ 集成包:与 50+ 家模型提供商(OpenAI、Anthropic、Google、Cohere 等)和工具(Slack、GitHub、Google Drive 等)的集成。
二、核心组件深度解析
LangChain 的模块化设计遵循"高内聚、低耦合"原则,核心组件分为以下六大模块。
2.1 模型接口层(Model I/O)
该层定义了统一的模型交互协议,支持两大类模型抽象:
| 类型 | 说明 | 示例 |
|---|---|---|
| LLM(旧式) | 字符串输入 → 字符串输出 | "你好" → "你好,有什么可以帮你?" |
| Chat Model | 消息列表输入 → 消息输出 | [SystemMessage, HumanMessage] → AIMessage |
python
from langchain.llms import BaseLLM
class CustomLLM(BaseLLM):
def _call(self, prompt: str, stop=None) -> str:
# 实现自定义模型调用逻辑
return raw_model_response
该层还支持流式输出、上下文窗口管理、多模型负载均衡等高级功能。
2.2 提示工程体系(Prompts)
提示模板系统通过结构化设计实现输入输出的精准控制,支持动态变量注入与条件逻辑判断:
python
from langchain.prompts import PromptTemplate
template = """
产品名称:{product_name}
目标用户:{target_audience}
核心卖点:{key_feature_1}、{key_feature_2}
广告语:
"""
prompt = PromptTemplate(
template=template,
input_variables=["product_name", "target_audience", "key_feature_1", "key_feature_2"]
)
模板库还支持版本控制、A/B 测试以及基于上下文自动选择最优模板。
2.3 记忆模块(Memory)
记忆系统分为三个层级,解决 LLM 天生"失忆"的问题:
| 层级 | 存储方式 | 适用场景 |
|---|---|---|
| 短期记忆 | 基于对话上下文的 token 级缓存 | 单次对话内的信息保持 |
| 长期记忆 | 向量数据库语义检索 | 跨会话的知识召回 |
| 持久记忆 | 结构化数据存储(SQL 数据库) | 用户画像、偏好等永久信息 |
python
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
k=5 # 保留最近5轮对话
)
LangChain 还提供了多种开箱即用的记忆策略:ConversationSummaryMemory(对话摘要记忆)、ConversationBufferWindowMemory(滑动窗口记忆)、VectorStoreRetrieverMemory(向量检索记忆)等。
2.4 链式编排引擎(Chains)
"链"是 LangChain 最基础的抽象概念,代表一组按顺序执行的操作。链式结构让复杂流程变得可组合、可复用。
四种基础链式结构:
| 链类型 | 特点 | 适用场景 |
|---|---|---|
| LLMChain | 单模型 + 单提示 | 基础问答、翻译、摘要 |
| SimpleSequentialChain | 线性串联,单输入单输出 | 数据处理流水线 |
| SequentialChain | 多输入多输出,支持条件分支 | 复杂业务逻辑编排 |
| MultiPromptChain | 多模型协作 | 专家混合(MoE)场景 |
python
from langchain.chains import LLMChain, SequentialChain
chain1 = LLMChain(llm=llm, prompt=prompt1)
chain2 = LLMChain(llm=llm, prompt=prompt2)
overall_chain = SequentialChain(
chains=[chain1, chain2],
input_variables=["input"],
output_variables=["output1", "output2"]
)
2.5 智能体(Agents)
智能体是 LangChain 中最强大的组件。与固定流程的链不同,智能体可以根据任务自主决定下一步做什么、调用什么工具。
核心工作原理(ReAct 模式):
text
Observation(观察)→ Thought(思考)→ Action(行动)→ 循环
智能体使用 LLM 选择要执行的动作序列:
-
给定一个提示,智能体使用 LLM 请求执行一个动作(如运行某个工具)
-
智能体执行该动作并收到观察结果
-
智能体将观察结果返回给 LLM,生成下一个动作
-
当满足停止条件时,返回最终结果
工具调用框架采用声明式注册机制,支持参数类型校验、异步执行和调用频率限制:
python
from langchain.agents import Tool, initialize_agent
tools = [
Tool(name="WebSearch", func=search_api, description="用于实时网络搜索"),
Tool(name="RAGSearch", func=rag_search, description="检索企业内部知识库")
]
agent = initialize_agent(tools, llm, agent="conversational-react-description")
response = agent.run("明天北京会下雨吗?如果下雨,请提供防汛预案")
2.6 检索模块(Retrieval)
检索模块是 RAG 的核心,支持多种检索方式:
-
向量检索:与 Chroma、FAISS、Milvus、Pinecone 等向量数据库无缝集成
-
混合检索:结合 BM25 关键词检索与语义检索,兼顾精确匹配和语义理解
-
多级检索:"粗排 + 精排"的两阶段架构,先快速筛选候选集,再用 Cross-Encoder 精细排序
-
上下文压缩:使用 LLM 对长文档进行摘要压缩,提升检索效率
三、LangChain 生态:不只是框架
3.1 LangGraph:状态化工作流引擎
LangGraph 是 LangChain 生态中的另一个核心组件,两者定位不同:
| 维度 | LangChain | LangGraph |
|---|---|---|
| 核心抽象 | 链(Chain)— 线性顺序执行 | 图(Graph)— 节点 + 边,支持循环、分支 |
| 状态管理 | 基础(通过 Memory) | 强大的状态持久化 |
| 适用场景 | 快速原型、线性流程 | 复杂状态机、多步循环、人机协作 |
一句话总结:LangChain 帮你快速构建 AI 功能,LangGraph 确保这些功能像真正的业务工作流一样可靠运行。
LangGraph 采用有向图架构,节点代表处理步骤,边定义状态转换,让你能精确控制执行流程。在 2025 年 9 月,LangGraph 已达到 1.0 稳定版本,成为市场上第一个生产级、持久化的智能体框架。
3.2 Deep Agents:通用智能体执行环境
LangChain CEO Harrison Chase 提出了"Harness Engineering"(执行环境工程)的概念——让 AI 模型能够循环执行、调用工具、执行长时间运行任务的执行环境。
为此,LangChain 发布了 Deep Agents,一个建立在 LangChain 和 LangGraph 之上的通用执行环境,提供:
-
规划能力:任务分解与编排
-
虚拟文件系统:沙箱环境中的文件操作
-
上下文与 Token 管理:自动压缩长上下文,降低 Token 消耗
-
代码执行:在沙箱中运行 LLM 生成的代码
-
技能与记忆功能:可复用的能力模块和持久化记忆
-
子智能体并行:将工作委托给子智能体,并行执行,结果可压缩为单一输出,显著提升 Token 效率
3.3 LangSmith:可观测性与调试平台
传统软件的调试方式是找代码 Bug,而 AI 智能体的调试是理解推理错误。LangSmith 引入了三个关键原语来应对这一挑战:
| 原语 | 说明 |
|---|---|
| Runs | 捕获单次执行步骤(一个 LLM 调用 + 完整提示 + 可用工具 + 输出),理解智能体在任一决策点"思考"了什么 |
| Traces | 将多个 Runs 链接为完整执行记录,复杂工作流的 Trace 可达数百 MB |
| Threads | 将多个 Traces 分组为跨分钟、小时甚至数天的对话会话 |
LangSmith Agent Builder 在 2026 年 1 月正式 GA,并于 2 月新增了文件上传、统一工具注册表、对话转智能体等功能。
3.4 LangServe:部署与 API 化
LangServe 可以将 LangChain 链和智能体一键部署为 REST API,支持流式输出、中间步骤日志、并发请求等生产级功能。
四、框架对比:LangChain 的独特优势
4.1 主流 AI 智能体框架对比
| 框架 | 核心定位 | 优势 | 适用场景 |
|---|---|---|---|
| LangChain | 通用 LLM 应用开发框架 | 500+ 集成,最全面的工具生态,Token 效率最高 | 复杂工作流、RAG、需要多提供商支持 |
| LangGraph | 状态化工作流引擎 | 循环、分支、持久化状态,复杂任务中 LLM 调用节省 40–50% | 多步推理、人机协作、长期运行的智能体 |
| CrewAI | 角色扮演多智能体 | 最快原型开发(2–4 小时),低学习门槛 | 快速验证、角色型多智能体场景 |
| AutoGen | 对话驱动多智能体 | 对话流自然不可预测的场景表现出色 | 客户交互、研究协作 |
| LlamaIndex | RAG 专用框架 | 高级索引策略、数据连接性强 | 数据密集型检索、企业知识库 |
在 5 项任务、2000 次运行的基准测试中,LangChain 是最节省 Token 的框架,完成简单任务仅需不到 900 个提示 Token。
4.2 技术选型决策树
text
需要什么? ├── 线性流程,快速上线 → 选 LangChain ├── 循环/分支/持久化状态 → 选 LangGraph ├── RAG 为核心,数据检索 → 选 LlamaIndex(或 LangChain + LlamaIndex) ├── 多智能体角色扮演 → 选 CrewAI └── 对话式多智能体协作 → 选 AutoGen
五、实战场景:RAG 知识库构建
以构建企业级 AI 知识库为例,展示 LangChain 如何串联各组件。
5.1 整体架构(四层)
text
数据预处理层 → 向量化存储层 → 智能检索层 → 生成增强层
5.2 关键步骤与代码
步骤 1:文档加载与分割
LangChain 提供超过 30 种文档加载器,形成完整的解析工具链:
python
from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = DirectoryLoader("./docs/", glob="**/*.pdf", loader_cls=PyPDFLoader)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", "。", ";", ","]
)
chunks = text_splitter.split_documents(documents)
分割原则:保持语义完整性、控制块大小(500–2000 字符为最佳区间)、根据领域调整粒度。
步骤 2:向量化与存储
python
from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents(chunks, embeddings)
步骤 3:智能检索
推荐采用"粗排 + 精排"的两阶段检索:
python
from langchain.retrievers import HybridSearchRetriever
retriever = HybridSearchRetriever(
keyword_retriever=BM25Retriever(),
semantic_retriever=FAISSRetriever(),
alpha=0.5 # 混合权重系数
)
步骤 4:生成增强
python
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
return_source_documents=True
)
response = qa_chain.invoke("公司的报销政策是什么?")
5.3 生产级优化方向
-
混合检索:结合 BM25 关键词检索与向量语义检索,兼顾精确匹配和语义理解
-
查询扩展:使用 BERT-QE 等模型自动扩展用户查询的语义范围
-
上下文压缩:使用 LLM 对长文档进行摘要,减少输入 Token
-
重排序:应用 Cross-Encoder 模型对候选结果进行精细排序
六、挑战与局限
| 挑战 | 说明 |
|---|---|
| 学习曲线陡峭 | 组件众多,新手需要约 6 小时才能完成首个完整实现 |
| 延迟较高 | 在框架基准测试中,LangChain 的端到端延迟是同类中最高的之一 |
| 边缘部署限制 | LangChain JS 的 gzipped 包达 101.2 kB,不支持边缘运行时部署 |
| 过度抽象风险 | 复杂的抽象层可能掩盖底层 LLM 的真实行为,增加调试难度 |
| 版本迭代快 | API 变化频繁,需持续关注更新日志 |
七、2026 年最新动态与展望
7.1 最新里程碑
-
LangSmith Agent Builder GA(2026 年 1 月):无代码 AI 智能体平台正式发布,支持文件上传、对话转智能体等功能。
-
Deep Agents v1.9.0-alpha(2026 年 3 月):新增异步子智能体支持、Backend Protocol v2(多模态文件原生支持)。
-
MongoDB 战略合作(2026 年 3 月):Atlas 原生集成 LangChain,向量搜索 + 持久化记忆 + 自然语言查询 + 端到端可观测性一体化。
-
可观测性框架(2026 年 2 月):LangChain 发布了全面的智能体调试框架,从"找 Bug"转向"理解推理错误"。
7.2 未来趋势
LangChain CEO Harrison Chase 提出,真正决定智能体能力上限的不是模型本身,而是执行环境(Harness)的设计质量——如何让模型循环执行、调用工具、管理上下文和 Token。
这意味着未来的 LangChain 将更加聚焦于:
-
上下文工程:让模型自主决定关注什么信息
-
长时任务执行:支持 200+ 步的复杂工作流
-
Token 效率优化:通过压缩和子智能体并行降低消耗
-
生产可观测性:从 Trace 中持续学习和优化
八、总结
LangChain 是目前最成熟、生态最丰富的 LLM 应用开发框架。它的核心价值在于将 LLM 从"对话机器人"升级为"任务执行引擎"——通过模块化的链式编排、智能体的自主决策、以及与外部数据源和工具的无缝集成,让 AI 能够真正完成复杂的工作流。
对于开发者而言,掌握 LangChain 意味着能够系统性地构建 RAG 知识库、多智能体协作系统、自动化工作流等生产级 AI 应用。但需要认识到它并非万能——在选择框架时,应根据任务的线性/非线性程度、状态持久化需求、以及对低延迟的要求,综合考虑 LangChain、LangGraph 或其他替代方案。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)