LangChain v1 新特性详解

LangChain v1 是一套专注于生产环境的智能体构建基础框架。本次更新围绕三大核心优化重构,让智能体开发更高效、更灵活:

  1. 全新的 create_agent 函数:成为 LangChain 1.0 中构建智能体的标准方式,替代旧版 langgraph.prebuilt.create_react_agent;
  2. 标准化内容块(content_blocks):新增 content_blocks 属性,统一跨服务商的现代大模型功能调用方式;
  3. 简化命名空间: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 基于基础智能体循环构建:

  1. 接收用户请求(request)
  2. 调用模型分析需求,决定是否执行工具
  3. 执行工具获取观察结果(observation)
  4. 重复“模型决策→工具执行”步骤,直至返回最终结果
    在这里插入图片描述

二、关键特性:中间件(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']})")

内容块核心优势

  1. 服务商无关:无论使用哪个服务商的模型,都能通过同一 API 访问推理轨迹、引用来源、内置工具(网页搜索、代码解释器等);
  2. 类型安全:所有内容块类型均提供完整类型提示,开发更规范;
  3. 向后兼容:标准内容支持延迟加载,无破坏性变更。

六、简化命名空间:聚焦智能体核心组件

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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐