贡献集成
首先,请确保你已安装代码贡献指南中列出的所有依赖项。
你可以在以下几个位置为 LangChain 贡献集成:
- 社区:适用于主要由 LangChain 和开源社区维护的轻量级集成。
- 合作伙伴包:适用于由 LangChain 和合作伙伴共同维护的独立包。
大多数情况下,新的集成应添加到社区包中。由于合作伙伴包需要作为独立包进行更多维护,请在创建新的合作伙伴包之前与 LangChain 团队确认。
在以下部分中,我们将以虚构公司 Parrot Link AI 为例,说明如何为这些包贡献代码。
社区包
@langchain/community 包位于 libs/langchain-community 中,包含大部分集成。
可以通过如下命令安装:npm install @langchain/community,导出的成员可以通过如下代码导入:
import { ChatParrotLink } from "@langchain/community/chat_models/parrot_link";
import { ParrotLinkLLM } from "@langchain/community/llms/parrot_link";
import { ParrotLinkVectorStore } from "@langchain/community/vectorstores/parrot_link";
@langchain/community 包依赖于手动安装的依赖包,因此如果你尝试导入一个未安装的包,会看到错误提示。在我们的示例中,如果你没有安装 parrot-link-sdk 就尝试导入 ParrotLinkLLM,你会看到提示导入失败的错误。
假设我们想为 Parrot Link AI 实现一个聊天模型。我们需要在 libs/langchain-community/src/chat_models/parrot_link.ts 中创建一个新文件,并包含类似以下代码:
import {
SimpleChatModel,
} from "@langchain/core/language_models/chat_models";
export class ChatParrotLink extends SimpleChatModel {
...
测试文件与源码放在一起,位于 src/ 目录下,你可以在如下文件中编写测试:
- 单元测试:
libs/langchain-community/src/chat_models/tests/parrot_link.test.ts - 集成测试:
libs/langchain-community/src/chat_models/tests/parrot_link.int.test.ts
单元测试不应包含任何外部 API 调用或依赖任何环境变量。
你需要将文档添加到以下位置:
docs/core_docs/docs/integrations/chat/parrot_link.mdx
LangChain 仓库中的合作伙伴包
合作伙伴包可以托管在 LangChain 单体仓库中。
LangChain 仓库中的合作伙伴包应放在 libs/langchain-{partner} 下。
用户通过 npm install @langchain/{partner} 安装该包,并通过如下方式导入其成员:
import { X } from "@langchain/{partner}";
创建新包
要创建新的合作伙伴包,可以使用 create-langchain-integration 工具,
该工具会自动创建支持 ESM + CJS 入口点的项目结构。你可以在 libs/ 文件夹中运行如下命令:
cd libs/
npx create-langchain-integration
然后按照提示为你的包命名。
默认的包结构将包含聊天模型、LLM 和/或向量存储的存根文件。你应该删除不需要的文件,并从 index.ts 中移除对应的导出。
依赖项
如果你的包需要依赖项,例如你公司的 SDK,可以像往常一样将其添加到你的包的 package.json 文件中:
npm install parrot-link-sdk
编写单元测试和集成测试
基本的测试文件位于 src/tests/ 目录中。你应该添加更多测试以覆盖你的包的功能。
关于运行和实现测试的更多信息,请参见测试指南。
编写文档
请从以下位置复制并使用合适的模板:
https://github.com/langchain-ai/langchainjs/tree/main/libs/langchain-scripts/src/cli/docs/templates
你应该将包含示例的笔记本文件放在 monorepo 根目录下的 docs/core_docs/docs/integrations 相关目录中。
(如需要)弃用社区集成
注意:只有当你将现有的社区集成迁移到合作伙伴包时才需要此步骤。如果你正在集成的新组件是首次引入 LangChain(即不在 community 包中),可以跳过此步骤。
我们假设将 ChatParrotLink 聊天模型从社区包迁移到了合作伙伴包。我们需要在社区包中弃用旧模型。
我们可以通过 @deprecated TSDoc 注释来实现这一点。
在修改之前,我们的聊天模型可能如下所示:
class ChatParrotLink extends SimpleChatModel {
...
在修改之后,它将如下所示:
/** @deprecated 请安装并从 `@langchain/parrot-link` 导入。 */
class ChatParrotLink extends SimpleChatModel {
...
你应该对每一个迁移到合作伙伴包中的组件执行此操作。