Files
prop-ai-hr/backend/script/sql/aihr_knowledge_mysql8.sql
T

177 lines
12 KiB
SQL

-- 物业 AI HR 知识库最小表结构。
-- ponytail: adapted from ruoyi-ai knowledge_* tables; keep only fields needed by SOP RAG first.
CREATE TABLE IF NOT EXISTS `aihr_knowledge_info` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`name` varchar(100) NOT NULL COMMENT '知识库名称',
`description` varchar(1000) DEFAULT NULL COMMENT '知识库描述',
`separator` varchar(255) DEFAULT NULL COMMENT '知识分隔符',
`overlap_char` int DEFAULT 120 COMMENT '重叠字符数',
`retrieve_limit` int DEFAULT 5 COMMENT '检索条数',
`similarity_threshold` double DEFAULT 0.5 COMMENT '相似度阈值',
`text_block_size` int DEFAULT 800 COMMENT '文本块大小',
`vector_model` varchar(50) DEFAULT NULL COMMENT '向量库',
`embedding_model` varchar(100) DEFAULT NULL COMMENT '向量模型',
`enable_hybrid` tinyint(1) DEFAULT 1 COMMENT '是否启用混合检索',
`hybrid_alpha` double DEFAULT 0.5 COMMENT '混合检索权重比例',
`system_prompt` text COMMENT '系统提示词',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_by` bigint DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_aihr_knowledge_info_tenant` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识库';
CREATE TABLE IF NOT EXISTS `aihr_knowledge_attach` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`knowledge_id` bigint NOT NULL COMMENT '知识库ID',
`oss_id` bigint DEFAULT NULL COMMENT '对象存储ID',
`doc_id` varchar(32) DEFAULT NULL COMMENT '文档ID',
`name` varchar(500) DEFAULT NULL COMMENT '附件名称',
`type` varchar(50) NOT NULL COMMENT '附件类型',
`status` tinyint DEFAULT 0 COMMENT '解析状态: 0待解析, 1解析中, 2已解析, 3解析失败',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_by` bigint DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_knowledge_attach_name` (`knowledge_id`, `name`),
KEY `idx_aihr_knowledge_attach_doc` (`doc_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识库附件';
CREATE TABLE IF NOT EXISTS `aihr_knowledge_fragment` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`knowledge_id` bigint NOT NULL COMMENT '知识库ID',
`idx` int NOT NULL COMMENT '片段序号',
`doc_id` varchar(32) DEFAULT NULL COMMENT '文档ID',
`content` text NOT NULL COMMENT '文档内容',
`embedding_json` longtext DEFAULT NULL COMMENT '向量 JSON',
`embedding_model` varchar(100) DEFAULT NULL COMMENT '向量模型',
`embedding_time` datetime DEFAULT NULL COMMENT '向量生成时间',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_by` bigint DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_aihr_knowledge_fragment_doc` (`doc_id`),
KEY `idx_aihr_knowledge_fragment_kid` (`knowledge_id`),
FULLTEXT KEY `ft_aihr_knowledge_fragment_content` (`content`) WITH PARSER ngram
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识片段';
CREATE TABLE IF NOT EXISTS `aihr_knowledge_acl` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`knowledge_id` bigint NOT NULL COMMENT '企业知识库ID',
`access_scope` varchar(20) NOT NULL COMMENT '授权范围:TENANT/PROJECT/POSITION',
`project_code` varchar(50) DEFAULT NULL COMMENT '项目编码,PROJECT必填,POSITION可选',
`position_name` varchar(100) DEFAULT NULL COMMENT '规范岗位名称,POSITION必填',
`position_level` varchar(30) DEFAULT NULL COMMENT '岗位层级,POSITION可选',
`classification` varchar(20) NOT NULL DEFAULT 'INTERNAL' COMMENT '知识密级:INTERNAL/RESTRICTED',
`enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`rule_key` varchar(220) GENERATED ALWAYS AS
(concat(`access_scope`, '|', ifnull(`project_code`, ''), '|', ifnull(`position_name`, ''), '|', ifnull(`position_level`, ''))) STORED,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_knowledge_acl_rule` (`tenant_id`, `knowledge_id`, `rule_key`),
KEY `idx_aihr_knowledge_acl_lookup` (`tenant_id`, `enabled`, `access_scope`),
KEY `idx_aihr_knowledge_acl_knowledge` (`tenant_id`, `knowledge_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='企业知识访问控制,默认无ACL不可见';
CREATE TABLE IF NOT EXISTS `aihr_knowledge_import_task` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`directory` varchar(500) NOT NULL COMMENT '导入相对目录',
`category` varchar(100) NOT NULL COMMENT '知识库分类',
`status` tinyint DEFAULT 0 COMMENT '任务状态: 0等待, 1运行中, 2完成, 3失败, 4取消',
`total_files` int DEFAULT 0 COMMENT '发现文件数',
`imported_files` int DEFAULT 0 COMMENT '已导入文件数',
`failed_files` int DEFAULT 0 COMMENT '失败文件数',
`current_file` varchar(500) DEFAULT NULL COMMENT '当前文件',
`started_time` datetime DEFAULT NULL COMMENT '开始时间',
`finished_time` datetime DEFAULT NULL COMMENT '完成时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_aihr_knowledge_import_task_tenant` (`tenant_id`, `update_time`),
KEY `idx_aihr_knowledge_import_task_status` (`tenant_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识库导入任务';
INSERT INTO `aihr_knowledge_info`
(`id`, `tenant_id`, `name`, `description`, `separator`, `overlap_char`, `retrieve_limit`, `similarity_threshold`, `text_block_size`, `vector_model`, `embedding_model`, `enable_hybrid`, `hybrid_alpha`, `system_prompt`, `create_time`, `update_time`, `remark`)
VALUES
(1001, '000000', '投诉处理 SOP', '业主投诉的接待、记录、派单、反馈和闭环确认。', '\n\n', 120, 5, 0.5, 800, NULL, NULL, 1, 1.0, '回答必须引用投诉处理 SOP 片段,不得编造未命中的金额、责任和时限。', NOW(), NOW(), 'seed:sop'),
(1002, '000000', '催缴沟通 SOP', '缴费提醒、费用争议回应、服务问题承接。', '\n\n', 120, 5, 0.5, 800, NULL, NULL, 1, 1.0, '回答必须区分服务整改与费用义务。', NOW(), NOW(), 'seed:sop'),
(1003, '000000', '报修跟进 SOP', '报修接单、派工、现场反馈、复核关闭。', '\n\n', 120, 5, 0.5, 800, NULL, NULL, 1, 1.0, '回答必须给出明确节点和责任人。', NOW(), NOW(), 'seed:sop')
ON DUPLICATE KEY UPDATE
`description` = VALUES(`description`),
`system_prompt` = VALUES(`system_prompt`),
`update_time` = NOW();
INSERT INTO `aihr_knowledge_attach`
(`id`, `tenant_id`, `knowledge_id`, `doc_id`, `name`, `type`, `status`, `create_time`, `update_time`, `remark`)
VALUES
(1001, '000000', 1001, 'sop_complaint_v1', '投诉处理 SOP v1.0', 'sop', 2, NOW(), NOW(), 'owner:品质组'),
(1002, '000000', 1002, 'sop_payment_v1', '催缴沟通 SOP v1.0', 'sop', 2, NOW(), NOW(), 'owner:财务组'),
(1003, '000000', 1003, 'sop_repair_v1', '报修跟进 SOP v1.0', 'sop', 2, NOW(), NOW(), 'owner:工程组')
ON DUPLICATE KEY UPDATE
`status` = VALUES(`status`),
`update_time` = NOW();
INSERT INTO `aihr_knowledge_fragment`
(`id`, `tenant_id`, `knowledge_id`, `idx`, `doc_id`, `content`, `create_time`, `update_time`, `remark`)
VALUES
(100101, '000000', 1001, 1, 'sop_complaint_v1', '接到业主投诉后,管家第一步应先安抚业主情绪,表达理解,避免立即争辩责任归属。', NOW(), NOW(), 'seed:sop'),
(100102, '000000', 1001, 2, 'sop_complaint_v1', '投诉记录必须包含房号、联系人、发生时间、现场照片、影响范围和业主核心诉求。', NOW(), NOW(), 'seed:sop'),
(100103, '000000', 1001, 3, 'sop_complaint_v1', '创建投诉工单后,应告知首次反馈时限、责任人和下一次同步节点。', NOW(), NOW(), 'seed:sop'),
(100201, '000000', 1002, 1, 'sop_payment_v1', '业主因服务不满拒缴时,客服应先记录具体服务问题,不以欠费事实压过诉求。', NOW(), NOW(), 'seed:sop'),
(100202, '000000', 1002, 2, 'sop_payment_v1', '催缴沟通需说明费用构成、账期和缴费渠道,避免承诺超出权限的减免。', NOW(), NOW(), 'seed:sop'),
(100203, '000000', 1002, 3, 'sop_payment_v1', '对服务整改事项设置跟进责任人,并在约定时间内反馈处理进度。', NOW(), NOW(), 'seed:sop'),
(100301, '000000', 1003, 1, 'sop_repair_v1', '报修超时跟进前,必须确认工单编号、责任班组、当前状态和超时原因。', NOW(), NOW(), 'seed:sop'),
(100302, '000000', 1003, 2, 'sop_repair_v1', '向业主同步下一次反馈或到场时间,避免只说尽快处理。', NOW(), NOW(), 'seed:sop'),
(100303, '000000', 1003, 3, 'sop_repair_v1', '维修完成后需向业主确认处理效果,再补充关闭证据并关闭工单。', NOW(), NOW(), 'seed:sop')
ON DUPLICATE KEY UPDATE
`content` = VALUES(`content`),
`update_time` = NOW();
INSERT INTO `aihr_knowledge_acl`
(`id`, `tenant_id`, `knowledge_id`, `access_scope`, `project_code`, `position_name`, `position_level`, `classification`, `enabled`, `create_time`, `update_time`)
VALUES
(11001, '000000', 1001, 'POSITION', NULL, '生活顾问', '一线', 'INTERNAL', 1, NOW(), NOW()),
(11002, '000000', 1002, 'POSITION', NULL, '生活顾问', '一线', 'INTERNAL', 1, NOW(), NOW()),
(11003, '000000', 1003, 'POSITION', NULL, '生活顾问', '一线', 'INTERNAL', 1, NOW(), NOW())
ON DUPLICATE KEY UPDATE
`classification` = VALUES(`classification`),
`enabled` = VALUES(`enabled`),
`update_time` = NOW();
-- 知识库批量上传队列:上传秒回后由后台 worker 加工,支持单文件重试
CREATE TABLE IF NOT EXISTS `aihr_knowledge_upload_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`batch_id` varchar(64) NOT NULL COMMENT '上传批次',
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`category` varchar(100) DEFAULT '' COMMENT '目标分类',
`staging_path` varchar(500) NOT NULL COMMENT '暂存文件路径',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待处理 1处理中 2完成 3失败',
`error` varchar(500) DEFAULT NULL COMMENT '失败原因',
`doc_id` varchar(80) DEFAULT NULL COMMENT '入库文档ID',
`fragment_count` int DEFAULT NULL COMMENT '片段数',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_aihr_upload_item_batch` (`tenant_id`, `batch_id`, `id`),
KEY `idx_aihr_upload_item_status` (`tenant_id`, `status`, `update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='知识库批量上传队列';