createAgent
在 v1 中,react agent 预构建现在位于 langchain 包中。下表概述了功能上的变更:
导入路径
react agent 预构建的导入路径已从@langchain/langgraph/prebuilts 改为 langchain。函数名称已从 createReactAgent 改为 createAgent:
提示词
静态提示重命名
prompt 参数已重命名为 systemPrompt:
SystemMessage
如果在系统提示中使用 SystemMessage 对象,现在直接使用其字符串内容:
动态提示
动态提示是核心的上下文工程模式——它们会根据当前的对话状态调整你告知模型的内容。为此,请使用dynamicSystemPromptMiddleware:
模型前钩子
模型前钩子现在实现为使用beforeModel 方法的中间件。这种模式更具扩展性——你可以定义多个在模型调用前运行的中间件,并在不同的代理之间重用它们。
常见用例包括:
- 总结对话历史
- 修剪消息
- 输入护栏,例如PII信息脱敏
模型后钩子
模型后钩子现在实现为使用afterModel 方法的中间件。这允许你在模型响应后组合多个处理器。
常见用例包括:
- 人在环路中的审批
- 输出护栏
自定义状态
自定义状态现在在中间件中使用stateSchema 属性定义。使用 Zod 声明在代理运行期间携带的附加状态字段。
模型
动态模型选择现在通过中间件实现。使用wrapModelCall 根据状态或运行时上下文切换模型(和工具)。在 createReactAgent 中,这是通过传递给 model 参数的函数完成的。
此功能已移植到 v1 的中间件接口。
动态模型选择
预绑定模型
为了更好地支持结构化输出,createAgent 应接收一个纯模型(字符串或实例)和一个单独的 tools 列表。在使用结构化输出时,避免传递已与工具预绑定的模型。
工具
createAgent 的 tools 参数接受:
- 使用
tool创建的函数 - LangChain 工具实例
- 表示内置提供程序工具的对象
处理工具错误
你现在可以使用实现wrapToolCall 方法的中间件来配置工具错误的处理方式。
结构化输出
节点变更
结构化输出过去是在一个与主代理分离的节点中生成的。现在不再如此。结构化输出在主循环中生成(无需额外的 LLM 调用),从而降低了成本和延迟。工具与提供程序策略
在 v1 中,有两种策略:toolStrategy使用人工工具调用来生成结构化输出providerStrategy使用提供程序原生的结构化输出生成
提示式输出已移除
通过responseFormat 中的自定义指令进行提示式输出已被移除,取而代之的是上述策略。
流式节点名称重命名
当从代理流式传输事件时,节点名称已从"agent" 更改为 "model",以更好地反映节点的用途。
运行时上下文
在调用代理时,通过context 配置参数传递静态、只读的配置。这替代了使用 config.configurable 的模式。
旧的
config.configurable 模式仍可用于向后兼容,但对于新应用或正在迁移到 v1 的应用,建议使用新的 context 参数。标准内容
在 v1 中,消息获得了与提供程序无关的标准内容块。通过message.contentBlocks 访问它们,以获得跨提供程序一致、类型化的视图。现有的 message.content 字段对于字符串或提供程序原生结构保持不变。
变更内容
- 消息上新增
contentBlocks属性,用于规范化内容。 ContentBlock下新增 TypeScript 类型,用于强类型化。- 通过
LC_OUTPUT_VERSION=v1或outputVersion: "v1",可选地将标准块序列化到content中。
读取标准化内容
创建多模态消息
示例块类型
序列化标准内容
默认情况下,标准内容块不会序列化到content 属性中。如果你需要在 content 属性中访问标准内容块(例如,将消息发送给客户端时),可以选择将其序列化到 content 中。
精简包
langchain 包的命名空间经过精简,以专注于代理构建块。旧功能已移至 @langchain/classic。新包只公开最有用和最相关的功能。
导出项
v1 包包括:@langchain/classic
如果你使用旧版链、索引 API 或先前从 @langchain/community 重新导出的功能,请安装 @langchain/classic 并更新导入:
重大变更
移除 Node 18 支持
所有 LangChain 包现在要求 Node.js 22 或更高版本。Node.js 18 已于 2025 年 3 月达到生命周期终点。新的构建输出
所有 langchain 包的构建现在使用基于打包器的方法,而不是使用原始 TypeScript 输出。如果你从dist/ 目录导入文件(不推荐),你将需要更新导入以使用新的模块系统。
旧代码移至 @langchain/classic
标准接口和代理重点之外的旧功能已移至 @langchain/classic 包。有关核心 langchain 包中可用内容以及移至 @langchain/classic 的内容的详细信息,请参阅精简包部分。
移除已弃用的 API
已弃用并计划在 1.0 中移除的方法、函数和其他对象已被删除。查看已移除的已弃用 API
查看已移除的已弃用 API
v1 中已移除以下已弃用的 API:
核心功能
TraceGroup- 改用 LangSmith 追踪BaseDocumentLoader.loadAndSplit- 使用.load()后跟文本分割器RemoteRunnable- 不再支持
提示词
BasePromptTemplate.serialize和.deserialize- 直接使用 JSON 序列化ChatPromptTemplate.fromPromptMessages- 使用ChatPromptTemplate.fromMessages
检索器
BaseRetrieverInterface.getRelevantDocuments- 改用.invoke()
可运行对象
Runnable.bind- 使用.bindTools()或其他特定绑定方法Runnable.map- 改用.batch()RunnableBatchOptions.maxConcurrency- 在配置对象中使用maxConcurrency
聊天模型
BaseChatModel.predictMessages- 改用.invoke()BaseChatModel.predict- 改用.invoke()BaseChatModel.serialize- 直接使用 JSON 序列化BaseChatModel.callPrompt- 改用.invoke()BaseChatModel.call- 改用.invoke()
LLM
BaseLLMParams.concurrency- 在配置对象中使用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.

