一文带你了解LangChain v1.0版本三大核心升级内容

引言

LangChain v1.0作为首个稳定的生产版本,标志着框架从实验性工具包正式转型为‌企业级生产就绪的智能体开发平台。v1.0版本围绕着三大核心进行了升级,通过 create_agent 创建智能体来替代分散的旧版API,并支持中间件机制。引入标准内容块统一内容处理规范。简化命名空间和包结构,提高开发效率,增强可维护性。

一. create_agent

create_agent 是LangChain v1.0中构建智能体的标准方式,相较于langgraph.prebuilt.create_react_agent,该接口提供了更简洁的交互方式,同时通过中间件机制实现了更高的定制化潜力。在底层实现上,create_agent 构建于基础智能体循环之上,该循环通过调用模型、允许其选择并执行工具,并在模型决定不再调用任何工具时完成作业。
在这里插入图片描述

1.1 核心参数

  • model:接收一个推理模型实例或者模型名称的字符串。
  • tools:接收一个由@tool装饰器封装的函数或者BaseTool的实例或者任何 poython可调用的函数或者包含工具名称、描述等元数据的字典。
  • system_prompt:系统级提示词,引导模型行为。
  • middleware:接收中间件数组,它允许你在智能体循环的特定阶段(如模型调用前、工具执行后)注入自定义逻辑,用于拦截并修改智能体的执行流程。

1.2 基础用法

from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from pydantic import SecretStr

llm = ChatOpenAI(
    model="kimi-k2-0711-preview",  # 模型名称
    base_url="https://api.moonshot.cn/v1",  # 设置api端点
    api_key=SecretStr("your api key")  # api密钥
)

# 准备工具函数
@tool
def get_weather(city: str) -> str:
    """获取指定城市的天气"""
    return f"当前{city}天气晴朗,气温25℃"

# 创建智能体
agent = create_agent(
    model=llm,
    tools=[get_weather],
    system_prompt="你是一个天气查询助手,使用工具获取实时天气"
)

# 执行调用
response = agent.invoke({
    "messages": [{"role": "user", "content": "北京今天天气怎么样?"}]
})

print(response)

在这里插入图片描述

1.3 中间件

中间件是 create_agent 的定义性特征。它提供了一个高度可定制的入口点,显著提升了可构建应用的功能上限。卓越的智能体需要上下文工程,在恰当的时间将正确的信息传递给模型。中间件通过可组合的抽象机制,帮助开发者实现动态提示管理、对话摘要、选择性工具访问、状态管理等控制。

1.3.1 Prebuilt middleware

LangChain 为几种常见模式提供了一系列预构建的中间件,包括:

  • PIIMiddleware:在将数据发送至模型之前,对敏感信息进行编校处理。
  • HumanInTheLoopMiddleware:在对话历史过长时,自动对其进行压缩总结。
  • SummarizationMiddleware:在执行敏感工具调用前,要求获得人工批准。

基础用法

from langchain.agents import create_agent
from langchain.agents.middleware import (
    PIIMiddleware,
    SummarizationMiddleware,
    HumanInTheLoopMiddleware
)
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from pydantic import SecretStr

# 创建LLM客户端
llm = ChatOpenAI(
    model="kimi-k2-0711-preview",
    base_url="https://api.moonshot.cn/v1",
    api_key=SecretStr("your api key")  # 替换为实际API密钥
)

# 定义邮件读取工具
@tool
def read_email(email_id: str) -> str:
    """读取指定ID的邮件内容"""
    # 模拟邮件内容
    sample_emails = {  # 修正变量名拼写错误
        "001": "主题: 项目会议通知\n发件人: john.doe@company.com\n内容: 请于明天下午2点参加项目评审会议。\n联系电话: +86-138-0013-8000",
        "002": "主题: 财务报告\n发件人: finance@company.com\n内容: 季度财务报告已准备就绪,请查收附件。",
        "003": "主题: 紧急事务\n发件人: urgent@company.com\n内容: 请立即回复确认收到此邮件。"
    }
    return sample_emails.get(email_id, "邮件未找到")

# 定义邮件发送工具
@tool
def send_email(recipient: str, subject: str, content: str) -> str:
    """发送邮件到指定收件人"""
    return f"邮件已发送至: {recipient}\n主题: {subject}\n内容: {content}"

# 创建邮件处理智能体
agent = create_agent(
    model=llm,
    tools=[read_email, send_email],
    middleware=[
        PIIMiddleware("email", strategy="redact", apply_to_input=True),
        PIIMiddleware(
            "phone_number",
            detector=r"(?:\+?\d{1,3}[-.\s]?)?\(?\d{1,4}\)?[-.\s]?\d{1,4}[-.\s]?\d{1,9}",
            strategy="redact"
        ),
        SummarizationMiddleware(
            model=llm,
            max_tokens_before_summary=500
        ),
        HumanInTheLoopMiddleware(
            interrupt_on={
                "send_email": {
                    "allowed_decisions": ["approve", "edit", "reject"]  # 修正拼写错误
                }
            }
        ),
    ],
    system_prompt="你是一个邮件助手,可以读取邮件和发送邮件。在发送邮件前需要人工审核。"
)

# 示例使用
if __name__ == "__main__":
    # 测试读取邮件 - 使用正确的调用格式
    response1 = agent.invoke({
        "messages": [{
            "role": "user",
            "content": "请读取邮件ID为001的邮件内容"
        }]
    })
    print("=== 邮件读取结果 ===")
    print(response1)

    # 测试发送邮件(会触发人工审核)
    response2 = agent.invoke({
        "messages": [{
            "role": "user",
            "content": "请发送邮件给alice@example.com,主题为'项目进展',内容为'项目按计划进行中'"
        }]
    })
    print("\n=== 邮件发送结果 ===")
    print(response2)

1.3.2 Custom middleware

LangChain v1.0的自定义中间件通过钩子函数允许开发者在 AI Agent 的执行流程中插入自定义逻辑,中间件会在智能体执行的每个步骤中暴露钩子,使开发者能够灵活地控制流程、增强安全性、优化输出,并实现复杂的业务逻辑。这种设计类似于管道式处理,让开发者可以像搭积木一样组合不同的功能模块,从而构建出更强大、更可控的 AI 应用,而无需修改核心框架代码。
在这里插入图片描述

钩子运行时机使用场景
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":
            # More powerful model
            model = ChatOpenAI(model="gpt-5")
            tools = [advanced_search, data_analysis]
        else:
            # Less powerful model
            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
)

二. Standard content blocks

标准化内容块是解决多模型开发中输入输出格式不一致问题的核心设计,旨在为不同模型厂商提供统一的结构化规范‌。新的 content_blocks 属性引入了一种适用于各供应商的消息内容标准表示方法,这种标准化使得无论底层使用哪个模型提供商(Anthropic、OpenAI等),开发者都能用相同的方式处理输出内容。

2.1. 基础用法

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"Model reasoning: {block['reasoning']}")
    elif block["type"] == "text":
        print(f"Response: {block['text']}")
    elif block["type"] == "tool_call":
        print(f"Tool call: {block['name']}({block['args']})")

三. Simplified package

LangChain v1.0版本简化了 LangChain 包的命名空间,专注于为智能体提供基本构建模块,经过优化的命名空间展示了最有用和最相关的功能。

模块核心功能说明
langchain.agentscreate_agent, AgentState智能体核心创建功能
langchain.messagesMessage types, content blocks, trim_messages从 @langchain-core 重新导出
langchain.tools@tool, BaseTool, injection helpers从 @langchain-core 重新导出
langchain.chat_modelsinit_chat_model, BaseChatModel统一的模型初始化方法
langchain.embeddingsEmbeddings, init_embeddings嵌入模型

其中大部分内容是从 langchain-core 重新导出的,这为开发者构建智能体提供了一个集中的 API 接口。LangChain已将遗留功能迁移至langchain-classic包,旨在保持核心软件包的精简与功能聚焦,若需使用旧版功能,请安装langchain-classic依赖包。

3.1 基础用法

# 构建智能体
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

四. 总结

本文介绍了LangChain v1.0版本核心升级内容。新版本引入了统一的 create_agent 函数,用于创建各种类型的代理,简化了代理的构建流程。通过 Standard Content Blocks 彻底重构了与模型交互的方式,通过统一的内容块接口(如 reasoning、text、tool_call 等类型)实现了跨模型兼容性。LangChain v1.0版本通过架构的精简与标准化,降低了技术门槛,为构建可靠、可扩展的 AI 应用奠定了坚实基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值