@@ -0,0 +1,516 @@
-- ============================================================
-- Snail AI MySQL 全量建表脚本(仅 CREATE,无 ALTER)
-- 使用:mysql -u user -p database < snail_ai_schema.sql
-- ============================================================
-- ============================================================
-- Enterprise RAG Schema for MySQL
-- ============================================================
-- Knowledge Base
CREATE TABLE snail_ai_rag
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 255 ) NOT NULL ,
description TEXT ,
icon VARCHAR ( 512 ) ,
embedding_model_id BIGINT ( 128 ) NOT NULL ,
dimension_of_vector_model INT NOT NULL COMMENT ' 向量维度 ' ,
rerank_model_id BIGINT ( 128 ) ,
search_engine_instance_id BIGINT ( 128 ) ,
vector_store_instance_id BIGINT ( 128 ) ,
search_engine_enable TINYINT ( 1 ) DEFAULT 0 ,
delimiter VARCHAR ( 32 ) DEFAULT ' \n\n ' ,
rag_enhancement TEXT ,
config TEXT DEFAULT NULL COMMENT ' RAG检索和问答的页面配置参数 ' ,
dedup_strategy TINYINT ( 1 ) NOT NULL DEFAULT 2 COMMENT ' 去重策略: 0=NONE 1=BY_NAME 2=BY_CONTENT 3=BY_NAME_OR_CONTENT ' ,
dedup_action TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 冲突动作: 0=REJECT 1=SKIP 2=OVERWRITE ' ,
upload_confirm TINYINT ( 1 ) NOT NULL DEFAULT 1 COMMENT ' 上传前二次确认: 0-关 1-开 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci ;
-- RAG Documents
CREATE TABLE snail_ai_rag_document
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
rag_id BIGINT NOT NULL ,
name VARCHAR ( 255 ) ,
file_type VARCHAR ( 32 ) ,
source_type VARCHAR ( 32 ) ,
source_path VARCHAR ( 1024 ) ,
storage_path VARCHAR ( 1024 ) ,
storage_type VARCHAR ( 32 ) DEFAULT ' LOCAL ' ,
file_size BIGINT DEFAULT 0 ,
content TEXT ,
status TINYINT ( 1 ) DEFAULT 0 COMMENT ' 状态: 0-待处理 1-解析中 2-处理中 3-处理完成 4-处理失败 ' ,
error_msg TEXT ,
chunk_count INT DEFAULT 0 ,
content_hash VARCHAR ( 64 ) DEFAULT NULL COMMENT ' 文件内容SHA-256哈希,用于去重 ' ,
resource_id BIGINT DEFAULT NULL COMMENT ' 关联资源库 snail_ai_resource.id ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci ;
CREATE INDEX idx_rag_doc_rag ON snail_ai_rag_document ( rag_id ) ;
CREATE INDEX idx_rag_content_hash ON snail_ai_rag_document ( rag_id , content_hash ) ;
CREATE INDEX idx_rag_name ON snail_ai_rag_document ( rag_id , name ) ;
CREATE INDEX idx_rag_doc_resource ON snail_ai_rag_document ( resource_id ) ;
-- RAG Chunks
CREATE TABLE snail_ai_rag_chunk
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
rag_id BIGINT NOT NULL ,
document_id BIGINT NOT NULL ,
paragraph_index INT ,
chunk_index INT ,
content TEXT ,
token_count INT ,
vector_id VARCHAR ( 128 ) ,
content_hash VARCHAR ( 64 ) DEFAULT NULL COMMENT ' chunk内容SHA-256,用于向量去重 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci ;
CREATE INDEX idx_rag_chunk_rag ON snail_ai_rag_chunk ( rag_id ) ;
CREATE INDEX idx_rag_chunk_document ON snail_ai_rag_chunk ( document_id ) ;
CREATE INDEX idx_chunk_rag_hash ON snail_ai_rag_chunk ( rag_id , content_hash ) ;
CREATE TABLE snail_ai_user
(
id BIGINT AUTO_INCREMENT PRIMARY KEY ,
role INT ,
totals INT ,
username VARCHAR ( 255 ) ,
email VARCHAR ( 64 ) ,
password VARCHAR ( 64 ) NOT NULL ,
create_dt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
update_dt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_username ( username )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 ;
INSERT INTO snail_ai_user ( id , role , username , email , password , create_dt , update_dt )
VALUES ( 1 , 2 , ' admin ' , ' ' , ' 094c883e17947ff795de8b22279d81c2600dfe85e2dba3fbf562423e883b07ca ' ,
' 2026-02-11 13:56:48.210429 ' , ' 2026-02-11 13:56:48.210429 ' ) ;
-- ============================================
-- 1. AI 模型提供商表
-- ============================================
CREATE TABLE IF NOT EXISTS snail_ai_model_provider
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
provider_name VARCHAR ( 255 ) NOT NULL COMMENT ' 提供商名称 ' ,
provider_key VARCHAR ( 50 ) NOT NULL COMMENT ' 提供商标识符 ' ,
description TEXT COMMENT ' 提供商描述 ' ,
icon_url VARCHAR ( 500 ) COMMENT ' LOGO图标URL ' ,
is_enabled TINYINT ( 1 ) DEFAULT 1 COMMENT ' 是否启用 ' ,
created_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ' 创建时间 ' ,
updated_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ' 更新时间 ' ,
UNIQUE KEY uk_provider_name ( provider_name ) ,
UNIQUE KEY uk_provider_key ( provider_key )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' AI模型提供商表 ' ;
CREATE INDEX idx_provider_key ON snail_ai_model_provider ( provider_key ) ;
CREATE INDEX idx_is_enabled ON snail_ai_model_provider ( is_enabled ) ;
-- ============================================
-- 2. AI模型配置表
-- ============================================
CREATE TABLE IF NOT EXISTS snail_ai_model_config
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
provider_id BIGINT NOT NULL COMMENT ' 提供商ID ' ,
model_name VARCHAR ( 255 ) NOT NULL COMMENT ' 模型名称 ' ,
model_key VARCHAR ( 100 ) NOT NULL COMMENT ' 模型标识符 ' ,
model_type VARCHAR ( 50 ) NOT NULL COMMENT ' 模型类型(CHAT/EMBEDDING/RERANKER/IMAGE/SPEECH) ' ,
description VARCHAR ( 1000 ) COMMENT ' 模型描述 ' ,
api_key VARCHAR ( 1000 ) COMMENT ' API密钥(加密存储) ' ,
api_endpoint VARCHAR ( 500 ) COMMENT ' API端点URL ' ,
config_json TEXT COMMENT ' 模型参数配置(JSON格式) ' ,
owner_id BIGINT COMMENT ' 所有者ID(NULL=全局,具体值=用户ID) ' ,
scope VARCHAR ( 20 ) NOT NULL DEFAULT ' GLOBAL ' COMMENT ' 作用域(GLOBAL/PERSONAL) ' ,
is_default TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否为默认模型 ' ,
is_enabled TINYINT ( 1 ) DEFAULT 1 COMMENT ' 是否启用 ' ,
created_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ' 创建时间 ' ,
updated_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ' 更新时间 ' ,
KEY fk_provider_id ( provider_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' AI模型配置表 ' ;
CREATE INDEX idx_provider_model_type ON snail_ai_model_config ( provider_id , model_type ) ;
CREATE INDEX idx_model_type_enabled ON snail_ai_model_config ( model_type , is_enabled ) ;
CREATE INDEX idx_owner_id ON snail_ai_model_config ( owner_id ) ;
CREATE INDEX idx_is_default ON snail_ai_model_config ( is_default ) ;
CREATE INDEX idx_scope ON snail_ai_model_config ( scope ) ;
CREATE INDEX idx_model_key ON snail_ai_model_config ( model_key ) ;
-- ============================================
-- 3. 模型使用统计表
-- ============================================
CREATE TABLE IF NOT EXISTS snail_ai_model_usage_stat
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
model_id BIGINT NOT NULL COMMENT ' 模型ID ' ,
user_id BIGINT NOT NULL COMMENT ' 用户ID ' ,
total_calls BIGINT DEFAULT 0 COMMENT ' 总调用次数 ' ,
success_calls BIGINT DEFAULT 0 COMMENT ' 成功调用次数 ' ,
failed_calls BIGINT DEFAULT 0 COMMENT ' 失败调用次数 ' ,
total_tokens_used BIGINT DEFAULT 0 COMMENT ' 总Token使用量 ' ,
total_cost DECIMAL ( 18 , 8 ) DEFAULT 0 COMMENT ' 总费用 ' ,
avg_response_time BIGINT DEFAULT 0 COMMENT ' 平均响应时间(毫秒) ' ,
last_used_dt TIMESTAMP NULL DEFAULT NULL COMMENT ' 最后使用时间 ' ,
created_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ' 创建时间 ' ,
updated_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ' 更新时间 ' ,
UNIQUE KEY unique_model_user ( model_id , user_id ) ,
KEY fk_stat_model_id ( model_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 模型使用统计表 ' ;
CREATE INDEX idx_model_id ON snail_ai_model_usage_stat ( model_id ) ;
CREATE INDEX idx_user_id ON snail_ai_model_usage_stat ( user_id ) ;
CREATE INDEX idx_last_used_dt ON snail_ai_model_usage_stat ( last_used_dt ) ;
-- ============================================
-- 初始化数据 (可选)
-- ============================================
-- 插入常见的AI提供商(重复 provider_key 则忽略)
INSERT IGNORE INTO snail_ai_model_provider ( provider_name , provider_key , description , is_enabled )
VALUES ( ' OpenAI ' , ' openai ' , ' OpenAI官方模型 (GPT-4, GPT-3.5等) ' , 1 ) ,
( ' Claude ' , ' claude ' , ' Anthropic Claude模型 ' , 1 ) ,
( ' Ollama ' , ' ollama ' , ' 本地开源模型 (Llama, Mistral等) ' , 1 ) ,
( ' Google Gemini ' , ' gemini ' , ' Google Gemini模型 ' , 1 ) ;
-- ============================================
-- 智能体相关表
-- ============================================
-- 智能体主表
CREATE TABLE IF NOT EXISTS snail_ai_agent
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 255 ) NOT NULL COMMENT ' 智能体名称 ' ,
description TEXT COMMENT ' 智能体描述 ' ,
avatar VARCHAR ( 512 ) COMMENT ' 头像URL ' ,
instruction TEXT COMMENT ' 系统指令(System Prompt) ' ,
greeting TEXT COMMENT ' 欢迎语 ' ,
preset_questions TEXT COMMENT ' 预设问题列表(JSON数组字符串) ' ,
chat_model_id BIGINT COMMENT ' 关联的对话模型ID ' ,
memory_enabled TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否启用记忆库 ' ,
mcp_enabled TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否启用MCP ' ,
skill_enabled TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否启用Skill ' ,
web_search_enabled TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否启用联网搜索 ' ,
rag_enabled TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否启用RAG ' ,
rag_id BIGINT NULL COMMENT ' 绑定的RAG ID ' ,
short_term_memory_size INT DEFAULT 20 COMMENT ' 短期记忆滑动窗口保留条数 ' ,
creator_id BIGINT COMMENT ' 创建者用户ID ' ,
is_featured TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否精选 ' ,
view_count INT DEFAULT 0 COMMENT ' 浏览次数 ' ,
status TINYINT DEFAULT 1 COMMENT ' 状态: 1-活跃 2-非活跃 3-已废弃 4-已禁用 ' ,
config TEXT COMMENT ' 扩展配置(预留) ' ,
app_id VARCHAR ( 128 ) NULL COMMENT ' 关联应用ID(NULL=本地执行) ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体表 ' ;
CREATE INDEX idx_agent_creator ON snail_ai_agent ( creator_id ) ;
CREATE INDEX idx_agent_featured ON snail_ai_agent ( is_featured ) ;
-- 智能体对话表
CREATE TABLE IF NOT EXISTS snail_ai_agent_conversation
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
user_id BIGINT NOT NULL COMMENT ' 用户ID ' ,
conversation_id VARCHAR ( 64 ) NOT NULL COMMENT ' 对话ID(UUID) ' ,
title VARCHAR ( 255 ) COMMENT ' 对话标题 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_conv_id ( conversation_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体对话表 ' ;
CREATE INDEX idx_agent_conv_agent ON snail_ai_agent_conversation ( agent_id ) ;
CREATE INDEX idx_agent_conv_user ON snail_ai_agent_conversation ( user_id ) ;
-- 智能体对话消息记录表
CREATE TABLE IF NOT EXISTS snail_ai_agent_conversation_record
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
conversation_id VARCHAR ( 64 ) NOT NULL COMMENT ' 对话ID ' ,
user_id BIGINT NOT NULL COMMENT ' 用户ID ' ,
role VARCHAR ( 16 ) DEFAULT ' user ' COMMENT ' user/assistant ' ,
content TEXT COMMENT ' 消息内容 ' ,
thinking TEXT COMMENT ' 思考过程(仅assistant) ' ,
status INT DEFAULT 1 COMMENT ' 1=成功,2=失败,3=进行中 ' ,
token_count INT DEFAULT 0 COMMENT ' Token数 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体对话消息记录 ' ;
CREATE INDEX idx_agent_rec_conv ON snail_ai_agent_conversation_record ( conversation_id ) ;
-- 智能体使用统计表
CREATE TABLE IF NOT EXISTS snail_ai_agent_usage_stat
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
user_id BIGINT NOT NULL COMMENT ' 用户ID ' ,
user_name VARCHAR ( 255 ) COMMENT ' 用户名 ' ,
department VARCHAR ( 255 ) DEFAULT ' ' COMMENT ' 部门 ' ,
message_count INT DEFAULT 0 COMMENT ' 消息条数 ' ,
conversation_count INT DEFAULT 0 COMMENT ' 对话轮次 ' ,
stat_date DATE NOT NULL COMMENT ' 统计日期 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_agent_user_date ( agent_id , user_id , stat_date )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体使用统计 ' ;
CREATE INDEX idx_usage_agent ON snail_ai_agent_usage_stat ( agent_id ) ;
CREATE INDEX idx_usage_date ON snail_ai_agent_usage_stat ( stat_date ) ;
-- ============================================
-- MCP 服务管理
-- ============================================
-- MCP 服务配置表
CREATE TABLE IF NOT EXISTS snail_ai_mcp_server
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 255 ) NOT NULL COMMENT ' MCP服务名称 ' ,
description TEXT COMMENT ' MCP服务描述 ' ,
transport_type TINYINT ( 1 ) DEFAULT 1 COMMENT ' 传输类型: 1-SSE 2-Streamable HTTP 3-Stdio ' ,
base_uri VARCHAR ( 1024 ) COMMENT ' 服务基础地址(SSE/Streamable HTTP时使用) ' ,
endpoint VARCHAR ( 1024 ) COMMENT ' 端点路径(SSE/Streamable HTTP时可选) ' ,
command VARCHAR ( 1024 ) COMMENT ' Stdio命令(Stdio时必填) ' ,
args TEXT COMMENT ' Stdio命令参数(JSON数组) ' ,
env_vars TEXT COMMENT ' Stdio环境变量(JSON对象) ' ,
version VARCHAR ( 32 ) DEFAULT ' 1.0.0 ' COMMENT ' 版本 ' ,
auth_type TINYINT ( 1 ) DEFAULT 0 COMMENT ' 认证方式: 0-无需认证 1-API Key 2-OAuth 3-Basic Auth ' ,
auth_config TEXT COMMENT ' 认证配置(JSON) ' ,
status TINYINT ( 1 ) DEFAULT 0 COMMENT ' 状态: 0-未连接 1-已连接 2-异常 ' ,
capabilities TEXT COMMENT ' 能力列表(JSON数组) ' ,
last_connect_dt TIMESTAMP NULL COMMENT ' 最后连接时间 ' ,
creator_id BIGINT COMMENT ' 创建者用户ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' MCP服务配置表 ' ;
CREATE INDEX idx_mcp_server_creator ON snail_ai_mcp_server ( creator_id ) ;
CREATE INDEX idx_mcp_server_status ON snail_ai_mcp_server ( status ) ;
-- 智能体与MCP服务关联表(多对多)
CREATE TABLE IF NOT EXISTS snail_ai_agent_mcp_server
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
mcp_server_id BIGINT NOT NULL COMMENT ' MCP服务ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
UNIQUE KEY uk_agent_mcp ( agent_id , mcp_server_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体MCP服务关联表 ' ;
CREATE INDEX idx_agent_mcp_agent ON snail_ai_agent_mcp_server ( agent_id ) ;
CREATE INDEX idx_agent_mcp_server ON snail_ai_agent_mcp_server ( mcp_server_id ) ;
-- 用户订阅的智能体(多对多)
CREATE TABLE IF NOT EXISTS snail_ai_user_agent
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user_id BIGINT NOT NULL COMMENT ' 用户ID ' ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
UNIQUE KEY uk_user_agent ( user_id , agent_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 用户订阅的智能体 ' ;
CREATE INDEX idx_user_agent_user ON snail_ai_user_agent ( user_id ) ;
-- ============================================
-- Skill 技能包管理
-- ============================================
-- Skill 技能包表
CREATE TABLE IF NOT EXISTS snail_ai_skill
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 255 ) NOT NULL COMMENT ' Skill名称(从SKILL.md解析) ' ,
description TEXT COMMENT ' Skill描述(从SKILL.md解析) ' ,
file_name VARCHAR ( 255 ) COMMENT ' 上传的zip文件名 ' ,
file_path VARCHAR ( 1024 ) COMMENT ' 解压后存储路径 ' ,
file_size BIGINT DEFAULT 0 COMMENT ' 文件大小(字节) ' ,
skill_content LONGTEXT COMMENT ' SKILL.md正文内容(去除frontmatter) ' ,
storage_path VARCHAR ( 500 ) DEFAULT NULL COMMENT ' 对象存储相对路径前缀(如 skills/123/) ' ,
version BIGINT DEFAULT 0 COMMENT ' 版本号,文件变更时自增,用于缓存一致性校验 ' ,
has_files TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否包含支撑文件(0=仅SKILL.md, 1=有scripts/references等) ' ,
creator_id BIGINT COMMENT ' 创建者用户ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' Skill技能包表 ' ;
CREATE INDEX idx_skill_creator ON snail_ai_skill ( creator_id ) ;
-- Skill 支撑文件内容表
CREATE TABLE IF NOT EXISTS snail_ai_skill_file
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
skill_id BIGINT NOT NULL COMMENT ' Skill ID ' ,
file_path VARCHAR ( 255 ) NOT NULL COMMENT ' 文件相对路径 ' ,
content LONGTEXT NOT NULL COMMENT ' 文件内容 ' ,
file_size INT NOT NULL COMMENT ' 文件大小(字节) ' ,
encoding VARCHAR ( 50 ) DEFAULT ' utf-8 ' COMMENT ' 编码方式 ' ,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ' 创建时间 ' ,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ' 更新时间 ' ,
UNIQUE KEY uk_skill_path ( skill_id , file_path ) COMMENT ' 同一Skill不能有重复的文件路径 ' ,
KEY idx_skill_id ( skill_id ) COMMENT ' 技能ID索引 '
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' Skill支撑文件内容表 ' ;
-- 智能体与Skill关联表(多对多)
CREATE TABLE IF NOT EXISTS snail_ai_agent_skill
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
agent_id BIGINT NOT NULL COMMENT ' 智能体ID ' ,
skill_id BIGINT NOT NULL COMMENT ' Skill ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
UNIQUE KEY uk_agent_skill ( agent_id , skill_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 智能体Skill关联表 ' ;
CREATE INDEX idx_agent_skill_agent ON snail_ai_agent_skill ( agent_id ) ;
CREATE INDEX idx_agent_skill_skill ON snail_ai_agent_skill ( skill_id ) ;
-- ============================================================
CREATE TABLE IF NOT EXISTS snail_ai_store_instance
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR ( 128 ) NOT NULL COMMENT ' 实例名称 ' ,
category TINYINT ( 1 ) NOT NULL COMMENT ' 分类: 1-向量库 2-搜索引擎 ' ,
type TINYINT ( 1 ) NOT NULL COMMENT ' 类型: 1-PG_VECTOR 2-MILVUS 3-ELASTICSEARCH 4-PG_FULLTEXT ' ,
config TEXT DEFAULT NULL COMMENT ' 连接参数 JSON ' ,
status TINYINT ( 1 ) DEFAULT 1 COMMENT ' 状态: 0-停用 1-启用 ' ,
is_default TINYINT ( 1 ) DEFAULT 0 COMMENT ' 是否为该 category 下默认实例 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 存储实例 ' ;
CREATE INDEX idx_store_instance_category ON snail_ai_store_instance ( category ) ;
CREATE INDEX idx_store_instance_type ON snail_ai_store_instance ( type ) ;
-- ============================================================
-- 记忆系统(配置 / 主表 / 历史 / 摘要 / 统计 / 提取进度)
-- 依赖:snail_ai_store_instance( conversation_memory 外键)
-- ============================================================
-- 客户端应用
-- ----------------------------
CREATE TABLE IF NOT EXISTS snail_ai_app
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
app_id VARCHAR ( 128 ) NOT NULL COMMENT ' 应用唯一标识 ' ,
app_name VARCHAR ( 255 ) NOT NULL COMMENT ' 应用名称 ' ,
description VARCHAR ( 512 ) COMMENT ' 应用描述 ' ,
token VARCHAR ( 128 ) NOT NULL COMMENT ' 通信认证令牌 ' ,
route_strategy VARCHAR ( 32 ) DEFAULT ' LEAST_LOAD ' COMMENT ' 路由策略 ' ,
status TINYINT ( 1 ) DEFAULT 1 COMMENT ' 1=启用, 0=停用 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_app_id ( app_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 客户端应用 ' ;
INSERT INTO snail_ai_app VALUES ( 1 , ' 1 ' , ' demo ' , ' ' , ' SAI_7c557fc05a304b0482a65ca67afdb0b8 ' , ' LEAST_LOAD ' , 1 , ' 2026-05-26 12:31:17 ' , ' 2026-05-26 12:31:17 ' ) ;
-- ----------------------------
-- AI客户端实例节点
-- ----------------------------
CREATE TABLE IF NOT EXISTS snail_ai_client_node
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
app_id VARCHAR ( 128 ) NOT NULL COMMENT ' 所属应用ID ' ,
host_id VARCHAR ( 128 ) NOT NULL COMMENT ' 客户端实例唯一标识 ' ,
host_ip VARCHAR ( 64 ) NOT NULL COMMENT ' 客户端IP ' ,
grpc_port INT NOT NULL COMMENT ' 客户端gRPC端口 ' ,
max_concurrent INT DEFAULT 10 COMMENT ' 最大并发对话数 ' ,
active_chats INT DEFAULT 0 COMMENT ' 当前活跃对话数 ' ,
supported_providers TEXT COMMENT ' 支持的模型提供商(JSON数组) ' ,
labels TEXT COMMENT ' 路由标签 ' ,
expire_dt DATETIME NOT NULL COMMENT ' 过期时间(心跳更新) ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_client_node ( app_id , host_id ) ,
INDEX idx_app_expire ( app_id , expire_dt )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' AI客户端实例节点 ' ;
-- OpenAPI 外部用户映射表
CREATE TABLE snail_ai_openapi_user
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
app_id VARCHAR ( 128 ) NOT NULL COMMENT ' 关联 snail_ai_app.app_id ' ,
open_id VARCHAR ( 64 ) NOT NULL COMMENT ' 平台分配的唯一标识(UUID) ' ,
platform_user_id BIGINT NOT NULL COMMENT ' 关联 snail_ai_user.id,注册时自动创建 ' ,
external_id VARCHAR ( 256 ) DEFAULT NULL COMMENT ' 外部系统的用户标识(可选,幂等用) ' ,
nickname VARCHAR ( 128 ) DEFAULT NULL COMMENT ' 外部用户昵称 ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_app_open ( app_id , open_id ) ,
UNIQUE KEY uk_app_external ( app_id , external_id ) ,
INDEX idx_open_id ( open_id ) ,
INDEX idx_platform_user ( platform_user_id )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
COMMENT = ' OpenAPI 外部用户映射表 ' ;
-- ----------------------------
-- 通用资源存储
-- ----------------------------
CREATE TABLE IF NOT EXISTS snail_ai_resource
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
storage_key VARCHAR ( 512 ) NOT NULL COMMENT ' 存储键(相对路径或对象Key) ' ,
original_name VARCHAR ( 255 ) NOT NULL COMMENT ' 原始文件名 ' ,
file_size BIGINT DEFAULT 0 COMMENT ' 文件大小(bytes) ' ,
mime_type VARCHAR ( 128 ) COMMENT ' MIME类型 ' ,
storage_type VARCHAR ( 32 ) NOT NULL DEFAULT ' LOCAL ' COMMENT ' 存储类型: LOCAL/MINIO ' ,
access_url VARCHAR ( 1024 ) COMMENT ' 访问URL ' ,
biz_type VARCHAR ( 64 ) NOT NULL DEFAULT ' GENERAL ' COMMENT ' 业务类型: AVATAR/ATTACHMENT/DOCUMENT/GENERAL ' ,
biz_id BIGINT COMMENT ' 关联业务ID ' ,
creator_id BIGINT COMMENT ' 上传者ID ' ,
create_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
update_dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
UNIQUE KEY uk_storage_key ( storage_key ) ,
INDEX idx_biz ( biz_type , biz_id ) ,
INDEX idx_creator ( creator_id )
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = ' 通用资源存储 ' ;