[火了]-----FastGPT 插件系统架构演进:从 Monorepo 到独立生态
背景与挑战
FastGPT 作为一款快速发展的 AI 应用,其原有架构将所有功能模块(包括系统插件)集成在一个基于 Next.js 的 Monorepo 中。这种架构在项目初期确实带来了开发便利,但随着用户规模的增长,其局限性日益凸显:
- 耦合度过高:系统插件必须与主应用同步发版(每周一次),严重制约了插件的迭代速度
- 开发门槛高:社区开发者需要完整运行 FastGPT 环境才能贡献插件,必须向主仓库提交 PR
- 维护成本大:使用自定义插件的用户需要维护 FastGPT 的 fork 版本,手动处理代码合并
- 技术限制:受限于 Next.js/webpack 架构,无法实现插件的运行时热加载
架构演进:插件系统独立化
为解决上述问题,我们决定将插件系统拆分为独立项目:FastGPT-plugin。这一架构演进带来了多重优势:
- 解耦与模块化:不仅支持系统工具的热加载,未来可扩展至知识库插件、RAG 等模块
- 独立迭代:插件系统可自主发版,不再受限于主应用的发版周期,支持热更新
- 开发简化:贡献插件只需使用插件项目提供的调试套件,无需搭建完整 FastGPT 环境
- 生态扩展:为插件市场的建设奠定基础,支持用户自由发布和获取插件
技术架构详解
核心选型
技术组件 | 选型理由 |
---|---|
ts-rest | 提供类型安全的 RPC 框架,自动生成 OpenAPI 规范和客户端代码 |
zod | 强大的运行时类型校验,支持复杂数据转换和合并 |
bun | 高性能打包工具,支持生成独立的插件 js 文件 |
项目结构
fastgpt-plugin/
├── modules/
│ └── tool/ # 系统工具模块
│ ├── api/ # 接口实现
│ ├── packages/ # 工具集合
│ │ ├── getTime/ # 示例工具
│ │ └── dalle3/ # 示例工具
│ ├── type/ # 类型定义
│ └── utils/ # 公共工具
├── scripts/ # 构建和生成脚本
├── sdk/ # 客户端SDK(发布到npm)
├── src/ # 运行时服务(Express)
└── test/ # 测试套件