dify_plugin数据库中的表总结

本文使用dify-plugin-daemon v0.1.0版本,主要对dify_plugin数据库中的数据表进行了总结。

一.agent_strategy_installations

源码位置:dify-plugin-daemon\internal\types\models\agent.go

type AgentStrategyInstallation struct {
    Model
    TenantID               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 {
    Model
    Provider               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 {
    Model
    Name        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 {
    Model
    Status           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 {
    Model
    PluginUniqueIdentifier 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 {
    Model
    TenantID               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
嵌入了基础模型结构体,继承了IDCreatedAtUpdatedAt字段。
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 checksum
    PluginUniqueIdentifier string `json:"plugin_unique_identifier" gorm:"index;size:255"`
    // PluginID is the id of the plugin, only plugin name is considered
    PluginID          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 {
    Model
    PluginUniqueIdentifier 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 {
    Model
    TenantID 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 {
    Model
    TenantID               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



知识星球服务内容:Dify源码剖析及答疑,Dify对话系统源码,NLP电子书籍报告下载,公众号所有付费资料。加微信buxingtianxia21进NLP工程化资料群

(文:NLP工程化)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往