Skip to main content
本迁移指南概述了 LangChain v1 中的主要变更。若要了解 v1 的新特性,请参阅 介绍文章 升级方法:
npm install langchain@latest @langchain/core@latest

createAgent

在 v1 中,React agent 预构建功能已移入 langchain 包。下表概述了功能变更:
部分变更
导入路径包从 @langchain/langgraph/prebuilts 移动到 langchain
提示(Prompts)参数重命名为 systemPrompt,动态提示使用 middleware
模型前钩子被带有 beforeModel 方法的 middleware 取代
模型后钩子被带有 afterModel 方法的 middleware 取代
自定义状态在 middleware 中定义,仅支持 zod 对象
模型选择通过 middleware 动态选择,不再支持预绑定模型
工具(Tools)工具错误处理移到实现 wrapToolCall 的 middleware
结构化输出移除基于 prompt 的生成,使用 toolStrategy/providerStrategy
流节点名称节点名从 "agent" 改为 "model"
运行时上下文使用 context 属性替代 config.configurable
命名空间精简包以专注代理构建块,遗留代码移至 @langchain/classic

导入路径

React agent 预构建的导入路径已从 @langchain/langgraph/prebuilts 更改为 langchain,函数名也从 createReactAgent 改为 createAgent
import { createReactAgent } from "@langchain/langgraph/prebuilts"; // 旧
import { createAgent } from "langchain"; // 新

提示(Prompts)

静态提示重命名

prompt 参数现在重命名为 systemPrompt
import { createAgent } from "langchain";

agent = createAgent({
  model,
  tools,
  systemPrompt: "You are a helpful assistant.",
});

SystemMessage

如果在系统提示中使用 SystemMessage 对象,v1 中现在直接使用字符串内容。

动态提示

动态提示是上下文工程的重要模式 —— 它根据当前对话状态动态调整发送给模型的信息。请使用 dynamicSystemPromptMiddleware 实现此功能(示例见原文)。

模型前钩子

模型前钩子现在作为具有 beforeModel 方法的 middleware 实现。该模式更具扩展性,允许在模型调用前运行多个中间件并在代理间复用。 常见用例包括:摘要会话历史、裁剪消息、输入保护(如 PII 屏蔽)。v1 包含内置的摘要中间件示例。

模型后钩子

模型后钩子现在作为具有 afterModel 方法的 middleware 实现,可用于组合多个模型响应后的处理器。常见用例包括人工介入审批与输出保护。v1 包含内置的人机环节中间件示例。

自定义状态

自定义状态现在在 middleware 中通过 stateSchema 属性定义,请使用 Zod 来声明在代理运行期间携带的额外状态字段。

模型

动态模型选择现在通过 middleware 实现。使用 wrapModelCall 可根据状态或运行时代码替换模型(以及工具)。预绑定模型(带工具的模型实例)在使用结构化输出时不建议使用。

工具(Tools)

createAgenttools 参数接受用 tool 创建的函数、LangChain 工具实例或代表内置提供者工具的对象。工具的错误处理现在建议通过实现 wrapToolCall 的 middleware 来配置。

结构化输出

结构化输出不再作为单独节点生成,而是在主循环中生成(无需额外 LLM 调用),从而降低成本与延迟。v1 支持两种策略:
  • toolStrategy:使用人工工具调用生成结构化输出
  • providerStrategy:使用提供者原生结构化输出生成
另外移除了通过自定义 responseFormat 中的提示来生成结构化输出的做法。

流节点名称重命名

在从代理流式传输事件时,节点名称已从 "agent" 更改为 "model",以更准确地反映节点目的。

运行时上下文

调用代理时,请通过 context 配置参数传入只读配置(例如 userId)。config.configurable 的老模式仍然兼容,但建议新应用或迁移应用使用 context 参数。

标准内容

在 v1 中,消息获得了与提供者无关的标准内容块(standard content blocks),可以通过 message.contentBlocks 访问以获得一致的、类型化的视图。现有的 message.content 字段仍然保留用于字符串或提供者原生结构。

变更内容

  • 新增 contentBlocks 属性用于标准化内容
  • 新的 TypeScript 类型 ContentBlock 提供强类型支持
  • 可选通过环境变量或 outputVersion: "v1" 将标准块序列化到 content

创建多模态消息示例

(示例见原文)

精简包

langchain 包命名空间被精简以专注于构建代理的基础构件。遗留功能已移至 @langchain/classic

导出

v1 包含的模块示例:Agents、Messages、Tools、Chat models 等(详见原文)。

@langchain/classic

若使用遗留链、索引 API 或 @langchain/community 导出的功能,请安装 @langchain/classic 并更新导入路径(示例见原文)。

重大变更

放弃 Node 18 支持

所有 LangChain 包现在要求 Node.js 20 或更高版本。Node.js 18 已在 2025 年 3 月达到生命周期终点。

新的构建输出

所有包的构建现在采用打包器生成,而非直接输出原始 TypeScript 文件;如曾直接从 dist/ 导入文件,请更新到新的模块系统。

遗留代码移至 @langchain/classic

遗留功能已移至 @langchain/classic 包(详情见上文)。

已移除的废弃 API

在 v1 中,计划移除且已废弃的 API 已被删除(详见原文列举)。