LangChain v0.2
LangChain v0.2 于2024年5月发布。此版本包含多项重大变更和已弃用的功能。本文档包含升级到0.2.x的指南,以及已弃用功能和重大变更的列表。
迁移
此文档将帮助您将代码升级到 LangChain 0.2.x.。为准备迁移,我们首先建议您采取以下步骤:
- 安装
@langchain/core、langchain 的 0.2.x 版本,并将您可能正在使用的其他包升级到最新版本(例如@langchain/langgraph、@langchain/community、@langchain/openai等) - 验证您的代码是否能正常使用新包运行(例如,单元测试通过)
- 安装最近版本的
langchain-cli,并使用该工具将代码中使用的旧导入替换为新的导入。(请参阅以下说明。) - 手动解决任何剩余的弃用警告
- 重新运行单元测试
升级到新的导入
我们创建了一个工具来帮助迁移您的代码。该工具仍处于测试版阶段,可能无法覆盖所有情况,但我们希望它能帮助您更快地迁移代码。
迁移脚本具有以下限制:
- 它仅限于帮助用户从旧的导入方式迁移到新的导入方式。它无法帮助解决其他已弃用的问题。
- 它无法处理涉及
as的导入。 - 新的导入始终放置在全局作用域中,即使被替换的旧导入位于某个局部作用域内(例如函数体)。
- 它可能会遗漏一些已弃用的导入。
以下是迁移脚本可帮助自动应用的导入更改示例:
| 从包 | 打包 | 弃用导入 | 新导入 |
|---|---|---|---|
langchain | @langchain/community | import { UpstashVectorStore } from "langchain/vectorstores/upstash" | import { UpstashVectorStore } from "@langchain/community/vectorstores/upstash" |
@langchain/community | @langchain/openai | import { ChatOpenAI } from "@langchain/community/chat_models/openai" | import { ChatOpenAI } from "@langchain/openai" |
langchain | @langchain/core | import { Document } from "langchain/schema/document" | import { Document } from "@langchain/core/documents" |
langchain | @langchain/textsplitters | import { RecursiveCharacterTextSplitter } from "langchain/text_splitter" | import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters" |
弃用时间表
我们有两种主要类型的弃用:
- 代码已从
langchain移至另一个包(例如@langchain/community)
如果你尝试从 langchain 导入,将会失败,因为该入口点已被移除。
- 已有更好替代方案且最终将被移除的代码,以确保只有一种方式来完成任务。(例如,ChatModels 中的
predictMessages方法已被弃用,推荐使用invoke方法)。
这些项目中的许多在0.2版本中已被标记为移除。我们已将移除时间推迟至0.3版本。
安装
注意
0.2.X 版本迁移脚本仅在版本 0.0.14-rc.1 或更高版本中可用。
- npm
- Yarn
- pnpm
npm i @langchain/scripts@0.0.14-rc.1
yarn add @langchain/scripts@0.0.14-rc.1
pnpm add @langchain/scripts@0.0.14-rc.1
用法
鉴于迁移脚本并不完美,您应确保首先备份您的代码(例如,使用版本控制工具如 git)。
例如,假设您的代码仍然使用 import ChatOpenAI from "@langchain/community/chat_models/openai";:
运行迁移脚本将使用 import ChatOpenAI from "@langchain/openai"; 替换此导入。
import { updateEntrypointsFrom0_x_xTo0_2_x } from "@langchain/scripts/migrations";
const pathToMyProject = "..."; // This path is used in the following glob pattern: `${projectPath}/**/*.{ts,tsx,js,jsx}`.
updateEntrypointsFrom0_x_xTo0_2_x({
projectPath: pathToMyProject,
shouldLog: true,
});
其他选项
updateEntrypointsFrom0_x_xTo0_2_x({
projectPath: pathToMyProject,
tsConfigPath: "tsconfig.json", // Path to the tsConfig file. This will be used to load all the project files into the script.
testRun: true, // If true, the script will not save any changes, but will log the changes that would be made.
files: ["..."], // A list of .ts file paths to check. If this is provided, the script will only check these files.
});