4. LangChain 版本更新
LangChain v1 推出全新智能体构建框架,核心更新包括: 标准化 create_agent 函数替代旧方案,提供更简洁的智能体构建接口 创新中间件机制支持高度定制,包括数据脱敏、对话摘要、人工审批等生产级功能 基于LangGraph实现持久化、流式传输等企业级特性 优化结构化输出能力,直接集成到主循环中 升级命令:pip install -U langchain 新框架通过模块化设计和扩展
LangChain v1 新特性详解
LangChain v1 是一套专注于生产环境的智能体构建基础框架。本次更新围绕三大核心优化重构,让智能体开发更高效、更灵活:
- 全新的 create_agent 函数:成为 LangChain 1.0 中构建智能体的标准方式,替代旧版 langgraph.prebuilt.create_react_agent;
- 标准化内容块(content_blocks):新增 content_blocks 属性,统一跨服务商的现代大模型功能调用方式;
- 简化命名空间:langchain 核心包聚焦智能体构建必需组件,旧版功能迁移至 langchain-classic 包;
升级命令:
使用 pip 升级
pip install -U langchain
一、核心更新:create_agent 函数**
create_agent 是 LangChain 1.0 构建智能体的标准方案,相比旧版langgraph.prebuilt.create_react_agent,接口更简洁,且通过中间件支持更高程度的自定义。
基础使用示例
from langchain.agents import create_agent
#创建智能体
agent = create_agent(
model="claude-sonnet-4-5-20250929", # 模型名称
tools=[search_web, analyze_data, send_email], # 可调用工具列表
system_prompt="你是一名乐于助人的研究助手" # 系统提示词
)
#执行智能体任务
result = agent.invoke({
"messages": [
{"role": "user", "content": "研究人工智能安全趋势"}
]
})
底层工作流程
create_agent 基于基础智能体循环构建:
- 接收用户请求(request)
- 调用模型分析需求,决定是否执行工具
- 执行工具获取观察结果(observation)
- 重复“模型决策→工具执行”步骤,直至返回最终结果

二、关键特性:中间件(Middleware)
中间件是 create_agent 的核心亮点,提供高度可定制的扩展入口,大幅提升智能体构建上限。
智能体的高效运行离不开上下文工程 —— 在合适的时机为模型提供合适的信息。中间件通过可组合的抽象层,帮助你实现:
- 动态提示词控制;
- 对话摘要生成;
- 工具访问权限管控;
- 状态管理;
- 安全防护(guardrails)
1. 预构建中间件:
LangChain 提供多个常用预构建中间件,覆盖主流场景:
- 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"(?:<inline_LaTeX_Formula>?\d{2,4}<\inline_LaTeX_Formula>?[\s.-]?)?"
r"\d{3,4}[\s.-]?\d{4}"
),
strategy="block"
),
# 对话超过500令牌时自动摘要
SummarizationMiddleware(
model="claude-sonnet-4-5-20250929",
max_tokens_before_summary=500
),
# 发送邮件前需人工审批(支持“批准/编辑/拒绝”操作)
HumanInTheLoopMiddleware(
interrupt_on={
"send_email": {
"allowed_decisions": ["approve", "edit", "reject"]
}
}
),
]
)
2. 自定义中间件
可根据业务需求构建自定义中间件,通过在智能体执行的关键节点挂载钩子函数(Hook)实现扩展。
| 钩子函数 | 执行时机 | 适用场景 |
|---|---|---|
| before_agent | 调用智能体之前 | 验证输入数据 |
| before_model | 每次调用大模型之前 | 更新提示词、裁剪消息内容 |
| wrap_model_call | 包裹每次大模型调用 | 拦截并修改模型请求 / 响应 |
| wrap_tool_call | 包裹每次工具调用 | 拦截并修改工具执行逻辑 |
| after_model | 每次大模型返回响应之后 | 验证输出结果、应用安全防护规则 |
| after_agent | 智能体执行完成之后 | 保存结果、清理资源 |
| – | – | – |
自定义中间件示例(基于用户熟练度适配工具)
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]
# 更新请求中的模型和工具
request.model = model
request.tools = tools
return handler(request)
# 创建加载自定义中间件的智能体
agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[simple_search, advanced_search, basic_calculator, data_analysis],
middleware=[ExpertiseBasedToolMiddleware()],
context_schema=Context # 绑定上下文模型
)
三、底层支撑:基于 LangGraph 构建
create_agent 基于 LangGraph 框架实现,无需额外学习 LangGraph,即可原生获得以下生产级特性:
- 持久化(Persistence):内置检查点机制,对话状态跨会话自动保存;
- 流式传输(Streaming):实时流式返回令牌、工具调用结果和推理轨迹;
- 人机协同(Human-in-the-loop):敏感操作前暂停智能体执行,等待人工审批;
- 时间回溯(Time travel):对话可回退至任意节点,探索不同执行路径和提示词效果。
四、优化特性:结构化输出
create_agent 大幅优化了结构化输出能力,更适配生产环境需求:
- 主循环集成:结构化输出直接在主循环中生成,无需额外调用大模型,降低成本;
- 灵活策略:模型可自主选择 “调用工具” 或“使用服务商原生结构化输出”;
- 错误可控:通过 ToolStrategy 的 handle_errors参数,处理解析失败、多工具调用冲突等问题。
结构化输出使用示例
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:
"""获取指定城市的天气信息"""
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": "旧金山的天气怎么样?"}]
})
# 输出结构化结果
print(repr(result["structured_response"]))
# 输出:Weather(temperature=70.0, condition='sunny')
五、标准化特性:内容块(Content Blocks)
内容块功能目前仅支持以下集成包,后续将逐步扩展至更多服务商:
- langchain-anthropic
- langchain-aws
- langchain-openai
- langchain-google-genai
- langchain-ollama
全新的 content_blocks 属性提供了跨服务商统一的消息内容表示方式,无需适配不同服务商的返回格式
from langchain_anthropic import ChatAnthropic
# 初始化模型
model = ChatAnthropic(model="claude-sonnet-4-5-20250929")
# 发送请求
response = model.invoke("法国的首都是哪里?")
# 遍历统一格式的内容块
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']})")
内容块核心优势
- 服务商无关:无论使用哪个服务商的模型,都能通过同一 API 访问推理轨迹、引用来源、内置工具(网页搜索、代码解释器等);
- 类型安全:所有内容块类型均提供完整类型提示,开发更规范;
- 向后兼容:标准内容支持延迟加载,无破坏性变更。
六、简化命名空间:聚焦智能体核心组件
LangChain v1 精简了 langchain 包的命名空间,仅保留智能体构建必需的核心组件,大部分组件从 langchain-core 重导出,提供更聚焦的 API 体验。
核心命名空间说明
| 模块 | 包含功能 | 备注 |
|---|---|---|
| langchain.agents | create_agent、AgentState | 智能体创建核心功能 |
| langchain.messages | 消息类型、内容块、trim_messages | 从 langchain-core 重导出 |
| langchain.tools | @tool 装饰器、BaseTool、注入工具 | 从 langchain-core 重导出 |
| 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
更多推荐


所有评论(0)