createAgent
在 v1 中,react agent 预制件现在位于 langchain 包中。下表概述了功能上的变化:
| 部分 | 变化内容 |
|---|---|
| 导入路径 | 包从 @langchain/langgraph/prebuilts 移至 langchain |
| 提示词 | 参数重命名为 systemPrompt,动态提示词使用中间件 |
| 模型前钩子 | 替换为具有 beforeModel 方法的中间件 |
| 模型后钩子 | 替换为具有 afterModel 方法的中间件 |
| 自定义状态 | 在中间件中定义,仅支持 zod 对象 |
| 模型 | 通过中间件动态选择,不支持预绑定工具模型 |
| 工具 | 工具错误处理移至带有 wrapToolCall 的中间件 |
| 结构化输出 | 移除了 prompted output,使用 toolStrategy/providerStrategy |
| 流式节点名称 | 节点名称从 "agent" 改为 "model" |
| 运行时上下文 | 使用 context 属性替代 config.configurable |
| 命名空间 | 精简为专注于 agent 构建块,旧代码移至 @langchain/classic |
导入路径
react agent 预制件的导入路径已从@langchain/langgraph/prebuilts 改为 langchain。函数名从 createReactAgent 改为 createAgent:
提示词
静态提示词重命名
prompt 参数已重命名为 systemPrompt:
SystemMessage
如果在系统提示词中使用 SystemMessage 对象,现在将直接使用字符串内容:
动态提示词
动态提示词是一种核心的上下文工程模式——它根据当前对话状态来调整发送给模型的内容。为此,请使用dynamicSystemPromptMiddleware:
模型前钩子
模型前钩子现在作为带有beforeModel 方法的中间件实现。这种模式更具可扩展性——你可以定义多个中间件在模型调用前运行,并在多个 agent 间复用它们。
常见用例包括:
- 摘要对话历史
- 修剪消息
- 输入护栏,如 PII 脱敏
模型后钩子
模型后钩子现在作为带有afterModel 方法的中间件实现。这使你可以在模型响应后组合多个处理程序。
常见用例包括:
- 人机协作审批
- 输出护栏
自定义状态
自定义状态现在通过中间件的stateSchema 属性定义。使用 Zod 声明在 agent 运行期间携带的额外状态字段。
模型
动态模型选择现在通过中间件实现。使用wrapModelCall 根据状态或运行时上下文切换模型(和工具)。在 createReactAgent 中,这是通过传递给 model 参数的函数实现的。
该功能在 v1 中已移植到中间件接口。
动态模型选择
预绑定工具模型
为了更好地支持结构化输出,createAgent 应该接收一个普通模型(字符串或实例)和一个单独的 tools 列表。在使用结构化输出时,避免传入已预绑定工具的模型。
工具
createAgent 的 tools 参数接受:
- 使用
tool函数创建的工具 - LangChain 工具实例
- 表示内置 provider 工具的对象
处理工具错误
现在你可以通过实现了wrapToolCall 方法的中间件来配置工具错误处理。
结构化输出
节点变更
结构化输出过去是在独立于主 agent 的节点中生成的。现在不再如此。结构化输出在主循环中生成(无需额外的 LLM 调用),降低了成本和延迟。工具和 provider 策略
在 v1 中,有两种策略:toolStrategy使用人造工具调用来生成结构化输出providerStrategy使用 provider 原生的结构化输出生成
移除 prompted output
通过responseFormat 中的自定义指令实现的 prompted output 已被移除,取而代之的是上述策略。
流式节点名称重命名
在从 agent 流式传输事件时,节点名称从"agent" 改为 "model",以更好地反映节点的用途。
运行时上下文
调用 agent 时,通过context 配置参数传递静态、只读的配置。这替代了使用 config.configurable 的模式。
旧的
config.configurable 模式仍然有效以实现向后兼容,但对于新应用或迁移到 v1 的应用,推荐使用新的 context 参数。标准内容
在 v1 中,消息获得了与 provider 无关的标准内容块。通过message.contentBlocks 访问它们,即可获得跨 provider 的一致、带类型的视图。现有的 message.content 字段对于字符串或 provider 原生结构保持不变。
变化内容
- 消息上新增
contentBlocks属性,用于规范化内容。 - 新增
ContentBlock下的 TypeScript 类型,提供强类型支持。 - 通过
LC_OUTPUT_VERSION=v1或outputVersion: "v1"可选择将标准块序列化到content中。
读取标准化内容
创建多模态消息
块类型示例
序列化标准内容
默认情况下,标准内容块不会序列化到content 属性中。如果你需要在 content 属性中访问标准内容块(例如,向客户端发送消息时),可以选择将它们序列化到 content 中。
精简包
langchain 包的命名空间已精简,专注于 agent 构建块。旧功能已移至 @langchain/classic。新包仅暴露最有用和相关的功能。
导出内容
v1 包包含:| 模块 | 可用内容 | 备注 |
|---|---|---|
| Agents | createAgent、AgentState | 核心 agent 创建功能 |
| Messages | 消息类型、内容块、trimMessages | 从 @langchain/core 重新导出 |
| Tools | tool、工具类 | 从 @langchain/core 重新导出 |
| Chat models | initChatModel、BaseChatModel | 统一的模型初始化 |
@langchain/classic
如果你使用旧版链、索引 API 或以前从 @langchain/community 重新导出的功能,请安装 @langchain/classic 并更新导入:
破坏性变更
不再支持 Node 18
所有 LangChain 包现在要求 Node.js 20 或更高版本。Node.js 18 已于 2025 年 3 月 终止生命周期。新的构建产物
所有 langchain 包的构建现在使用打包器方式,而不是原始的 TypeScript 输出。如果你从dist/ 目录导入文件(不推荐),则需要更新导入以使用新的模块系统。
旧代码移至 @langchain/classic
标准接口和 agent 之外的传统功能已移至 @langchain/classic 包。有关核心 langchain 包中可用的内容以及移至 @langchain/classic 的内容,请参阅 精简包 部分。
移除已弃用的 API
已在之前标记为弃用并计划在 1.0 中移除的方法、函数和其他对象已被删除。查看已移除的弃用 API
查看已移除的弃用 API
以下已弃用的 API 在 v1 中已被移除:
核心功能
TraceGroup- 改用 LangSmith 追踪BaseDocumentLoader.loadAndSplit- 改用.load()后跟文本分割器RemoteRunnable- 不再支持
提示词
BasePromptTemplate.serialize和.deserialize- 直接使用 JSON 序列化ChatPromptTemplate.fromPromptMessages- 改用ChatPromptTemplate.fromMessages
检索器
BaseRetrieverInterface.getRelevantDocuments- 改用.invoke()
Runnables
Runnable.bind- 改用.bindTools()或其他特定绑定方法Runnable.map- 改用.batch()RunnableBatchOptions.maxConcurrency- 在 config 对象中使用maxConcurrency
聊天模型
BaseChatModel.predictMessages- 改用.invoke()BaseChatModel.predict- 改用.invoke()BaseChatModel.serialize- 直接使用 JSON 序列化BaseChatModel.callPrompt- 改用.invoke()BaseChatModel.call- 改用.invoke()
LLMs
BaseLLMParams.concurrency- 在 config 对象中使用maxConcurrencyBaseLLM.call- 改用.invoke()BaseLLM.predict- 改用.invoke()BaseLLM.predictMessages- 改用.invoke()BaseLLM.serialize- 直接使用 JSON 序列化
流式处理
createChatMessageChunkEncoderStream- 直接使用.stream()方法
追踪
BaseTracer.runMap- 使用 LangSmith 追踪 APIgetTracingCallbackHandler- 使用 LangSmith 追踪getTracingV2CallbackHandler- 使用 LangSmith 追踪LangChainTracerV1- 使用 LangSmith 追踪
内存和存储
BaseListChatMessageHistory.addAIChatMessage- 使用.addMessage()并传入AIMessageBaseStoreInterface- 使用具体的存储实现
工具
getRuntimeEnvironmentSync- 使用异步的getRuntimeEnvironment()
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

