背景介绍
Xpert AI 插件系统允许开发者通过 插件扩展 平台功能。以飞书文档为例,我们希望实现以下场景:- 系统集成:接入飞书应用的 AppID、AppSecret 等凭证,完成鉴权。
- 文档加载:从飞书的文件夹或文档 API 中获取文档内容。
- 知识管理:将文档转化为可供 Xpert AI 知识库和智能体使用的结构化内容。
- 扩展策略:通过策略(Strategy)接口规范,实现接入、文档源、文档转换的扩展点。
1. 克隆插件模版
我们提供了一个 插件开发起点模版,方便快速构建新的插件:nx 新建一个插件库,其中 packages/lark 是插件代码在项目中的目录,@xpert-ai/plugin-lark 是插件 npm 包名:
✅ 这里我们生成了一个名为 @xpert-ai/plugin-lark 的插件,它将承载飞书文档的所有集成功能。
2. 插件入口代码
插件的入口代码主要包含 元信息(meta)、配置(config)、生命周期函数(register/onStart/onStop)。核心要点
- meta:定义插件的基本信息(名字、版本、分类、关键词等)。
- config:描述插件的配置 Schema,用户可在 UI 中输入配置等(预留机制,暂未实现)。
- register:注册
LarkModule,将插件挂载到 NestJS 模块体系。 - onStart/onStop:插件的生命周期回调。
3. NestJS 模块结构
插件实际是一个 NestJS 模块(LarkModule),它将不同的 策略类(Strategy)、控制器(Controller)或者服务(Service) 注册进来。
✅ 这里的Strategy就是插件的扩展点,例如:
LarkIntegrationStrategy:处理与飞书系统的集成。LarkSourceStrategy:定义如何从飞书加载文档。LarkDocTransformerStrategy:定义如何将文档转化为知识库可用的格式。
4. API 接口
控制器 用于暴露插件的 REST 接口。例如:测试连接飞书。/lark/test 接口时(目前是测试系统集成连通性的默认路径规则,后续会改成统一验证接口),系统会去验证配置是否正确(AppID/AppSecret 是否有效)。
5. 插件增强点
5.1 系统集成增强
系统集成策略LarkIntegrationStrategy 用于处理飞书应用凭证验证,获取机器人信息等。
关键逻辑:
✅ 这里使用 LarkClient 封装飞书 OpenAPI 请求。
5.2 文档源增强
文档源策略LarkSourceStrategy 定义如何从飞书中获取文档列表。
- 配置参数:文件夹 Token、文档类型(docx/sheet/file等)。
- 加载逻辑:调用
client.listDriveFiles(folderToken),返回Document[]。
5.3 文档转换增强
文档转换策略LarkDocTransformerStrategy 定义如何将文档内容转化为知识库条目。
- 调用飞书 API 获取文档正文。
- 将正文切分为
Document(可供向量化)。 - 输出为
IKnowledgeDocument格式。
5.4 客户端封装
所有 API 请求都通过LarkClient 统一封装 @larksuiteoapi/node-sdk 功能,提供以下方法:
getBotInfo()获取机器人信息listDriveFiles(folderToken)列出文件夹内容getDocumentContent(docToken)获取文档正文getAllDocsInFolder(folderToken)递归获取所有文档
6. 开发流程总结
- 准备模版:克隆插件模版并生成插件项目。
- 编写入口:定义插件 meta、config 和生命周期。
-
构建模块:在
LarkModule中注册控制器和策略类。 -
实现策略:
- 集成策略:处理 AppID、Secret 验证。
- 文档源策略:从飞书获取文档。
- 转换策略:把文档转化为知识库内容。
- 封装客户端:统一管理飞书 API 调用。
-
测试接口:通过
/lark/test验证集成是否正常。
7. 构建、发布与 npm 发布流程
当我们完成了@xpert-ai/plugin-lark 插件的开发,就可以通过 Nx 提供的构建与发布工具链 将其构建并发布到 npm 仓库。整个流程分为以下几个步骤:
7.1 构建插件
执行构建命令:-
该命令会调用 Nx 的构建器(默认使用 TypeScript 编译器
tsc),将源码编译为 JavaScript。 -
构建结果会输出到:
-
输出目录中的内容就是可发布的产物(包含
index.js、类型声明.d.ts等)。
7.2 版本管理
为了确保 npm 包的迭代规范,需要正确维护插件版本号。 推荐使用 Nx 提供的 release 流程 自动管理版本:自动 bump 版本
patch:修复版本号(例如 1.0.0 → 1.0.1)minor:小版本更新(例如 1.0.0 → 1.1.0)major:大版本更新(例如 1.0.0 → 2.0.0)
- 修改
package.json中的版本号。 - 更新
CHANGELOG.md。 - 生成对应的 Git tag。
如果不使用nx release,也可以手动修改package.json的version字段。
7.3 发布到 npm
构建和版本 bump 完成后,就可以执行发布命令:--access public指定包为公开发布(适用于@xpert-ai这种 npm scope 下的包)。--otp=<code>如果 npm 账号开启了 双因素认证 (2FA),需要输入一次性密码 (OTP)。
⚠️ 注意:发布前请确认package.json中以下字段是否正确:
main:指向构建产物入口,例如"dist/index.js"types:指向类型声明,例如"dist/index.d.ts"files:确保只包含需要发布的文件(例如"dist/**/*")publishConfig:可定义默认发布权限(如"access": "public")
7.4 最终流程示例
综合上述步骤,发布@xpert-ai/plugin-lark 插件的完整命令如下:
@xpert-ai/plugin-lark 版本。 🎉
8. 最终使用效果
完成插件开发后,你可以在 Xpert AI 平台中:- 配置飞书 AppID/AppSecret
- 选择文档文件夹和类型
- 自动加载飞书文档内容
- 将文档转化为知识库,支持 AI 对话和智能体分析