document/content/plugin/intro.mdx
本文档适用于 FastGPT Plugin v1.0.0 及以上版本的插件系统。
原先 FastGPT 的各项能力均在 FastGPT 主服务内维护,并通过 Monorepo 方式组织。系统插件也曾作为一个子仓库存在于 FastGPT/packages/plugin 下。
随着系统工具数量和社区贡献增加,旧结构暴露出几个问题:
因此,系统插件被拆分到独立仓库:
FastGPT Plugin v1.0.0 对插件项目进行了系统性重构,目标是让插件的安装、版本管理、运行隔离和运维配置形成统一模型。
FastGPT Plugin 的核心目标:
.pkg 文件管理插件安装、更新和分发,为后续插件类型预留扩展空间。| 名称 | 说明 |
|---|---|
| 插件 | 独立、可复用的功能模块,可以有不同类型,例如工具、模型预设、知识库来源等。 |
| 插件包 | 插件打包后的 .pkg 文件。不同类型插件都通过插件包完成安装、更新和管理。 |
| 工具 | 一类插件,通常封装第三方服务、内部接口或本地计算逻辑,可被工作流和 Agent 调用。 |
| 工具集 | 一个插件暴露多个相关子工具,共享插件元信息和密钥配置。 |
| 插件市场 | 集中管理插件的平台,用户可以在其中搜索、下载和安装插件。 |
| 运行时 | 负责执行插件代码的后端实现,当前默认运行时是 local-pool。 |
| Pod | 本地进程池中的单个插件子进程。一个插件 service 可以拥有多个 Pod。 |
fastgpt-plugin 使用 pnpm workspace 组织 Monorepo,参考 Clean Architecture 和 DDD 分层设计。
fastgpt-plugin/
├── apps/
│ ├── cli/ # 插件开发、构建、检查、打包、调试命令行
│ ├── server/ # FastGPT Plugin HTTP 服务
│ └── debug-runtime-monitor/ # 本地运行时监控调试面板
├── packages/
│ ├── domain/ # 领域实体、值对象、端口定义
│ ├── usecase/ # 插件、工具、模型、runtime 等应用用例
│ ├── interface-adapter/ # HTTP contract、DTO、鉴权适配
│ ├── infrastructure/ # Hono、Mongo、S3、Redis、运行时、日志、指标等实现
│ └── shared/ # 跨层复用的纯工具函数
├── sdk/
│ ├── client/ # 调用 FastGPT Plugin 服务的客户端 SDK
│ └── factory/ # 插件作者侧 SDK
├── test/ # 跨包测试工具与 fixtures
└── docs/ # 项目文档
核心依赖方向:
domain 定义业务概念和端口,是最内层,不依赖应用入口和基础设施。usecase 负责编排业务流程,依赖 domain 的实体、值对象和端口。interface-adapter 定义 HTTP 合约、DTO、鉴权输入输出,负责把外部协议转换为应用可理解的数据结构。infrastructure 实现端口和运行环境能力,包括 HTTP 框架、数据库、对象存储、Redis、插件运行时、日志与指标。apps/* 是组合根,负责装配依赖、注册路由、启动进程或提供开发命令。sdk/* 面向外部使用者发布,提供服务调用和插件开发能力。系统工具开发结构可以参考 系统工具开发指南。模型预设维护可以参考 增加模型预设。
FastGPT Plugin 生态主要涉及以下仓库:
| 仓库 | 作用 |
|---|---|
labring/fastgpt-plugin | 插件服务、SDK、CLI、调试监视器和基础设施代码。 |
fastgpt-official-plugins | 官方维护或审核通过的插件。 |
fastgpt-community-plugins | 社区第三方插件。 |
fastgpt-business-plugins | 私有插件、客户定制插件和商业交付插件。 |
fastgpt-plugin 仓库只提供开发、构建、检查、打包和服务端运行能力。具体插件源码通常放在 official、community 或 business 插件仓库中。
FastGPT Marketplace 是插件分发渠道,用于集中展示和分发官方及社区插件。当前边界如下:
FastGPT Plugin 服务负责插件包管理、运行时注册、插件调用转发和系统级配置管理。FastGPT 主服务通过插件运行时接口调用插件,插件服务负责把调用分发到对应运行时。
系统插件安装主要有两种方式:
.pkg 文件,或从插件市场安装。安装后全系统可见。插件安装后会保存插件包文件、解析插件元信息,并在插件启用时注册到运行时。系统管理员可以管理插件状态、系统密钥和运行时参数。
插件状态包括:
系统级插件可以配置“系统密钥”,供系统内其他用户在调用插件时复用。密钥由插件服务托管,调用方通过插件配置引用,不直接接触明文密钥。
.pkg 插件包协议新版系统工具不再依赖旧的 modules/tool/packages 内置源码目录,而是使用统一 .pkg 文件交付。
构建产物通常包含:
dist/index.jsdist/manifest.jsonREADME.mdassets/**.pkg 文件用于上传、安装、上架和版本管理。插件元信息、输入输出 schema、密钥 schema 和图标资源都会进入构建产物,供 FastGPT 页面、工作流和 Agent 调用使用。
当前默认运行时是本地进程池,即 local-pool。它按单插件 service 维度管理 Pod 和请求队列。
一次插件调用进入 service 后,调度顺序如下:
pods + pendingPods < maxPods 时,先创建新 Pod,启动成功后派发当前请求。maxPods、处于启动退避期或暂时无法创建 Pod 时,请求进入有界队列等待。maxQueueSize 后,新请求会被拒绝;请求等待超过 queueTimeout 后会超时失败。每个工具插件可以单独配置 4 个运行参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
| 最小工作节点数 | 0 | 大于 0 时会预热 Pod,并尽量维持不少于该数量的 Pod。 |
| 最大工作节点数 | 5 | 没有可用 Pod 时可扩容到该上限。 |
| 节点超时时间 | 120000ms | 单次插件调用在 Pod 内执行的超时时间。 |
| 每节点最大并发数 | 10 | 单个 Pod 同时处理的最大并发请求数。 |
环境变量提供默认运行参数和全局限制:
| 环境变量 | 说明 |
|---|---|
POOL_HEALTH_CHECK_INTERVAL | 健康检查间隔,单位毫秒。 |
POOL_MAX_TOTAL_PODS | 当前 server 进程内所有插件 Pod 的总上限。 |
POOL_SERVICE_MIN_PODS | 单插件默认最小工作节点数。 |
POOL_SERVICE_MAX_PODS | 单插件默认最大工作节点数。 |
POOL_SERVICE_IDLE_TIMEOUT | Pod 空闲回收时间,单位毫秒。 |
POOL_SERVICE_POD_TIMEOUT | 单次插件调用执行超时时间,单位毫秒。 |
POOL_SERVICE_MAX_CONCURRENT_REQUESTS_PER_POD | 单个 Pod 默认最大并发请求数。 |
POOL_SERVICE_MAX_REQUESTS_PER_POD | 单个 Pod 最大处理请求数;超过后自动替换。 |
POOL_SERVICE_MAX_QUEUE_SIZE | 单插件 service 请求队列最大容量。 |
POOL_SERVICE_QUEUE_TIMEOUT | 请求在队列中等待可用 Pod 的最长时间,单位毫秒。 |
POOL_SERVICE_STARTUP_RETRY_BASE_DELAY | Pod 启动超时后的指数退避基础延迟,单位毫秒。 |
POOL_SERVICE_STARTUP_RETRY_MAX_DELAY | Pod 启动超时后的指数退避最大延迟,单位毫秒。 |
Pod 启动错误会被记录并分类。连续非超时启动失败达到阈值后会触发启动熔断,阻止继续创建 Pod;启动超时通常按资源繁忙处理,会进入指数退避后重试。
系统工具插件使用 @fastgpt-plugin/cli 和 @fastgpt-plugin/sdk-factory 开发。
开发者通过 CLI 创建单工具或工具集骨架,使用 SDK 声明 manifest、inputSchema、outputSchema、secretSchema 和 handler。插件开发完成后运行测试、构建、检查和打包,最终生成 .pkg 文件。
开发系统工具可以继续阅读 系统工具开发指南。