dify_plugin数据库中的表总结
本文使用dify-plugin-daemon v0.1.0版本,主要对dify_plugin数据库中的数据表进行了总结。
一.agent_strategy_installations
源码位置:dify-plugin-daemon\internal\types\models\agent.go
type AgentStrategyInstallation struct {ModelTenantID string `json:"tenant_id" gorm:"column:tenant_id;type:uuid;index;not null"`Provider string `json:"provider" gorm:"column:provider;size:127;index;not null"`PluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`PluginID string `json:"plugin_id" gorm:"index;size:255"`
}
internal/types/models/agent.go
文件中的代码定义了一个名为 AgentStrategyInstallation
的结构体,用于表示代理策略的安装信息。这是一个GORM模型,用于数据库操作。让我详细解释每个字段:
字段 | 类型 | 解释 |
---|---|---|
Model | - | 这是一个嵌入的基础结构体,通常包含如ID、创建时间、更新时间等通用字段。 |
TenantID | string `json:“tenant_id” gorm:“column:tenant_id;type:uuid;index;not null”` | 租户ID,使用UUID格式,这表明系统支持多租户架构。该字段在数据库中创建了索引,并被标记为非空。 |
Provider | string `json:“provider” gorm:“column:provider;size:127;index;not null”` | 提供商名称,最大长度127个字符,创建了索引并且不能为空。这可能表示代理策略的来源或供应商。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“index;size:255”` | 插件的唯一标识符,最大长度255个字符,创建了索引。这可能用于标识与代理策略关联的特定插件。 |
PluginID | string `json:“plugin_id” gorm:“index;size:255”` | 插件ID,最大长度255个字符,创建了索引。这是另一种识别相关插件的方式。 |
从整体上看,这个结构体是系统中代理策略安装的数据模型,用于追踪不同租户安装的代理策略及其关联的插件信息。它与系统中的插件管理功能紧密相关,该模型会在系统初始化时被自动迁移到数据库中。
二.ai_model_installations
源码位置:dify-plugin-daemon\internal\types\models\model.go
定义了一个名为 AIModelInstallation
的Go结构体,用于表示AI模型的安装信息,主要用于数据库存储和API交互。
type AIModelInstallation struct {ModelProvider string `json:"provider" gorm:"column:provider;size:127;index;not null"`TenantID string `json:"tenant_id" gorm:"column:tenant_id;type:uuid;index;not null"`PluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`PluginID string `json:"plugin_id" gorm:"index;size:255"`
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 嵌入了 Model 结构体,继承了ID、创建时间和更新时间等基础字段,ID字段是UUID类型的主键。 |
Provider | string `json:“provider” gorm:“column:provider;size:127;index;not null”` | AI模型提供商标识,JSON序列化名: “provider”,数据库限制: 最大127字符,建立索引,非空。 |
TenantID | string `json:“tenant_id” gorm:“column:tenant_id;type:uuid;index;not null”` | 租户ID,JSON序列化名: “tenant_id”,数据库限制: UUID类型,建立索引,非空。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“index;size:255”` | 插件唯一标识符,JSON序列化名: “plugin_unique_identifier”,数据库限制: 最大255字符,建立索引。 |
PluginID | string `json:“plugin_id” gorm:“index;size:255”` | 插件ID,JSON序列化名: “plugin_id”,数据库限制: 最大255字符,建立索引。 |
三.endpoints
源码位置:dify-plugin-daemon\internal\types\models\endpoint.go
Endpoint
结构体是用于管理插件终端点的数据模型,主要存储终端点相关的配置和状态信息。
// HookID is a pointer to plugin id and tenant id, using it to identify the endpoint plugin
type Endpoint struct {ModelName string `json:"name" gorm:"size:127;column:name;default:'default'"`HookID string `json:"hook_id" gorm:"unique;size:127;column:hook_id"`TenantID string `json:"tenant_id" gorm:"index;size:64;column:tenant_id"`UserID string `json:"user_id" gorm:"index;size:64;column:user_id"`PluginID string `json:"plugin_id" gorm:"index;size:64;column:plugin_id"`ExpiredAt time.Time `json:"expired_at" gorm:"column:expired_at"`Enabled bool `json:"enabled" gorm:"column:enabled"`Settings map[string]any `json:"settings" gorm:"column:settings;serializer:json"`Declaration *plugin_entities.EndpointProviderDeclaration `json:"declaration" gorm:"-"` // not stored in db
}
该结构体通过GORM标签定义了如何将Go结构体映射到数据库表中,包括字段名称、大小限制、索引等信息。它是插件系统的核心组件之一,用于管理租户可以访问的不同插件终端点。
字段 | 类型 | 解释 |
---|---|---|
Model | - | 嵌入式结构体,包含基础字段如ID、创建时间、更新时间等。 |
Name | string `json:“name” gorm:“size:127;column:name;default:‘default’”` | 终端点名称,默认值为"default",最大长度127字符。 |
HookID | string `json:“hook_id” gorm:“unique;size:127;column:hook_id”` | 唯一标识符,用于标识特定终端点插件,具有唯一性约束。 |
TenantID | string `json:“tenant_id” gorm:“index;size:64;column:tenant_id”` | 租户ID,建立了索引以提高查询效率。 |
UserID | string `json:“user_id” gorm:“index;size:64;column:user_id”` | 用户ID,表示终端点的创建者或所有者。 |
PluginID | string `json:“plugin_id” gorm:“index;size:64;column:plugin_id”` | 关联的插件ID,建立了索引。 |
ExpiredAt | time.Time `json:“expired_at” gorm:“column:expired_at”` | 终端点的过期时间。 |
Enabled | bool `json:“enabled” gorm:“column:enabled”` | 布尔值,表示该终端点是否启用。 |
Settings | map[string]any `json:“settings” gorm:“column:settings;serializer:json”` | 使用JSON序列化的键值对,存储终端点的配置参数。 |
Declaration | *plugin_entities.EndpointProviderDeclaration `json:“declaration” gorm:“-”` | 插件终端点声明对象,包含终端点的元数据和能力描述,不存储在数据库中。 |
四.install_tasks
源码位置:dify-plugin-daemon\internal\types\models\task.go
这段代码定义了与插件安装任务相关的数据结构和状态枚举。这些数据结构设计用于跟踪和管理插件安装过程,支持多租户环境下的插件管理系统。
const (InstallTaskStatusPending InstallTaskStatus = "pending"InstallTaskStatusRunning InstallTaskStatus = "running"InstallTaskStatusSuccess InstallTaskStatus = "success"InstallTaskStatusFailed InstallTaskStatus = "failed"
)type InstallTaskPluginStatus struct {PluginUniqueIdentifier plugin_entities.PluginUniqueIdentifier `json:"plugin_unique_identifier"`Labels plugin_entities.I18nObject `json:"labels"`Icon string `json:"icon"`PluginID string `json:"plugin_id"`Status InstallTaskStatus `json:"status"`Message string `json:"message"`
}type InstallTask struct {ModelStatus InstallTaskStatus `json:"status" gorm:"not null"`TenantID string `json:"tenant_id" gorm:"type:uuid;not null"`TotalPlugins int `json:"total_plugins" gorm:"not null"`CompletedPlugins int `json:"completed_plugins" gorm:"not null"`Plugins []InstallTaskPluginStatus `json:"plugins" gorm:"serializer:json"`
}
1.InstallTaskStatus
类型
-
自定义字符串类型,用于表示安装任务的状态
-
增强类型安全性,限制状态只能使用预定义的常量
2.任务状态常量
-
InstallTaskStatusPending
: 待处理状态 -
InstallTaskStatusRunning
: 正在运行中 -
InstallTaskStatusSuccess
: 安装成功 -
InstallTaskStatusFailed
: 安装失败
3.InstallTaskPluginStatus
结构体
-
记录单个插件的安装状态信息
-
包含插件的唯一标识符、多语言标签、图标、ID等基本信息
-
Status
字段表示该插件的具体安装状态 -
Message
字段用于存储安装过程的信息或错误消息
4.InstallTask
结构体
-
继承自
Model
基础结构 -
表示一个完整的安装任务,可能包含多个插件
-
记录了租户ID、总插件数和已完成插件数等统计信息
-
Plugins
字段存储所有插件的详细安装状态 -
GORM标签用于数据库存储,JSON标签用于API交互
五.plugin_declarations
源码位置:dify-plugin-daemon\internal\types\models\plugin.go
这个模型与plugin_entities.PluginDeclaration
紧密关联,后者包含了详细的插件信息如版本、作者、名称、描述、图标以及功能扩展(工具、模型、端点、智能体策略等)。
type PluginDeclaration struct {ModelPluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"size:255;unique"`PluginID string `json:"plugin_id" gorm:"size:255;index"`Declaration plugin_entities.PluginDeclaration `json:"declaration" gorm:"serializer:json;type:text;size:65535"`
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 嵌入式结构体,提供了通用的数据库模型字段(如ID、创建时间等)。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“size:255;unique”` | 插件的唯一标识符,在数据库中建立了唯一索引(unique ),确保不会有重复值,长度限制为255字符。 |
PluginID | string `json:“plugin_id” gorm:“size:255;index”` | 插件ID,在数据库中建立了索引(index ),优化查询性能,长度限制为255字符。 |
Declaration | plugin_entities.PluginDeclaration `json:“declaration” gorm:“serializer:json;type:text;size:65535”` | 完整的插件声明信息,类型为plugin_entities.PluginDeclaration ,包含丰富的插件元数据。通过GORM的serializer:json 标签将复杂结构序列化为JSON存储,字段类型text ,最大长度为65535字节。 |
1.PluginDeclaration
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\plugin_declaration.go
type PluginDeclaration struct {PluginDeclarationWithoutAdvancedFields `yaml:",inline"`Verified bool `json:"verified" yaml:"verified"`Endpoint *EndpointProviderDeclaration `json:"endpoint,omitempty" yaml:"endpoint,omitempty" validate:"omitempty"`Model *ModelProviderDeclaration `json:"model,omitempty" yaml:"model,omitempty" validate:"omitempty"`Tool *ToolProviderDeclaration `json:"tool,omitempty" yaml:"tool,omitempty" validate:"omitempty"`AgentStrategy *AgentStrategyProviderDeclaration `json:"agent_strategy,omitempty" yaml:"agent_strategy,omitempty" validate:"omitempty"`
}
2.PluginDeclarationWithoutAdvancedFields
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\plugin_declaration.go
type PluginDeclarationWithoutAdvancedFields struct {Version manifest_entities.Version `json:"version" yaml:"version,omitempty" validate:"required,version"`Type manifest_entities.DifyManifestType `json:"type" yaml:"type,omitempty" validate:"required,eq=plugin"`Author string `json:"author" yaml:"author,omitempty" validate:"omitempty,max=64"`Name string `json:"name" yaml:"name,omitempty" validate:"required,max=128"`Label I18nObject `json:"label" yaml:"label" validate:"required"`Description I18nObject `json:"description" yaml:"description" validate:"required"`Icon string `json:"icon" yaml:"icon,omitempty" validate:"required,max=128"`Resource PluginResourceRequirement `json:"resource" yaml:"resource,omitempty" validate:"required"`Plugins PluginExtensions `json:"plugins" yaml:"plugins,omitempty" validate:"required"`Meta PluginMeta `json:"meta" yaml:"meta,omitempty" validate:"required"`Tags []manifest_entities.PluginTag `json:"tags" yaml:"tags,omitempty" validate:"omitempty,dive,plugin_tag,max=128"`CreatedAt time.Time `json:"created_at" yaml:"created_at,omitempty" validate:"required"`Privacy *string `json:"privacy,omitempty" yaml:"privacy,omitempty" validate:"omitempty"`Repo *string `json:"repo,omitempty" yaml:"repo,omitempty" validate:"omitempty,url"`
}
3.EndpointProviderDeclaration
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\endpoint_declaration.go
type EndpointProviderDeclaration struct {Settings []ProviderConfig `json:"settings" yaml:"settings" validate:"omitempty,dive"`Endpoints []EndpointDeclaration `json:"endpoints" yaml:"endpoint_declarations" validate:"omitempty,dive"`EndpointFiles []string `json:"-" yaml:"-"`
}
4.ModelProviderDeclaration
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\model_declaration.go
type ModelProviderDeclaration struct {Provider string `json:"provider" yaml:"provider" validate:"required,lt=256"`Label I18nObject `json:"label" yaml:"label" validate:"required"`Description *I18nObject `json:"description" yaml:"description,omitempty" validate:"omitempty"`IconSmall *I18nObject `json:"icon_small" yaml:"icon_small,omitempty" validate:"omitempty"`IconLarge *I18nObject `json:"icon_large" yaml:"icon_large,omitempty" validate:"omitempty"`Background *string `json:"background" yaml:"background,omitempty" validate:"omitempty"`Help *ModelProviderHelpEntity `json:"help" yaml:"help,omitempty" validate:"omitempty"`SupportedModelTypes []ModelType `json:"supported_model_types" yaml:"supported_model_types" validate:"required,lte=16,dive,model_type"`ConfigurateMethods []ModelProviderConfigurateMethod `json:"configurate_methods" yaml:"configurate_methods" validate:"required,lte=16,dive,model_provider_configurate_method"`ProviderCredentialSchema *ModelProviderCredentialSchema `json:"provider_credential_schema" yaml:"provider_credential_schema,omitempty" validate:"omitempty"`ModelCredentialSchema *ModelCredentialSchema `json:"model_credential_schema" yaml:"model_credential_schema,omitempty" validate:"omitempty"`Position *ModelPosition `json:"position,omitempty" yaml:"position,omitempty"`Models []ModelDeclaration `json:"models" yaml:"model_declarations,omitempty"`ModelFiles []string `json:"-" yaml:"-"`PositionFiles map[string]string `json:"-" yaml:"-"`
}
5.ToolProviderDeclaration
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\tool_declaration.go
type ToolProviderDeclaration struct {Identity ToolProviderIdentity `json:"identity" yaml:"identity" validate:"required"`CredentialsSchema []ProviderConfig `json:"credentials_schema" yaml:"credentials_schema" validate:"omitempty,dive"`OAuthSchema *OAuthSchema `json:"oauth_schema" yaml:"oauth_schema" validate:"omitempty,dive"`Tools []ToolDeclaration `json:"tools" yaml:"tools" validate:"required,dive"`ToolFiles []string `json:"-" yaml:"-"`
}
6.AgentStrategyProviderDeclaration
源码位置:dify-plugin-daemon\pkg\entities\plugin_entities\agent_declaration.go
type AgentStrategyProviderDeclaration struct {Identity AgentStrategyProviderIdentity `json:"identity" yaml:"identity" validate:"required"`Strategies []AgentStrategyDeclaration `json:"strategies" yaml:"strategies" validate:"required,dive"`StrategyFiles []string `json:"-" yaml:"-"`
}
六.plugin_installations
源码位置:dify-plugin-daemon\internal\types\models\installation.go
type PluginInstallation struct {ModelTenantID string `json:"tenant_id" gorm:"index;type:uuid;"`PluginID string `json:"plugin_id" gorm:"index;size:255"`PluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`RuntimeType string `json:"runtime_type" gorm:"size:127"`EndpointsSetups int `json:"endpoints_setups"`EndpointsActive int `json:"endpoints_active"`Source string `json:"source" gorm:"column:source;size:63"`Meta map[string]any `json:"meta" gorm:"column:meta;serializer:json"`
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 嵌入了基础模型结构体,继承了ID 、CreatedAt 和UpdatedAt 字段。 |
TenantID | string `json:“tenant_id” gorm:“index;type:uuid;”` | 租户ID,UUID格式,在数据库中建立了索引以加快查询。 |
PluginID | string `json:“plugin_id” gorm:“index;size:255”` | 插件ID,最大长度255,并建立索引。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“index;size:255”` | 插件唯一标识符,最大长度255的字符串,建立了索引。 |
RuntimeType | string `json:“runtime_type” gorm:“size:127”` | 运行时类型,最大长度127,可能表示插件运行的环境或技术栈。 |
EndpointsSetups | int `json:“endpoints_setups”` | 已设置的端点数量,整型值。 |
EndpointsActive | int `json:“endpoints_active”` | 当前活跃的端点数量,整型值。 |
Source | string `json:“source” gorm:“column:source;size:63”` | 来源信息,最大长度63,可能指明插件的来源渠道。 |
Meta | map[string]any `json:“meta” gorm:“column:meta;serializer:json”` | 存储元数据的映射,使用JSON序列化存储在数据库中,支持存储各种类型的附加信息。 |
七.plugins
源码位置:dify-plugin-daemon\internal\types\models\plugin.go
type Plugin struct {Model// PluginUniqueIdentifier is a unique identifier for the plugin, it contains version and checksumPluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`// PluginID is the id of the plugin, only plugin name is consideredPluginID string `json:"id" gorm:"index;size:255"`Refers int `json:"refers" gorm:"default:0"`InstallType plugin_entities.PluginRuntimeType `json:"install_type" gorm:"size:127;index"`ManifestType manifest_entities.DifyManifestType `json:"manifest_type" gorm:"size:127"`RemoteDeclaration plugin_entities.PluginDeclaration `json:"remote_declaration" gorm:"serializer:json;type:text;size:65535"` // enabled when plugin is remote
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 基础模型结构体,通常包含ID、创建时间、更新时间等通用字段。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“index;size:255”` | 插件的唯一标识符,包含版本和校验和信息,用于精确定位特定版本的插件。 |
PluginID | string `json:“id” gorm:“index;size:255”` | 插件的ID,仅考虑插件名称,不含版本信息。 |
Refers | int `json:“refers” gorm:“default:0”` | 引用计数,记录插件被引用的次数,默认值为0。 |
InstallType | plugin_entities.PluginRuntimeType `json:“install_type” gorm:“size:127;index”` | 插件的运行时类型,定义插件的安装和运行方式。 |
ManifestType | manifest_entities.DifyManifestType `json:“manifest_type” gorm:“size:127”` | 清单类型,指定插件使用的清单格式。 |
RemoteDeclaration | plugin_entities.PluginDeclaration `json:“remote_declaration” gorm:“serializer:json;type:text;size:65535”` | 远程插件的声明信息,仅当插件为远程类型时使用,包含插件的详细配置信息。 |
八.serverless_runtimes
源码位置:dify-plugin-daemon\internal\types\models\plugin.go
type ServerlessRuntime struct {ModelPluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"size:255;unique"`FunctionURL string `json:"function_url" gorm:"size:255"`FunctionName string `json:"function_name" gorm:"size:127"`Type ServerlessRuntimeType `json:"type" gorm:"size:127"`Checksum string `json:"checksum" gorm:"size:127;index"`
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 基础模型结构体,包含ID、创建时间和更新时间等字段。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“size:255;unique”` | 插件的唯一标识符,包含版本和校验和信息,在数据库中设置为唯一。 |
FunctionURL | string `json:“function_url” gorm:“size:255”` | 无服务器函数的访问URL地址,用于调用相应函数。 |
FunctionName | string `json:“function_name” gorm:“size:127”` | 函数的名称,用于标识特定的无服务器函数。 |
Type | ServerlessRuntimeType `json:“type” gorm:“size:127”` | 无服务器运行时的类型,使用自定义的ServerlessRuntimeType枚举。 |
Checksum | string `json:“checksum” gorm:“size:127;index”` | 代码校验和,用于验证函数的完整性,防止代码被篡改。 |
九.tenant_storages
源码位置:dify-plugin-daemon\internal\types\models\storage.go
此结构体用于跟踪每个租户在各插件中的存储资源使用情况。
type TenantStorage struct {ModelTenantID string `gorm:"column:tenant_id;type:varchar(255);not null;index"`PluginID string `gorm:"column:plugin_id;type:varchar(255);not null;index"`Size int64 `gorm:"column:size;type:bigint;not null"`
}
字段 | 类型 | 解释 |
---|---|---|
Model | - | 嵌入的基础模型结构体,包含通用字段如ID、创建时间和更新时间等。 |
TenantID | string `gorm:“column:tenant_id;type:varchar(255);not null;index”` | 租户的唯一标识符,类型为字符串,数据库特性为varchar(255),非空,有索引。 |
PluginID | string `gorm:“column:plugin_id;type:varchar(255);not null;index”` | 插件的ID,不含版本信息,类型为字符串,数据库特性为varchar(255),非空,有索引。 |
Size | int64 `gorm:“column:size;type:bigint;not null”` | 记录租户在该插件中使用的存储空间大小,类型为int64 (8字节整数),数据库特性为bigint,非空。 |
十.tool_installations
源码位置:dify-plugin-daemon\internal\types\models\tool.go
此结构体用于跟踪和记录租户安装的工具或插件信息,建立了租户与其安装的插件之间的关联关系。通过这些字段可以唯一标识一个租户安装的特定插件实例。
type ToolInstallation struct {ModelTenantID string `json:"tenant_id" gorm:"column:tenant_id;type:uuid;index;not null"`Provider string `json:"provider" gorm:"column:provider;size:127;index;not null"`PluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`PluginID string `json:"plugin_id" gorm:"index;size:255"`
}
这个结构体定义了工具或插件安装的数据模型,用于GORM数据库操作。
字段 | 类型 | 解释 |
---|---|---|
Model | - | 内嵌的基础模型结构体,通常包含ID、创建时间、更新时间等基本字段。 |
TenantID | string `json:“tenant_id” gorm:“column:tenant_id;type:uuid;index;not null”` | 租户的唯一标识符,类型为UUID字符串,设置了数据库索引,不允许为空。 |
Provider | string `json:“provider” gorm:“column:provider;size:127;index;not null”` | 插件/工具提供者名称,最大长度为127字符,设置了数据库索引,不允许为空。 |
PluginUniqueIdentifier | string `json:“plugin_unique_identifier” gorm:“index;size:255”` | 插件的唯一标识符,最大长度为255字符,设置了数据库索引。 |
PluginID | string `json:“plugin_id” gorm:“index;size:255”` | 插件ID,最大长度为255字符,设置了数据库索引。 |
参考文献
[1] https://github.com/langgenius/dify-plugin-daemon
[2] https://github.com/langgenius/dify-official-plugins
[3] https://github.com/langgenius/dify-plugins
[4] https://github.com/langgenius/dify-plugin-sdks
[5] dify_plugin数据库中的表总结:https://z0yrmerhgi8.feishu.cn/wiki/Q2FmwTyJJie8cAkSA5IcLdb3nY9