目录
[引言:为什么是 LangChain?](#引言:为什么是 LangChain?)
[一、LangChain 核心组件拆解](#一、LangChain 核心组件拆解)
[1.1 模型(Models)------ 应用的"大脑"](#1.1 模型(Models)—— 应用的“大脑”)
[1.2 工具(Tools)------ 应用的"手和脚"](#1.2 工具(Tools)—— 应用的“手和脚”)
[1.3 智能体(Agents)------ 应用的"决策者"](#1.3 智能体(Agents)—— 应用的“决策者”)
[1.4 记忆(Memory)------ 应用的"短期记忆"](#1.4 记忆(Memory)—— 应用的“短期记忆”)
[1.5 检索增强生成(RAG)------ 让模型"知道"你的数据](#1.5 检索增强生成(RAG)—— 让模型“知道”你的数据)
[三、LangGraph 进阶:从链到图的范式转移](#三、LangGraph 进阶:从链到图的范式转移)
[3.1 基础示例:对话图](#3.1 基础示例:对话图)
[3.2 条件分支示例](#3.2 条件分支示例)
[四、2026 年 LangChain 最佳实践](#四、2026 年 LangChain 最佳实践)
[4.1 工程建议](#4.1 工程建议)
[4.2 适用场景](#4.2 适用场景)
[结语:从链到图,从 Demo 到生产](#结语:从链到图,从 Demo 到生产)
引言:为什么是 LangChain?
2026年,大模型早已不再是稀缺资源。从 OpenAI 的 GPT 系列到本地的 Llama、Qwen,模型能力持续提升。但真正困扰开发者的,早已不是"模型够不够强",而是 "如何让模型真正为我所用"。
你是否也遇到过这些问题?
-
想让模型访问公司内部数据库,却不知道从何下手
-
希望构建多轮对话机器人,但每次都要手动维护聊天历史
-
想给模型配上"工具"(查询天气、搜索网页),却发现调用逻辑越写越复杂
LangChain 的出现,正是为了解决这些问题。
它是一个开源框架,旨在简化基于大语言模型的应用程序开发。它像一座桥梁,将强大的模型与外部数据源、工具、API 连接起来,让你能够构建真正上下文感知 、具备自主行动能力的 AI 应用。
一、LangChain 核心组件拆解
LangChain 之所以强大,是因为它围绕几个模块化概念构建,每个概念解决特定问题。
1.1 模型(Models)------ 应用的"大脑"
模型是 AI 应用的核心。LangChain 提供了一个统一的接口,让你可以用几乎相同的方式调用不同提供商的模型------无论是 OpenAI 的 GPT、Anthropic 的 Claude,还是本地部署的 Ollama 模型。
静态模型 vs 动态模型
LangChain 支持两种模型模式:
-
静态模型:最常见的用法,在创建 Agent 时固定模型,整个执行过程中保持不变。
-
动态模型 :允许在运行时根据上下文切换模型。例如,通过
ModelFallbackMiddleware,当主模型失败时自动切换到备用模型。
python
from langchain.agents import create_agent
from langchain.agents.middleware import ModelFallbackMiddleware
agent = create_agent(
model="gpt-4o",
tools=[],
middleware=[
ModelFallbackMiddleware(
"gpt-4o-mini",
"claude-3-5-sonnet-20241022",
),
],
)
1.2 工具(Tools)------ 应用的"手和脚"
如果说模型是大脑,那么工具就是大脑可以操控的"手和脚"。工具让 AI 能够与外部世界交互------调用 API、查询数据库、执行代码、发送邮件。
LangChain 提供了简洁的 @tool 装饰器,让你可以系统化地创建工具。
python
from langchain.tools import tool
@tool
def search_db(query: str, limit: int = 10) -> str:
"""搜索客户数据库中匹配查询的记录"""
# 实际的数据库查询逻辑
return f"找到 {limit} 条与 '{query}' 相关的结果"
@tool("pycharm_docs_search")
def pycharm_docs_search(q: str) -> str:
"""搜索 PyCharm 文档并返回相关内容"""
# 向量检索逻辑
docs = retriever.get_relevant_documents(q)
return format_docs(docs)
1.3 智能体(Agents)------ 应用的"决策者"
智能体是 LangChain 的核心抽象。它将模型和工具组合在一起,让系统能够:
-
推理:分析用户需求
-
规划:决定调用哪些工具、按什么顺序调用
-
执行:调用工具并分析结果
-
迭代:根据中间结果调整下一步行动
创建智能体的 API 极为简洁:
python
from langchain.agents import create_agent
agent = create_agent(
"gpt-5", # 模型
tools=tools # 工具列表
)
1.4 记忆(Memory)------ 应用的"短期记忆"
默认情况下,大模型是无状态的------每次对话都是全新的开始。记忆组件让 AI 能够记住之前的交互,实现真正的多轮对话。
在新的 Runnable API 体系中,记忆不再是"隐藏参数",而是通过**检查点(checkpoint)**机制实现的显式状态管理。
python
from langgraph.checkpoint.memory import InMemorySaver
# 使用检查点保存状态
checkpointer = InMemorySaver()
graph = graph.compile(checkpointer=checkpointer)
# 使用同一个 thread_id,实现跨轮次记忆
config = {"configurable": {"thread_id": "user-123"}}
# 第一轮对话
result1 = graph.invoke({"messages": [HumanMessage(content="你好")]}, config=config)
# 第二轮对话(保留上下文)
result2 = graph.invoke({"messages": [HumanMessage(content="我刚才说了什么")]}, config=config)
1.5 检索增强生成(RAG)------ 让模型"知道"你的数据
RAG 是 LangChain 最具价值的应用场景之一。它通过以下流程,让模型能够基于私有数据回答问题:
-
文档索引:将内部文档、PDF 等分割成块,向量化后存入向量数据库
-
相关检索:用户提问时,从数据库中检索相关内容
-
增强生成:将检索到的内容注入上下文,让模型基于真实数据生成答案
python
# 示例:创建文档问答工具
@tool("pycharm_docs_search")
def pycharm_docs_search(q: str) -> str:
"""搜索 PyCharm 文档并返回相关内容"""
# 加载向量存储
vector_store = FAISS.load_local(
settings.index_dir,
embeddings,
allow_dangerous_deserialization=True
)
# 检索相关文档
retriever = vector_store.as_retriever(search_kwargs={"k": 4})
docs = retriever.invoke(q)
return format_docs(docs)
二、高级特性:中间件(Middleware)
LangChain 2025-2026 年版本引入的中间件机制,为智能体行为定制提供了强大支持。
| 中间件 | 作用 |
|---|---|
| Summarization | 接近 Token 限制时自动总结对话历史 |
| Human-in-the-loop | 暂停执行,等待人工审批工具调用 |
| Context editing | 管理对话上下文,修剪或清理工具调用记录 |
| PII detection | 检测并处理个人身份信息 |
python
from langchain.agents.middleware import HumanInTheLoopMiddleware
agent = create_agent(
model="gpt-4o",
tools=[send_email_tool, delete_user_tool],
middleware=[
HumanInTheLoopMiddleware(
require_approval_for=["delete_user_tool"] # 删除用户需要人工审批
)
]
)
三、LangGraph 进阶:从链到图的范式转移
当业务逻辑变得复杂------多步决策、条件分支、循环执行------传统的链式结构就难以应对了。这时,LangGraph 闪亮登场。
LangGraph 是 LangChain 团队推出的图式编排框架,它让你能够:
-
用**状态(State)**表达全局任务信息
-
用**节点(Nodes)**封装具体逻辑
-
用**边(Edges)**定义流程跳转
3.1 基础示例:对话图
python
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END, START
from langgraph.graph.message import add_messages
# 1. 定义全局状态
class ChatState(TypedDict):
messages: Annotated[list, add_messages]
# 2. 定义节点
def chat_node(state: ChatState):
response = llm.invoke(state["messages"])
return {"messages": [response]}
# 3. 构建图
graph = StateGraph(ChatState)
graph.add_node("chat", chat_node)
graph.set_entry_point("chat")
graph.add_edge("chat", END)
graph = graph.compile()
# 4. 调用
result = graph.invoke({
"messages": [HumanMessage(content="用一句话介绍什么是 LangGraph?")]
})
print(result["messages"][-1].content)
3.2 条件分支示例
python
def router(state: AgentState) -> str:
"""根据用户意图路由到不同处理节点"""
if "查询订单" in state["messages"][-1].content:
return "order_handler"
elif "咨询商品" in state["messages"][-1].content:
return "product_handler"
else:
return "general_handler"
# 添加条件边
graph.add_conditional_edges(
"intent_classifier",
router,
{
"order_handler": "order_node",
"product_handler": "product_node",
"general_handler": "general_node"
}
)
四、2026 年 LangChain 最佳实践
4.1 工程建议
-
模型别贪大:7B/8B 模型是当前本地部署的性价比甜点位
-
Prompt 比模型更重要:本地模型对提示词非常敏感
-
模块化使用:Prompt/LLM/Parser/Memory 明确分层
-
记忆要可演进:从 InMemory → Redis → 数据库 → Checkpointer
4.2 适用场景
| 场景 | 推荐方案 |
|---|---|
| 多轮对话机器人 | LangChain + Memory |
| 文档问答系统 | LangChain + RAG |
| 复杂多步智能体 | LangGraph |
| 本地部署应用 | LangChain + Ollama |
| 企业级合规应用 | LangGraph + Checkpoint |
结语:从链到图,从 Demo 到生产
过去几年,我们讨论最多的是"该用哪个云端大模型"。而现在,越来越多开发者开始思考:"如何让 AI 真正融入我的系统?"
LangChain 给出了答案:它不是要取代任何技术,而是为开发者提供了一个真正可控、可组合、可落地的 AI 应用开发框架。
从最简单的链式调用,到带记忆的对话系统,再到复杂的图式智能体------LangChain 的演进路径,恰恰映射了 AI 应用从"玩具"走向"生产"的全过程。