document/content/docs/self-host/design/design_plugin.mdx
原先 FastGPT 的各项功能均在 FastGPT 的 Next.js 的框架内,通过 Monorepo 的方式进行组织。 系统插件也作为一个 sub-repo 存在于 FastGPT/packages/plugin 下。
然而随着用户的增加,这种组织模式的弊端凸显:
因而,我们决定将系统插件拆分出来,到一个独立的 repo 中。
拆分出来,主要有如下的目的:
.pkg 文件,支持热插拔。系统工具的结构可以参考 如何开发系统插件。
ts-rest 是一个 ts 的 restful api 框架。构建 contract 后,可以根据 contract 的定义 编写处理逻辑,自动生成 openapi 对象、通过 createClient 导出 client 进行请求。
类似的 tRPC 也是一个 ts 的 RPC 框架。
然而 tRPC 使用自己的一套请求格式,导致其他工具不方便接入。而使用 ts-rest 本质就是对 RESTful API 的简单封装,也能直接生成 openapi 对象。
我们使用 zod 来实现类型校验。 zod 可以实现在运行时的类型校验,也可以提供更高级的功能,例如参数转换,对象合并等。
为了保证插件之间不会相互干扰,同时提高并发处理能力,FastGPT-plugin 采用 Worker 线程来实现插件的执行。每个工具在被调用时都会在独立的 Worker 中运行, 这带来几个重要的优势:
将插件 bundle 为一个单一的 .pkg 文件是一个重要的设计。这样可以将插件发布出来直接通过网络挂载等的形式使用。