Skip to main content

将代码库迁移到 LangChain v1.

本指南概述了 LangChain v1 与先前版本的主要差异。LangChain v1

简化版包

langchain 包的命名空间在 v1 版本中被大幅精简,专注于智能体的核心构建块。精简后的包使核心功能更易于发现和使用。

命名空间

langchain-classic

如果你之前使用了 langchain 包中的任何功能,你需要安装 langchain-classic 并更新你的导入语句:
  • 遗留链(LLMChain、ConversationChain 等)
  • 检索器(例如 MultiQueryRetriever 或 langchain.retrievers 模块的任何内容)
  • 索引 API
  • 中心化模块(用于程序化管理提示词)
  • 嵌入模块(例如 CacheBackedEmbeddings 和社区嵌入)
  • langchain-community 重导出
  • 其他已弃用功能
安装方式:

迁移到 create_agent

在版本 v1.0 之前,我们推荐使用 @[langgraph.prebuilt.create_react_agent][create_react_agent] 来构建智能体。现在我们推荐您使用 @[langchain.agents.create_agent][create_agent] 来构建智能体。 下表概述了从 @[create_react_agent] 到 @[create_agent] 的功能变更:

导入路径

智能体预构建的导入路径已从 langgraph.prebuilt 更新为 langchain.agents。 函数名称已从 @[create_react_agent] 更新为 @[create_agent]:
对于更多信息,请参考 智能体。

提示词

静态提示重命名

prompt 参数已重命名为 @[system_prompt]:

SystemMessage 到字符串

若在系统提示中使用 @[SystemMessage] 对象,需提取字符串内容:

动态提示

动态提示是核心上下文工程模式——根据当前对话状态调整模型输入。使用 @[@dynamic_prompt] 装饰器实现:

模型前钩子

预模型钩子现通过 before_model 方法实现为中间件。 此新模式更具扩展性——可定义多个中间件在模型调用前运行,复用不同智能体的通用模式。 常见用例包括:
  • 会话历史摘要
  • 消息截断
  • 输入 guardrails(如隐私信息脱敏)
v1 内置了摘要中间件选项:

模型后钩子

模型后置钩子现以 after_model 方法实现为中间件。 这种新模式更具可扩展性——你可以定义多个中间件在模型调用后执行, 跨不同智能体复用常见模式。 常见的用例包括: v1 包含一个内置的中间件,用于人类在环中的工具调用审批:

自定义状态

自定义状态通过添加额外字段扩展了默认智能体状态。您可以通过两种方式定义自定义状态:
  1. 通过 @[state_schema] 在 @[create_agent] 上 - 最适合用于工具中的状态
  2. 通过中间件 - 最适合用于由特定中间件钩子和附加到该中间件的工具管理的状态
通过中间件定义自定义状态比通过 @[state_schema] 在 @[create_agent] 上定义状态更受推荐,因为它允许你将状态扩展在概念上限制在相关的中间件和工具中。state_schema 仍然在 create_agent 上支持以保持向后兼容性。

通过 state_schema 定义状态

当您的自定义状态需要被工具访问时,使用 @[state_schema] 参数:

通过中间件定义状态

中间件也可以通过设置 @[state_schema] 属性来定义自定义状态。 这有助于将状态扩展在概念上限定在相关的中间件和工具范围内。
请参阅 中间件文档,以获取更多关于通过中间件定义自定义状态的详细信息。

状态类型限制

@[create_agent] only supports TypedDict for state schemas. Pydantic models and dataclasses are no longer supported.
直接继承自 langchain.agents.AgentState 而不是 BaseModel 或使用 dataclass 进行装饰。 如果您需要进行验证,请在中间件钩子中处理。

模型

动态模型选择允许您根据运行时上下文(例如,任务复杂度、成本约束或用户偏好)选择不同的模型。在 langgraph-prebuilt] 的 v0.6 版本中发布的 @[create_react_agent] 支持通过传递给 model 参数的可调用对象进行动态模型和工具选择。 此功能已迁移到 v1 版本的中介接口中。

动态模型选择

预绑定模型

为了更好地支持结构化输出,@[create_agent] 不再接受带有工具或配置的预绑定模型:
动态模型函数如果不使用结构化输出,可以返回预绑定的模型。

工具

@[tools][create_agent(tools)] 参数用于 @[create_agent],它接受一个列表:
  • LangChain @[BaseTool] 实例(使用 @[@tool] 装饰的函数)
  • 带有正确类型提示和文档字符串的可调用对象(函数)
  • dict,表示内置提供者工具
该参数将不再接受 @[ToolNode] 实例。

处理工具错误

您现在可以通过实现 wrap_tool_call 方法的中间件来配置工具错误的处理。

结构化输出

节点变更

结构化输出原本是在主智能体之外的独立节点中生成的。现在情况已不再如此。 我们在主循环中生成结构化输出,从而降低成本和延迟。

工具和提供者策略

在 v1 版本中,有两个新的结构化输出策略:
  • ToolStrategy 使用人工工具调用生成结构化输出
  • ProviderStrategy 使用提供商原生的结构化输出生成

提示词输出已移除

提示词输出 已不再通过 response_format 参数支持。与人工工具调用和提供商原生结构化输出等策略相比,提示词输出并未被证明特别可靠。

流式节点名称重命名

当从智能体流式传输事件时,节点名称已从 "agent" 更改为 "model",以更好地反映节点的用途。

运行时上下文

当你调用一个智能体时,通常需要传递两种类型的数据:
  • 在对话过程中会变化的动态状态(例如:消息历史)
  • 在对话过程中不会变化的静态上下文(例如:用户元数据) 在 v1 版本中,静态上下文通过将 context 参数设置为 invoke 和 stream 来支持。
旧的 config["configurable"] 模式仍然适用于向后兼容,但建议新应用或迁移到 v1 的应用使用新的 context 参数。

标准内容

在 v1 版本中,消息获得了与提供者无关的标准内容块。通过 @[message.content_blocks][content_blocks] 访问它们,以在各个提供者之间提供一致的、类型化的视图。现有的 @[message.content][BaseMessage(content_blocks)] 字段保持不变,用于字符串或提供者本地的结构。

变更内容

  • 新增 @[content_blocks][BaseMessage(content_blocks)] 属性在消息中用于标准化内容
  • 标准化块形状,文档记录在 Messages
  • 可选地将标准块序列化到 content 通过 LC_OUTPUT_VERSION=v1 或 output_version="v1"

读取标准化内容

创建多模态消息

示例块形状

查看内容块 参考 以获取更多详细信息。

序列化标准内容

标准内容块默认不会序列化到 content 属性中。如果您需要访问 content 属性中的标准内容块(例如,在向客户端发送消息时),可以选择将它们序列化到 content。

不兼容变更

已移除对 Python 3.9 的支持

所有 LangChain 包现在都需要 Python 3.10 或更高版本。Python 3.9 将在 2025 年 10 月达到 结束生命周期。

更新对话模型的返回类型

对话模型调用的返回类型签名已从 @[BaseMessage] 修复为 @[AIMessage]。实现 @[bind_tools][BaseChatModel.bind_tools] 的自定义对话模型应更新其返回签名:

OpenAI 响应 API 的默认消息格式

当与响应 API 交互时,langchain-openai 现在默认将响应项存储在消息 content 中。如需恢复旧行为,可将 LC_OUTPUT_VERSION 环境变量设为 v0,或在实例化 @[ChatOpenAI] 时指定 output_version="v0"。

默认 max_tokens 在 langchain-anthropic

max_tokens 参数在 langchain-anthropic 中现在默认根据所选模型设置更高值,而非之前的默认值 1024。若您依赖旧默认值,请显式设置 max_tokens=1024。

遗留代码迁移至 langchain-classic

标准接口和智能体之外的现有功能已迁移至 langchain-classic 包。详见 简化命名空间 节了解核心 langchain 包的内容及迁移至 langchain-classic 包的部分。

已删除弃用 API

1.0 版本中已标记为废弃并计划删除的方法、函数和其他对象已被移除。

文本属性

消息对象上使用 .text() 方法的模式应移除括号,现已成为属性:
现有使用模式(即 .text())仍可正常工作但会触发警告。方法形式将在 v2 中移除。

从 AIMessage 移除 example 参数

@[AIMessage] 对象已移除 example 参数。建议改用 additional_kwargs 传递额外元数据。

次要变更

  • AIMessageChunk 对象新增 chunk_position 属性,位置 'last' 表示流式输出的最终片段。非最终片段时 chunk_position 将为 None。
  • LanguageModelOutputVar 类型已从 @[BaseMessage] 改为 @[AIMessage]。
  • AIMessageChunk.add 的消息片段合并逻辑更新了更复杂的最终 ID 选择机制,优先采用提供方分配的 ID 而非 LangChain 生成 ID。
  • 默认文件打开编码已更改为 utf-8。
  • 标准测试现使用多模态内容块。

归档文档

旧文档已归档供参考:
官方原文:src/oss/python/migrate/langchain-v1.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026