-- 物业 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_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(); -- 知识库批量上传队列:上传秒回后由后台 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='知识库批量上传队列';