还在为 LangChain 旧版本的臃肿架构、混乱命名空间头疼?别慌!LangChain v1 携三大核心改进强势登场,专注生产环境的代理构建,彻底解决你的开发痛点。今天就带大家盘盘 LangChain v1 的新增内容,轻松上手新一代 LLM 应用开发框架~

本文带你解读LangChain v1.0版本的官方文档~

官方文档链接:https://docs.langchain.com/oss/python/releases/langchain-v1

🎯 核心升级总览:三大改进精简框架

LangChain v1 围绕三大核心方向对框架进行了全面精简,目标很明确 —— 打造轻量、高效、可定制的生产级代理开发基础:

  1. create_agent:构建代理的新标准,替代旧版 langgraph.prebuilt.create_react_agent
  2. 标准内容块(content_blocks:跨服务商统一访问现代 LLM 功能的新方案
  3. 简化命名空间:聚焦代理核心构建模块,遗留功能迁移至 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 的底层逻辑其实很清晰,就是一个标准化的代理执行循环

  1. 调用大模型生成指令
  2. 模型选择需要执行的工具
  3. 执行工具并获取结果
  4. 重复上述步骤,直到任务完成停止

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-openailangchain-anthropiclangchain-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_agentAgentState 核心代理创建功能
langchain.messages 消息类型、内容块、trim_messages 消息处理与内容解析
langchain.tools @tool 装饰器、BaseTool 工具定义与注册
langchain.chat_models init_chat_modelBaseChatModel 统一模型初始化
langchain.embeddings Embeddingsinit_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 绝对值得一试!赶紧升级体验吧~

如果有地方解释得不确切,欢迎评论区纠正~

Logo

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

更多推荐