将代码库迁移到 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(如隐私信息脱敏)
模型后钩子
模型后置钩子现以after_model 方法实现为中间件。
这种新模式更具可扩展性——你可以定义多个中间件在模型调用后执行,
跨不同智能体复用常见模式。
常见的用例包括:
- 人在回路
- 输出护栏
自定义状态
自定义状态通过添加额外字段扩展了默认智能体状态。您可以通过两种方式定义自定义状态:- 通过 @[
state_schema] 在 @[create_agent] 上 - 最适合用于工具中的状态 - 通过中间件 - 最适合用于由特定中间件钩子和附加到该中间件的工具管理的状态
通过中间件定义自定义状态比通过 @[
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。
Learn more: Messages, Standard content blocks, and Multimodal.
不兼容变更
已移除对 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 生成,以英文原文为准。