Files
schoolNews/schoolNewsServ/.bin/mysql/sql/createTableAI.sql
2025-11-28 15:40:09 +08:00

242 lines
13 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use school_news;
-- 智能体配置表
DROP TABLE IF EXISTS `tb_ai_agent_config`;
CREATE TABLE `tb_ai_agent_config` (
`id` VARCHAR(50) NOT NULL COMMENT '配置ID',
`name` VARCHAR(100) NOT NULL COMMENT '智能体名称',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '智能体头像',
`description` VARCHAR(500) DEFAULT NULL COMMENT '智能体描述',
`connect_internet` INT(4) DEFAULT 0 COMMENT '是否连接互联网0否 1是',
`dify_app_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify应用ID',
`dify_api_key` VARCHAR(255) DEFAULT NULL COMMENT 'Dify应用API密钥',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`, `deleted`),
KEY `idx_dify_app` (`dify_app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='智能体配置表';
-- 知识库表(支持资源权限控制)
DROP TABLE IF EXISTS `tb_ai_knowledge`;
CREATE TABLE `tb_ai_knowledge` (
`id` VARCHAR(50) NOT NULL COMMENT '知识库ID',
`title` VARCHAR(255) NOT NULL COMMENT '知识库标题',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '知识库头像',
`description` VARCHAR(500) DEFAULT NULL COMMENT '知识库描述',
`content` LONGTEXT COMMENT '知识内容(手动添加时使用)',
`source_type` INT(4) DEFAULT 1 COMMENT '来源类型1手动添加 2文件导入 3资源同步',
`source_id` VARCHAR(50) DEFAULT NULL COMMENT '来源ID',
`file_name` VARCHAR(255) DEFAULT NULL COMMENT '文件名',
`file_path` VARCHAR(500) DEFAULT NULL COMMENT '文件路径',
`category` VARCHAR(100) DEFAULT NULL COMMENT '分类',
`tags` VARCHAR(500) DEFAULT NULL COMMENT '标签JSON数组',
`dify_dataset_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify知识库IDDataset ID',
`dify_indexing_technique` VARCHAR(50) DEFAULT 'high_quality' COMMENT 'Dify索引方式high_quality/economy',
`embedding_model` VARCHAR(100) DEFAULT NULL COMMENT '向量模型名称',
`embedding_model_provider` VARCHAR(100) DEFAULT NULL COMMENT '向量模型提供商',
`rerank_model` VARCHAR(100) DEFAULT NULL COMMENT 'Rerank模型名称',
`rerank_model_provider` VARCHAR(100) DEFAULT NULL COMMENT 'Rerank模型提供商',
`reranking_enable` TINYINT(1) DEFAULT 0 COMMENT '是否启用Rerank0否 1是',
`retrieval_top_k` INT(11) DEFAULT 2 COMMENT '检索Top K返回前K个结果',
`retrieval_score_threshold` DECIMAL(3,2) DEFAULT 0.00 COMMENT '检索分数阈值0.00-1.00',
`vector_id` VARCHAR(100) DEFAULT NULL COMMENT '向量ID用于向量检索',
`document_count` INT(11) DEFAULT 0 COMMENT '文档数量',
`total_chunks` INT(11) DEFAULT 0 COMMENT '总分段数',
`status` INT(4) DEFAULT 1 COMMENT '状态0禁用 1启用 2处理中',
`creator` VARCHAR(50) NOT NULL COMMENT '创建者用户ID',
`creator_dept` VARCHAR(50) DEFAULT NULL COMMENT '创建者部门ID',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_creator` (`creator`, `deleted`),
KEY `idx_creator_dept` (`creator_dept`),
KEY `idx_source` (`source_type`, `source_id`),
KEY `idx_category` (`category`),
KEY `idx_status` (`status`, `deleted`),
KEY `idx_dify_dataset` (`dify_dataset_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='知识库表resource_type=10支持权限控制';
-- 对话会话表
DROP TABLE IF EXISTS `tb_ai_conversation`;
CREATE TABLE `tb_ai_conversation` (
`id` VARCHAR(50) NOT NULL COMMENT '会话ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`agent_id` VARCHAR(50) DEFAULT NULL COMMENT '智能体ID',
`title` VARCHAR(255) DEFAULT '新对话' COMMENT '会话标题',
`summary` VARCHAR(500) DEFAULT NULL COMMENT '对话摘要AI自动生成',
`dify_conversation_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify会话ID',
`status` INT(4) DEFAULT 1 COMMENT '状态0已结束 1进行中',
`is_favorite` TINYINT(1) DEFAULT 0 COMMENT '是否收藏0否 1是',
`is_pinned` TINYINT(1) DEFAULT 0 COMMENT '是否置顶0否 1是',
`message_count` INT(11) DEFAULT 0 COMMENT '消息数量',
`total_tokens` INT(11) DEFAULT 0 COMMENT '总Token消耗',
`last_message_time` TIMESTAMP NULL DEFAULT NULL COMMENT '最后消息时间',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_user_createtime` (`user_id`, `create_time` DESC),
KEY `idx_user_favorite` (`user_id`, `is_favorite`),
KEY `idx_user_pinned` (`user_id`, `is_pinned`),
KEY `idx_agent` (`agent_id`),
KEY `idx_dify_conversation` (`dify_conversation_id`),
KEY `idx_last_message_time` (`last_message_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='对话会话表';
-- 对话消息表
DROP TABLE IF EXISTS `tb_ai_message`;
CREATE TABLE `tb_ai_message` (
`id` VARCHAR(50) NOT NULL COMMENT '消息ID',
`conversation_id` VARCHAR(50) NOT NULL COMMENT '会话ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`agent_id` VARCHAR(50) DEFAULT NULL COMMENT '智能体ID',
`role` VARCHAR(20) NOT NULL COMMENT '角色user用户 assistant助手 system系统',
`content` LONGTEXT NOT NULL COMMENT '消息内容',
`file_ids` VARCHAR(500) DEFAULT NULL COMMENT '关联文件IDJSON数组',
`knowledge_ids` VARCHAR(500) DEFAULT NULL COMMENT '引用知识IDJSON数组',
`knowledge_refs` TEXT DEFAULT NULL COMMENT '知识库引用详情JSON数组包含title/snippet/score',
`token_count` INT(11) DEFAULT 0 COMMENT 'Token数量',
`dify_message_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify消息ID',
`rating` INT(4) DEFAULT NULL COMMENT '评分1好评 -1差评 0取消评价',
`feedback` VARCHAR(1000) DEFAULT NULL COMMENT '反馈内容',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_conversation_createtime` (`conversation_id`, `create_time` ASC),
KEY `idx_user` (`user_id`),
KEY `idx_agent` (`agent_id`),
KEY `idx_role` (`role`),
KEY `idx_create_time` (`create_time`),
KEY `idx_deleted` (`deleted`),
FULLTEXT KEY `ft_content` (`content`) WITH PARSER ngram
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='对话消息表(支持全文检索)';
-- 上传文件表
DROP TABLE IF EXISTS `tb_ai_upload_file`;
CREATE TABLE `tb_ai_upload_file` (
`id` VARCHAR(50) NOT NULL COMMENT 'ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`knowledge_id` VARCHAR(50) DEFAULT NULL COMMENT '所属知识库ID',
`conversation_id` VARCHAR(50) DEFAULT NULL COMMENT '关联会话ID对话中上传',
`message_id` VARCHAR(50) DEFAULT NULL COMMENT '关联消息ID绑定到具体的用户消息',
`sys_file_id` VARCHAR(32) DEFAULT NULL COMMENT '系统文件ID关联tb_sys_file实现永久存储',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '文件路径',
`file_size` BIGINT(20) DEFAULT 0 COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) DEFAULT NULL COMMENT '文件类型pdf/txt/docx/md等',
`mime_type` VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型',
`extracted_text` LONGTEXT COMMENT '提取的文本内容',
`dify_document_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify文档ID',
`dify_batch_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify批次ID',
`dify_upload_file_id` VARCHAR(100) DEFAULT NULL COMMENT 'Dify上传文件ID对话中上传的文件',
`chunk_count` INT(11) DEFAULT 0 COMMENT '分段数量',
`status` INT(4) DEFAULT 0 COMMENT '状态0上传中 1处理中 2已完成 3失败',
`enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用0否 1是',
`display_status` VARCHAR(50) DEFAULT NULL COMMENT '显示状态indexing/completed/failed',
`error_message` VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_knowledge` (`knowledge_id`),
KEY `idx_conversation` (`conversation_id`),
KEY `idx_message` (`message_id`),
KEY `idx_sys_file` (`sys_file_id`),
KEY `idx_dify_document` (`dify_document_id`),
KEY `idx_dify_upload_file` (`dify_upload_file_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_deleted` (`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上传文件表(关联系统文件表)';
-- AI使用统计表
DROP TABLE IF EXISTS `tb_ai_usage_statistics`;
CREATE TABLE `tb_ai_usage_statistics` (
`id` VARCHAR(50) NOT NULL COMMENT '统计ID',
`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
`agent_id` VARCHAR(50) DEFAULT NULL COMMENT '智能体ID为空表示全局统计',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`conversation_count` INT(11) DEFAULT 0 COMMENT '会话数量',
`message_count` INT(11) DEFAULT 0 COMMENT '消息数量',
`total_tokens` INT(11) DEFAULT 0 COMMENT '总Token数',
`file_count` INT(11) DEFAULT 0 COMMENT '上传文件数',
`knowledge_query_count` INT(11) DEFAULT 0 COMMENT '知识库查询次数',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_agent_date` (`user_id`, `agent_id`, `stat_date`),
KEY `idx_user` (`user_id`),
KEY `idx_agent` (`agent_id`),
KEY `idx_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI使用统计表';
-- ========================================
-- 知识库权限控制说明
-- ========================================
-- 知识库使用统一权限表 tb_resource_permission 进行权限控制
-- resource_type = 10 (AI_KNOWLEDGE)
--
-- 权限逻辑:
-- 1. 用户创建知识库时,自动创建权限记录:
-- - 为创建者所在部门创建全权限can_read=1, can_write=1, can_execute=1
-- - 为root_department的superadmin创建全权限
--
-- 2. 权限查询示例Java Service层
-- SELECT k.* FROM tb_ai_knowledge k
-- INNER JOIN tb_resource_permission rp
-- ON rp.resource_type = 10
-- AND rp.resource_id = k.id
-- AND rp.deleted = 0
-- WHERE k.deleted = 0
-- AND (
-- (rp.dept_id IS NULL AND rp.role_id IS NULL) -- 公开
-- OR (rp.dept_id = '用户部门' AND rp.role_id IS NULL)
-- OR (rp.dept_id IS NULL AND rp.role_id = '用户角色')
-- OR (rp.dept_id = '用户部门' AND rp.role_id = '用户角色')
-- )
-- AND rp.can_read = 1;
--
-- 3. 知识库分类权限示例:
-- - 公开知识库dept_id=NULL, role_id=NULL所有人可读
-- - 部门知识库dept_id='xxx', role_id=NULL部门内可读写
-- - 角色知识库dept_id=NULL, role_id='teacher'(所有教师可读)
-- - 私有知识库:仅创建者部门+特定角色可访问
--
-- ========================================
-- 初始化示例数据
-- ========================================
-- 插入默认智能体配置
INSERT INTO `tb_ai_agent_config`
(`id`, `name`, `avatar`, `description`, `connect_internet`,`dify_api_key`, `status`, `creator`, `create_time`)
VALUES
('agent_default_001', '校园助手', NULL, '你是一个专业的思政学习助手,致力于帮助用户学习思想政治理论知识。',
0, 'app-fwOqGFLTsZtekCQYlOmj9f8x', 1, '1', NOW());
-- 插入示例知识库(需要配合权限表使用)
-- 为示例知识库创建权限(公开可读)
-- 注意:实际使用时应该在应用层通过权限服务自动创建
-- INSERT INTO `tb_resource_permission`
-- (`id`, `resource_type`, `resource_id`, `dept_id`, `role_id`, `can_read`, `can_write`, `can_execute`, `creator`, `create_time`)
-- VALUES
-- ('perm_ai_kb_001', 10, 'knowledge_demo_001', NULL, NULL, 1, 0, 0, '1', NOW()),
-- ('perm_ai_kb_002', 10, 'knowledge_demo_002', NULL, NULL, 1, 0, 0, '1', NOW());