LangChain v1 是一个专注于生产环境的构建智能体的基础框架。 我们围绕三个核心改进简化了框架:
create_agent
在 LangChain 中构建智能体的新标准,取代了 langgraph.prebuilt.create_react_agent.
Standard content blocks
一个新的 content_blocks 属性,可跨提供商统一访问现代 LLM 功能。
Simplified namespace
langchain 命名空间已简化,专注于智能体的基本构建块,旧功能已移至 langchain-classic.
要升级,
pip install -U langchain
uv add langchain
有关完整变更列表,请参阅 迁移指南.
create_agent
create_agent 是在 LangChain 1.0 中构建智能体的标准方式。它提供了比 langgraph.prebuilt.create_react_agent 更简单的界面,同时通过使用 middleware.
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 基于基本的智能体循环构建——调用模型,让它选择要执行的工具,然后在不再调用工具时完成:
更多信息请参阅 智能体.
中间件
中间件是 create_agent 的定义特性。它提供了一个高度可定制的入口点,提升了你能够构建的内容的上限。
优秀的智能体需要 上下文工程:在正确的时间向模型提供正确的信息。中间件帮助你通过可组合的抽象控制动态提示词、对话摘要、选择性工具访问、状态管理和防护栏。
预构建中间件
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-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"]
}
}
),
]
)
自定义中间件
你也可以构建自定义中间件来满足你的需求。中间件在智能体执行的每个步骤都暴露了钩子:
通过在 AgentMiddleware 类的子类上实现这些钩子来构建自定义中间件:
| 钩子 | 运行时机 | 用例 |
|---|---|---|
before_agent | 在调用智能体之前 | 加载内存,验证输入 |
before_model | 每次 LLM 调用前 | 更新提示词,裁剪消息 |
wrap_model_call | Around each LLM call | Intercept and modify requests/responses |
wrap_tool_call | 每次工具调用时 | 拦截并修改工具执行 |
after_model | 每次 LLM 响应后 | 验证输出,应用防护栏 |
after_agent | 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.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,您自动获得对长时间运行和可靠 Agent 的内置支持,通过:
Persistence
对话通过内置检查点自动在会话间持久化
Streaming
实时流式传输 token、工具调用和推理追踪
Human-in-the-loop
在敏感操作前暂停 Agent 执行以等待人工审批
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-5.4-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')`
错误处理:通过 handle_errors 参数控制错误处理 ToolStrategy: - **解析错误**:模型生成的数据与期望结构不匹配 - **多次工具调用**:模型为结构化输出模式生成 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 包命名空间,专注于代理的基本构建块。精简的命名空间公开了最有用和最相关的功能:
命名空间
| 模块 | 可用内容 | 备注 |
|---|---|---|
langchain.agents | create_agent, AgentState | 核心代理创建功能 |
langchain.messages | 消息类型、内容块、trim_messages | 从 @[ 中重新导出 |
langchain.tools | @tool, BaseTool | 注入辅助函数 |
langchain.chat_models | init_chat_model, BaseChatModel | 统一模型初始化 |
langchain.embeddings | Embeddings, init_embeddings | 嵌入模型 |
大多数这些都是从以下库重新导出的 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
uv add langchain-classic
然后更新您的导入:
from langchain import ... # [!code --]
from langchain_classic import ... # [!code ++]
from langchain.chains import ... # [!code --]
from langchain_classic.chains import ... # [!code ++]
from langchain.retrievers import ... # [!code --]
from langchain_classic.retrievers import ... # [!code ++]
from langchain import hub # [!code --]
from langchain_classic import hub # [!code ++]
迁移指南
查看我们的 迁移指南 以获取将代码更新到 LangChain v1 的帮助。
报告问题
请在 GitHub 上报告使用 'v1' 标签发现的任何 1.0 问题。.
附加资源
LangChain 1.0
阅读公告
Middleware guide
深入了解中间件
Agents Documentation
完整代理文档
Message Content
新的内容块 API
Migration guide
如何迁移到 LangChain v1
GitHub
报告问题或贡献