Skip to main content
LangChain v1 是一个专注、生产就绪的代理构建基础。 我们围绕三项核心改进精简了框架: 升级方式:
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-6",
    tools=[search_web, analyze_data, send_email],
    system_prompt="You are a helpful research assistant."
)

result = agent.invoke({
    "messages": [
        {"role": "user", "content": "Research AI safety trends"}
    ]
})
在底层,create_agent 基于基本代理循环构建——调用模型,让模型选择要执行的工具,然后在不再调用工具时结束:
Core agent loop diagram
更多信息请参阅代理

中间件

中间件是 create_agent 的核心特性。它提供了高度可定制的入口点,提升了您可以构建内容的上限。 优秀的代理需要上下文工程:在正确的时间将正确的信息传递给模型。中间件通过可组合的抽象帮助您控制动态提示、对话摘要、选择性工具访问、状态管理和护栏。

预构建中间件

LangChain 为常见模式提供了几个预构建中间件,包括:
from langchain.agents import create_agent
from langchain.agents.middleware import (
    PIIMiddleware,
    SummarizationMiddleware,
    HumanInTheLoopMiddleware
)


agent = create_agent(
    model="claude-sonnet-4-6",
    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"
        ),
        SummarizationMiddleware(
            model="claude-sonnet-4-6",
            trigger={"tokens": 500}
        ),
        HumanInTheLoopMiddleware(
            interrupt_on={
                "send_email": {
                    "allowed_decisions": ["approve", "edit", "reject"]
                }
            }
        ),
    ]
)

自定义中间件

您也可以构建自定义中间件以满足您的需求。中间件在代理执行的每个步骤公开钩子:
Middleware flow diagram
通过在 AgentMiddleware 类的子类上实现以下任意钩子来构建自定义中间件:
钩子运行时机使用场景
before_agent调用代理之前加载记忆,验证输入
before_model每次 LLM 调用之前更新提示,修剪消息
wrap_model_call围绕每次 LLM 调用拦截并修改请求/响应
wrap_tool_call围绕每次工具调用拦截并修改工具执行
after_model每次 LLM 响应之后验证输出,应用护栏
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-6",
    tools=[
        simple_search,
        advanced_search,
        basic_calculator,
        data_analysis
    ],
    middleware=[ExpertiseBasedToolMiddleware()],
    context_schema=Context
)
更多信息请参阅完整中间件指南

基于 LangGraph 构建

由于 create_agent 基于 LangGraph 构建,您可以自动获得对长时间运行和可靠代理的内置支持,包括:

Persistence

通过内置检查点,对话可以跨会话自动持久化

Streaming

实时流式传输 token、工具调用和推理追踪

Human-in-the-loop

在敏感操作前暂停代理执行以获得人工审批

Time travel

将对话回退到任意时间点,探索替代路径和提示
您无需学习 LangGraph 即可使用这些功能——开箱即用。

结构化输出

create_agent 改进了结构化输出生成:
  • 主循环集成:结构化输出现在在主循环中生成,无需额外的 LLM 调用
  • 结构化输出策略:模型可以在调用工具或使用提供商端结构化输出生成之间选择
  • 降低成本:消除了额外 LLM 调用带来的费用
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-4.1-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"]))
# results in `Weather(temperature=70.0, condition='sunny')`
错误处理:通过 ToolStrategyhandle_errors 参数控制错误处理:
  • 解析错误:模型生成的数据与期望结构不匹配
  • 多次工具调用:模型为结构化输出 schema 生成 2 个或更多工具调用

标准内容块

内容块支持目前仅适用于以下集成:内容块的更广泛支持将在更多提供商中逐步推出。
新的 content_blocks 属性引入了一种跨提供商通用的消息内容标准表示:
from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model="claude-sonnet-4-6")
response = model.invoke("What's the capital of France?")

# Unified access to content blocks
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']})")

优势

  • 提供商无关:无论使用哪个提供商,都可以使用相同的 API 访问推理追踪、引用、内置工具(网络搜索、代码解释器等)和其他功能
  • 类型安全:所有内容块类型都有完整的类型提示
  • 向后兼容:标准内容可以延迟加载,因此不存在相关的破坏性变更
更多信息请参阅我们关于内容块的指南。

简化包

LangChain v1 精简了 langchain 包命名空间,专注于代理的核心构建块。精简后的命名空间公开了最有用和最相关的功能:

命名空间

ModuleWhat’s availableNotes
langchain.agentscreate_agent, AgentStateCore agent creation functionality
langchain.messagesMessage types, content blocks, trim_messagesRe-exported from langchain-core
langchain.tools@tool, BaseTool, injection helpersRe-exported from langchain-core
langchain.chat_modelsinit_chat_model, BaseChatModelUnified model initialization
langchain.embeddingsEmbeddings, init_embeddingsEmbedding models
其中大多数是为了方便而从 langchain-core 重新导出的,这为您提供了一个专注于构建代理的 API 接口。
# Agent building
from langchain.agents import create_agent

# Messages and content
from langchain.messages import AIMessage, HumanMessage

# Tools
from langchain.tools import tool

# Model initialization
from langchain.chat_models import init_chat_model
from langchain.embeddings import init_embeddings

langchain-classic

遗留功能已移至 langchain-classic,以保持核心包的精简和专注。 langchain-classic 中包含什么:
  • 遗留链和链实现
  • 检索器(例如 MultiQueryRetriever 或以前 langchain.retrievers 模块中的任何内容)
  • 索引 API
  • Hub 模块(用于以编程方式管理提示)
  • langchain-community 导出
  • 其他已弃用的功能
如果您使用这些功能,请安装 langchain-classic
pip install langchain-classic
然后更新您的导入:
from langchain import ...  
from langchain_classic import ...  

from langchain.chains import ...  
from langchain_classic.chains import ...  

from langchain.retrievers import ...  
from langchain_classic.retrievers import ...  

from langchain import hub  
from langchain_classic import hub  

迁移指南

请参阅我们的迁移指南以获取将代码更新到 LangChain v1 的帮助。

问题反馈

请在 GitHub 上使用 'v1' 标签报告 1.0 版本发现的任何问题。

更多资源

另请参阅