优化AI,使用qwen

This commit is contained in:
hajimi
2026-06-10 13:10:20 +08:00
parent f5da89af8f
commit 10ebe39c30
914 changed files with 778 additions and 121968 deletions
+79
View File
@@ -0,0 +1,79 @@
CREATE TABLE IF NOT EXISTS `la_ai_kb_document` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`domain` varchar(32) NOT NULL DEFAULT '' COMMENT 'article/post/lottery',
`subtype` varchar(32) NOT NULL DEFAULT '' COMMENT 'article/post/draw_result/ai_history',
`source_id` bigint unsigned NOT NULL DEFAULT 0,
`title` varchar(255) NOT NULL DEFAULT '',
`summary` text NULL,
`canonical_text` longtext NULL,
`keywords` text NULL,
`metadata_json` json NULL,
`source_created_at` int unsigned NOT NULL DEFAULT 0,
`source_updated_at` int unsigned NOT NULL DEFAULT 0,
`content_hash` varchar(64) NOT NULL DEFAULT '',
`is_active` tinyint unsigned NOT NULL DEFAULT 1,
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_domain_subtype_source` (`domain`, `subtype`, `source_id`),
KEY `idx_domain_active` (`domain`, `is_active`),
KEY `idx_source_updated` (`source_updated_at`),
FULLTEXT KEY `ft_doc_text` (`title`, `summary`, `canonical_text`, `keywords`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI知识库文档主表';
CREATE TABLE IF NOT EXISTS `la_ai_kb_chunk` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`document_id` bigint unsigned NOT NULL DEFAULT 0,
`collection_name` varchar(32) NOT NULL DEFAULT 'global',
`chunk_index` int unsigned NOT NULL DEFAULT 0,
`chunk_text` mediumtext NULL,
`embedding_json` mediumtext NULL,
`embedding_model` varchar(100) NOT NULL DEFAULT '',
`embedding_dim` int unsigned NOT NULL DEFAULT 0,
`vector_norm` decimal(20,8) NOT NULL DEFAULT 0.00000000,
`keyword_text` text NULL,
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_document_chunk` (`document_id`, `chunk_index`),
KEY `idx_document` (`document_id`),
KEY `idx_collection` (`collection_name`),
FULLTEXT KEY `ft_chunk_text` (`chunk_text`, `keyword_text`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI知识库切片表';
CREATE TABLE IF NOT EXISTS `la_ai_kb_sync_job` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`domain` varchar(32) NOT NULL DEFAULT '',
`subtype` varchar(32) NOT NULL DEFAULT '',
`source_id` bigint unsigned NOT NULL DEFAULT 0,
`action` varchar(16) NOT NULL DEFAULT 'upsert',
`priority` int unsigned NOT NULL DEFAULT 100,
`status` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '0待处理1处理中2成功3失败',
`retry_count` int unsigned NOT NULL DEFAULT 0,
`error_msg` varchar(500) NOT NULL DEFAULT '',
`scheduled_at` int unsigned NOT NULL DEFAULT 0,
`processed_at` int unsigned NOT NULL DEFAULT 0,
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_status_schedule` (`status`, `scheduled_at`),
KEY `idx_domain_source` (`domain`, `subtype`, `source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI知识库同步任务表';
CREATE TABLE IF NOT EXISTS `la_ai_kb_query_log` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` int unsigned NOT NULL DEFAULT 0,
`scene` varchar(50) NOT NULL DEFAULT '',
`ref_id` bigint unsigned NOT NULL DEFAULT 0,
`query_text` text NULL,
`filters_json` json NULL,
`hit_docs_json` json NULL,
`tokens_used` int unsigned NOT NULL DEFAULT 0,
`cost_ms` int unsigned NOT NULL DEFAULT 0,
`status` tinyint unsigned NOT NULL DEFAULT 1 COMMENT '1成功2失败',
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_scene_ref` (`scene`, `ref_id`),
KEY `idx_user_time` (`user_id`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI知识库查询日志';
+39
View File
@@ -0,0 +1,39 @@
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'embedding_api_key', '', '知识库 Embedding API Key', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'embedding_api_key');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'embedding_base_url', '', '知识库 Embedding API Base URL', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'embedding_base_url');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'embedding_model', '', '知识库 Embedding 模型名', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'embedding_model');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'embedding_dim', '1024', '知识库 Embedding 维度', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'embedding_dim');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'kb_chunk_size', '600', '知识库切片长度', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'kb_chunk_size');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'kb_chunk_overlap', '80', '知识库切片重叠长度', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'kb_chunk_overlap');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'kb_fulltext_topn', '200', '知识库全文候选数量', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'kb_fulltext_topn');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'kb_vector_topn', '30', '知识库向量重排数量', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'kb_vector_topn');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'kb_final_topk', '8', '知识库最终召回数量', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'kb_final_topk');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'post_analysis_prompt', '', '帖子知识库分析提示词', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'post_analysis_prompt');
@@ -0,0 +1,11 @@
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'openai_api_key', '', 'GPT-4o 翻译 API Key', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'openai_api_key');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'openai_base_url', 'https://api.openai.com', 'GPT-4o 翻译 API Base URL(不带 /v1', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'openai_base_url');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'openai_translation_model', 'gpt-4o', '世界杯资讯 / 特朗普帖子翻译模型', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'openai_translation_model');
+26
View File
@@ -0,0 +1,26 @@
INSERT INTO `la_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`)
SELECT COALESCE((SELECT `pid` FROM `la_system_menu` WHERE `perms` = 'ai.aiConfig/lists' LIMIT 1), 0), 'C', '知识库配置', '', 0, 'ai.kbConfig/lists', 'kb_config', 'ai/kb_config/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_system_menu` WHERE `perms` = 'ai.kbConfig/lists');
INSERT INTO `la_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`)
SELECT COALESCE((SELECT `pid` FROM `la_system_menu` WHERE `perms` = 'ai.aiConfig/lists' LIMIT 1), 0), 'C', '知识文档', '', 0, 'ai.kbDocument/lists', 'kb_document', 'ai/kb_document/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_system_menu` WHERE `perms` = 'ai.kbDocument/lists');
INSERT INTO `la_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`)
SELECT COALESCE((SELECT `pid` FROM `la_system_menu` WHERE `perms` = 'ai.aiConfig/lists' LIMIT 1), 0), 'C', '同步任务', '', 0, 'ai.kbSyncJob/lists', 'kb_sync_job', 'ai/kb_sync_job/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_system_menu` WHERE `perms` = 'ai.kbSyncJob/lists');
INSERT INTO `la_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`)
SELECT COALESCE((SELECT `pid` FROM `la_system_menu` WHERE `perms` = 'ai.aiConfig/lists' LIMIT 1), 0), 'C', '查询日志', '', 0, 'ai.kbQueryLog/lists', 'kb_query_log', 'ai/kb_query_log/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_system_menu` WHERE `perms` = 'ai.kbQueryLog/lists');
INSERT INTO `la_system_role_menu` (`role_id`, `menu_id`)
SELECT 1, m.id
FROM `la_system_menu` m
WHERE m.`perms` IN ('ai.kbConfig/lists', 'ai.kbDocument/lists', 'ai.kbSyncJob/lists', 'ai.kbQueryLog/lists')
AND NOT EXISTS (
SELECT 1
FROM `la_system_role_menu` rm
WHERE rm.`role_id` = 1
AND rm.`menu_id` = m.`id`
);
@@ -0,0 +1,14 @@
INSERT INTO `la_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`)
SELECT 70, 'C', 'AI评论任务', '', 0, 'article.ai_comment_task/lists', 'ai_comment_task', 'article/ai_comment_task/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (
SELECT 1 FROM `la_system_menu`
WHERE `perms` = 'article.ai_comment_task/lists'
);
INSERT INTO `la_system_role_menu` (`role_id`, `menu_id`)
SELECT 1, (SELECT id FROM `la_system_menu` WHERE `perms` = 'article.ai_comment_task/lists' LIMIT 1)
WHERE NOT EXISTS (
SELECT 1 FROM `la_system_role_menu` rm
JOIN `la_system_menu` m ON m.id = rm.menu_id
WHERE m.perms = 'article.ai_comment_task/lists'
);
+7
View File
@@ -0,0 +1,7 @@
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'mtranserver_base_url', 'http://127.0.0.1:8989', '本地 MTranServer 翻译服务地址', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'mtranserver_base_url');
INSERT INTO `la_ai_config` (`name`, `value`, `remark`, `create_time`, `update_time`)
SELECT 'mtranserver_api_token', '', '本地 MTranServer API Token(如未配置可留空)', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
WHERE NOT EXISTS (SELECT 1 FROM `la_ai_config` WHERE `name` = 'mtranserver_api_token');