将代码库迁移至 LangChain v1。
createAgent
在 v1 中,react 智能体预构建现已位于 langchain 包中。下表概述了功能变更:
导入路径
react 智能体预构建的导入路径已从@langchain/langgraph/prebuilts 更改为 langchain。函数名称已从 createReactAgent 更改为 createAgent:
提示词
静态提示词重命名
prompt 参数已被重命名为 systemPrompt:
SystemMessage
如果在系统提示词中使用 SystemMessage 对象,现在直接使用字符串内容:
动态提示词
动态提示词是核心上下文工程模式——它们根据当前对话状态调整向模型传递的内容。为此,请使用dynamicSystemPromptMiddleware:
预模型钩子
预模型钩子现在作为具有beforeModel 方法的 middleware 实现。这种模式更具可扩展性——您可以定义多个 middleware 在模型调用之前运行,并在多个智能体中重用它们。
常见用例包括:
- 摘要对话历史
- 剪辑消息
- 输入约束,如 PII 匿名化
模型后钩子
模型后钩子现在作为具有afterModel 方法的 middleware 实现。这允许您在模型响应后组合多个处理程序。
常见用例包括:
- 人类参与的审批
- 输出约束
自定义状态
自定义状态现在使用stateSchema 属性在 middleware 中定义。使用 Zod 声明将通过智能体运行传递的附加状态字段。
模型
动态模型选择现在通过 middleware 发生。使用wrapModelCall 根据状态或运行时上下文交换模型(和工具)。在 createReactAgent 中,这是通过传递给 model 参数的函数完成的。
此功能已迁移到 v1 的 middleware 接口。
动态模型选择
预绑定模型
为了更好地支持结构化输出,createAgent 应接收一个纯模型(字符串或实例)以及一个单独的 tools 列表。在使用结构化输出时,避免传递预绑定工具的模型。
工具
tools 参数传递给 createAgent 接受:
- 使用
tool创建的函数 - LangChain 工具实例
- 表示内置提供者工具的对象
处理工具错误
现在可以通过实现wrapToolCall 方法的 middleware 配置工具错误处理。
结构化输出
节点变更
结构化输出以前是在主智能体之外的单独节点生成的。现在不再如此。结构化输出在主循环中生成(无需额外的 LLM 调用),从而降低成本和延迟。工具和提供者策略
在 v1 中,有两种策略:toolStrategy使用人工工具调用来生成结构化输出providerStrategy使用提供者原生的结构化输出生成
提示词输出已移除
responseFormat 中的自定义指令提示词输出已移除,改为使用上述策略。
流式节点名称重命名
从智能体流式传输事件时,节点名称已从"agent" 更改为 "model",以更好地反映节点的目的。
运行时上下文
调用智能体时,通过context 配置参数传递静态、只读配置。这取代了使用 config.configurable 的模式。
旧的
config.configurable 模式仍然适用于向后兼容,但建议新应用或迁移至 v1 的应用使用新的 context 参数。标准内容
在 v1 中,消息获得提供者无关的标准内容块。通过message.contentBlocks 访问它们,以跨提供者获得一致的、类型化的视图。现有的 message.content 字段保持不变,用于字符串或提供者原生的结构。
变更内容
- 新增
contentBlocks属性用于消息的标准化内容。 - 新增
ContentBlock下的 TypeScript 类型以实现强类型。 - 可选地将标准块序列化到
content,通过LC_OUTPUT_VERSION=v1或outputVersion: "v1"。
读取标准化内容
创建多模态消息
示例块类型
序列化标准内容
标准内容块默认情况下不会序列化到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 版本中移除的方法、函数和其他对象。View removed deprecated APIs
View removed deprecated APIs
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()代替
大语言模型
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()
官方原文:src/oss/javascript/migrate/langchain-v1.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。