LangChain v1 重磅升级!三大核心改进,打造生产级代理开发利器
LangChain v1 不是简单的版本迭代,而是一次架构级的重构用+ 中间件,解锁代理定制化的无限可能用标准内容块,实现跨服务商的统一输出解析用精简命名空间 +,让框架轻装上阵如果你正在做生产级 LLM 代理开发,LangChain v1 绝对值得一试!赶紧升级体验吧~如果有地方解释得不确切,欢迎评论区纠正~
还在为 LangChain 旧版本的臃肿架构、混乱命名空间头疼?别慌!LangChain v1 携三大核心改进强势登场,专注生产环境的代理构建,彻底解决你的开发痛点。今天就带大家盘盘 LangChain v1 的新增内容,轻松上手新一代 LLM 应用开发框架~
本文带你解读LangChain v1.0版本的官方文档~
官方文档链接:https://docs.langchain.com/oss/python/releases/langchain-v1
🎯 核心升级总览:三大改进精简框架
LangChain v1 围绕三大核心方向对框架进行了全面精简,目标很明确 —— 打造轻量、高效、可定制的生产级代理开发基础:
create_agent:构建代理的新标准,替代旧版langgraph.prebuilt.create_react_agent- 标准内容块(
content_blocks):跨服务商统一访问现代 LLM 功能的新方案 - 简化命名空间:聚焦代理核心构建模块,遗留功能迁移至
langchain-classic
🔥 快速升级:一行命令搞定版本更新
pip install -U langchain
🔧 核心改进一:create_agent—— 代理开发的新标准
在 LangChain v1 中,create_agent 成为构建智能代理的标准方式,相比旧版的 langgraph.prebuilt.create_react_agent,它不仅更简洁,还通过 中间件(Middleware) 提供了超强的定制潜力!
1. 极简上手:几行代码创建生产级代理
不用再写一堆复杂的配置,create_agent 让代理开发像搭积木一样简单:
from langchain.agents import create_agent
# 定义工具(这里假设你已经实现了 search_web 等工具)
tools = [search_web, analyze_data, send_email]
# 创建代理
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=tools,
system_prompt="You are a helpful research assistant."
)
# 运行代理
result = agent.invoke({
"messages": [
{"role": "user", "content": "Research AI safety trends"}
]
})
2. 核心原理:标准化代理执行循环
create_agent 的底层逻辑其实很清晰,就是一个标准化的代理执行循环:
- 调用大模型生成指令
- 模型选择需要执行的工具
- 执行工具并获取结果
- 重复上述步骤,直到任务完成停止
3. 灵魂特性:Middleware 中间件,定制化天花板
如果说 create_agent 是 LangChain v1 的骨架,那 Middleware 中间件 就是它的灵魂!
中间件提供了高度可定制的扩展入口,帮你实现动态提示词控制、对话摘要、工具权限管控、状态管理、安全护栏等核心需求,轻松打造符合业务场景的智能代理。
(1)开箱即用:预置中间件直接上手
LangChain v1 内置了多款常用中间件,拿来就能用:
PIIMiddleware:敏感信息脱敏(比如隐藏邮箱、手机号)SummarizationMiddleware:对话历史过长时自动浓缩HumanInTheLoopMiddleware:敏感工具调用需人工审批
话不多说,上代码示例:
from langchain.agents import create_agent
from langchain.agents.middleware import (
PIIMiddleware,
SummarizationMiddleware,
HumanInTheLoopMiddleware
)
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[read_email, send_email],
middleware=[
# 脱敏邮箱:输入阶段自动打码
PIIMiddleware("email", strategy="redact", apply_to_input=True),
# 拦截手机号:自定义正则匹配,直接阻止调用
PIIMiddleware(
"phone_number",
detector=(
r"(?:\+?\d{1,3}[\s.-]?)?"
r"(?:\(?\d{2,4}\)?[\s.-]?)?"
r"\d{3,4}[\s.-]?\d{4}"
),
strategy="block"
),
# 对话摘要:token 数超过 500 自动浓缩历史
SummarizationMiddleware(
model="claude-sonnet-4-5-20250929",
trigger={"tokens": 500}
),
# 人工审批:发送邮件操作必须人工确认
HumanInTheLoopMiddleware(
interrupt_on={
"send_email": {
"allowed_decisions": ["approve", "edit", "reject"]
}
}
),
]
)
(2)自由定制:打造专属中间件
如果预置中间件满足不了你的需求?没问题!基于 AgentMiddleware 类,实现对应的钩子函数,就能打造专属中间件。
中间件在代理执行的每个关键节点都提供了钩子,比如:
| 钩子函数 | 执行时机 | 典型用途 |
|---|---|---|
before_agent |
代理启动前 | 加载内存、校验输入 |
before_model |
LLM 调用前 | 更新提示词、裁剪消息 |
wrap_model_call |
LLM 调用前后 | 拦截并修改请求 / 响应 |
wrap_tool_call |
工具调用前后 | 拦截并修改工具执行逻辑 |
自定义中间件示例:根据用户专业水平动态切换模型和工具
from dataclasses import dataclass
from typing import Callable
from langchain_openai import ChatOpenAI
from langchain.agents.middleware import AgentMiddleware, ModelRequest
from langchain.agents.middleware.types import ModelResponse
# 定义上下文数据结构
@dataclass
class Context:
user_expertise: str = "beginner" # 默认新手
# 自定义中间件
class ExpertiseBasedToolMiddleware(AgentMiddleware):
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse]
) -> ModelResponse:
# 获取用户专业水平
user_level = request.runtime.context.user_expertise
# 新手:用轻量模型+基础工具;专家:用高性能模型+进阶工具
if user_level == "expert":
model = ChatOpenAI(model="gpt-5")
tools = [advanced_search, data_analysis]
else:
model = ChatOpenAI(model="gpt-5-nano")
tools = [simple_search, basic_calculator]
# 覆盖模型和工具,继续执行
return handler(request.override(model=model, tools=tools))
# 使用自定义中间件
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[simple_search, advanced_search, basic_calculator, data_analysis],
middleware=[ExpertiseBasedToolMiddleware()],
context_schema=Context # 绑定上下文schema
)
4. 底层加持:基于 LangGraph,开箱即用高级特性
create_agent 底层基于 LangGraph 构建,不用额外学习 LangGraph 知识,就能直接享受这些强大特性:
- 持久化:内置 checkpoint,对话跨会话自动保存
- 流式输出:实时流式返回 token、工具调用、推理轨迹
- 人在回路:敏感操作自动暂停,等待人工审批
- 时光回溯:回到对话任意节点,探索不同的提示词和路径
5. 结构化输出:更高效、更省钱
v1 版本的结构化输出能力也全面升级,解决了旧版本的痛点:
- 主循环集成:结构化输出直接在主循环生成,无需额外 LLM 调用
- 策略可选:模型可自主选择调用工具或使用服务商侧结构化输出
- 成本降低:减少额外 LLM 调用,节省 API 费用
结构化输出示例:获取标准化天气信息
from langchain.agents import create_agent
from langchain.agents.structured_output import ToolStrategy
from pydantic import BaseModel
# 定义结构化输出格式
class Weather(BaseModel):
temperature: float # 温度
condition: str # 天气状况
# 天气查询工具
def weather_tool(city: str) -> str:
"""Get the weather for a city."""
return f"it's sunny and 70 degrees in {city}"
# 创建代理并指定结构化输出策略
agent = create_agent(
"gpt-4o-mini",
tools=[weather_tool],
response_format=ToolStrategy(Weather)
)
# 调用代理
result = agent.invoke({
"messages": [{"role": "user", "content": "What's the weather in SF?"}]
})
# 直接获取结构化数据
print(repr(result["structured_response"]))
# 输出:Weather(temperature=70.0, condition='sunny')
📦 核心改进二:标准内容块 —— 跨服务商统一访问 LLM 功能
不同 LLM 服务商的输出格式千差万别?处理推理轨迹、工具调用要写一堆兼容代码?
LangChain v1 推出的 标准内容块(content_blocks) 完美解决这个问题!它提供了跨服务商的统一消息内容表示,目前支持 langchain-openai、langchain-anthropic、langchain-ollama,后续会扩展更多供应商。
1. 极简用法:一行代码遍历统一内容块
不管用哪个服务商的模型,都能用同一套 API 解析输出内容:
from langchain_anthropic import ChatAnthropic
# 初始化模型
model = ChatAnthropic(model="claude-sonnet-4-5-20250929")
# 调用模型
response = model.invoke("What's the capital of France?")
# 统一遍历内容块
for block in response.content_blocks:
if block["type"] == "reasoning":
print(f"📝 模型推理过程:{block['reasoning']}")
elif block["type"] == "text":
print(f"💬 回复内容:{block['text']}")
elif block["type"] == "tool_call":
print(f"🔧 工具调用:{block['name']}({block['args']})")
2. 核心优势:告别碎片化,拥抱标准化
- 提供者无关性:一套 API 搞定推理追踪、引用、内置工具(网页搜索、代码解释器等)
- 类型安全:所有内容块类型都有完整的类型提示,开发更省心
- 向下兼容:标准内容支持懒加载,不会造成破坏性变更
📁 核心改进三:简化命名空间 +langchain-classic—— 轻装上阵
LangChain v1 对 langchain 包的命名空间进行了大刀阔斧的精简,只保留代理开发的核心模块,让开发者不再面对眼花缭乱的功能,专注核心业务。
1. 精简后的命名空间:聚焦核心
精简后的 langchain 包只保留这些核心模块,大部分功能是为了方便开发者,从 langchain-core 重新导出的:
| 模块 | 包含内容 | 用途 |
|---|---|---|
langchain.agents |
create_agent、AgentState |
核心代理创建功能 |
langchain.messages |
消息类型、内容块、trim_messages |
消息处理与内容解析 |
langchain.tools |
@tool 装饰器、BaseTool |
工具定义与注册 |
langchain.chat_models |
init_chat_model、BaseChatModel |
统一模型初始化 |
langchain.embeddings |
Embeddings、init_embeddings |
嵌入模型相关 |
极简导入示例:
# 代理构建
from langchain.agents import create_agent
# 消息与内容处理
from langchain.messages import AIMessage, HumanMessage
# 工具定义
from langchain.tools import tool
# 模型初始化
from langchain.chat_models import init_chat_model
from langchain.embeddings import init_embeddings
2. 遗留功能新家:langchain-classic
那些用不到的遗留功能,比如旧版链、检索器、索引 API 等,都被迁移到了 langchain-classic 包中,保证核心包的轻量和聚焦。
(1)langchain-classic 包含什么?
- 遗留链与链的实现
- 检索器(比如
MultiQueryRetriever) - 索引 API
hub模块(提示词管理)- 其他已弃用功能
(2)如何使用遗留功能?
先安装 langchain-classic:
pip install langchain-classic
然后修改导入路径,把旧的 from langchain import ... 换成 from langchain_classic import ... 即可:
# 旧版导入
# from langchain.chains import LLMChain
# from langchain.retrievers import MultiQueryRetriever
# from langchain import hub
# 新版导入
from langchain_classic.chains import LLMChain
from langchain_classic.retrievers import MultiQueryRetriever
from langchain_classic import hub
🎉 总结:LangChain v1,开启代理开发新篇章
LangChain v1 不是简单的版本迭代,而是一次架构级的重构:
- 用
create_agent+ 中间件,解锁代理定制化的无限可能 - 用标准内容块,实现跨服务商的统一输出解析
- 用精简命名空间 +
langchain-classic,让框架轻装上阵
如果你正在做生产级 LLM 代理开发,LangChain v1 绝对值得一试!赶紧升级体验吧~
如果有地方解释得不确切,欢迎评论区纠正~
更多推荐

所有评论(0)