admin_ai_model_config.sql 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. -- =====================================================
  2. -- Admin DB: AI模型统一配置表
  3. -- 将除了FastGPT、TTS、图像/语音以外的所有AI模型配置
  4. -- 从租户DB迁移到Admin DB统一管理
  5. -- =====================================================
  6. -- 1. 模型配置表
  7. DROP TABLE IF EXISTS admin_ai_model;
  8. CREATE TABLE admin_ai_model (
  9. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
  10. model_name VARCHAR(100) NOT NULL COMMENT '模型显示名称',
  11. provider_code VARCHAR(50) NOT NULL COMMENT '供应商编码: doubao/qwen/yuanbao/deepseek',
  12. model_identifier VARCHAR(200) NOT NULL COMMENT '模型标识符, 如 doubao-1-5-pro-32k',
  13. api_endpoint VARCHAR(500) NOT NULL COMMENT 'API地址',
  14. api_key VARCHAR(500) NOT NULL COMMENT 'API密钥',
  15. embedding_endpoint VARCHAR(500) COMMENT '嵌入端点(可选)',
  16. max_tokens INT DEFAULT 4096 COMMENT '最大Token数',
  17. temperature DOUBLE DEFAULT 0.7 COMMENT '温度参数',
  18. sort_order INT DEFAULT 0 COMMENT '全局排序,越小越优先',
  19. status TINYINT DEFAULT 1 COMMENT '状态: 1启用 0禁用',
  20. model_type INT DEFAULT 0 COMMENT '模型类型,0:默认 1:租户销售端使用生成视频的模型',
  21. create_by VARCHAR(50) DEFAULT 'system' COMMENT '创建人',
  22. create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
  23. update_by VARCHAR(50) DEFAULT 'system' COMMENT '更新人',
  24. update_time DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间'
  25. ) COMMENT='AI模型配置表(Admin DB统一管理, 不含FastGPT/TTS/图像/语音)';
  26. -- 2. 场景定义表
  27. DROP TABLE IF EXISTS admin_ai_scene;
  28. CREATE TABLE admin_ai_scene (
  29. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
  30. scene_code VARCHAR(50) NOT NULL UNIQUE COMMENT '场景编码',
  31. scene_name VARCHAR(100) NOT NULL COMMENT '场景名称',
  32. scene_type VARCHAR(20) NOT NULL DEFAULT 'single' COMMENT '场景类型: single单模型 / multi_pipeline多模型流水线',
  33. pipeline_type VARCHAR(30) COMMENT '流水线类型: sequential顺序调用 / scoring质量评分链',
  34. quality_threshold INT DEFAULT 120 COMMENT '质量评分通过阈值(满分160, 默认120)',
  35. status TINYINT DEFAULT 1 COMMENT '状态: 1启用 0禁用',
  36. create_by VARCHAR(50) DEFAULT 'system' COMMENT '创建人',
  37. create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
  38. update_by VARCHAR(50) DEFAULT 'system' COMMENT '更新人',
  39. update_time DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间'
  40. ) COMMENT='AI模型使用场景定义';
  41. -- 3. 场景-模型关联表(支持排序)
  42. DROP TABLE IF EXISTS admin_ai_scene_model;
  43. CREATE TABLE admin_ai_scene_model (
  44. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
  45. scene_code VARCHAR(50) NOT NULL COMMENT '关联场景编码',
  46. model_id BIGINT NOT NULL COMMENT '关联模型ID',
  47. pipeline_order INT DEFAULT 0 COMMENT '流水线中的顺序(min→max)',
  48. role VARCHAR(30) DEFAULT 'generator' COMMENT '角色: generator生成者 / scorer评分者',
  49. sort_weight INT DEFAULT 0 COMMENT '当多模型同级时的优先级权重',
  50. create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
  51. INDEX idx_scene_code (scene_code),
  52. INDEX idx_model_id (model_id)
  53. ) COMMENT='场景-模型关联(支持排序)';
  54. -- =====================================================
  55. -- 初始化数据
  56. -- =====================================================
  57. -- 从 company_ai_provider 迁移现有模型(如存在)
  58. INSERT INTO admin_ai_model (model_name, provider_code, model_identifier, api_endpoint, api_key, embedding_endpoint, max_tokens, temperature, sort_order, status)
  59. SELECT
  60. provider_name,
  61. provider_code,
  62. model_name,
  63. api_endpoint,
  64. COALESCE(api_key, ''),
  65. CASE WHEN provider_code = 'doubao' THEN REPLACE(api_endpoint, '/chat/completions', '/embeddings')
  66. WHEN provider_code = 'qwen' THEN REPLACE(api_endpoint, '/chat/completions', '/embeddings')
  67. ELSE NULL END,
  68. COALESCE(max_tokens, 4096),
  69. COALESCE(temperature, 0.7),
  70. CASE WHEN is_default = 1 THEN 0 ELSE 10 END,
  71. enabled
  72. FROM company_ai_provider
  73. WHERE del_flag = 0 AND enabled = 1;
  74. -- 如果上述迁移没有数据,插入默认4种模型预设
  75. INSERT INTO admin_ai_model (model_name, provider_code, model_identifier, api_endpoint, api_key, embedding_endpoint, max_tokens, temperature, sort_order, status)
  76. SELECT * FROM (
  77. SELECT '豆包(Doubao)' AS model_name, 'doubao' AS provider_code, 'doubao-pro-32k' AS model_identifier,
  78. 'https://ark.cn-beijing.volces.com/api/v3/chat/completions' AS api_endpoint, '' AS api_key,
  79. 'https://ark.cn-beijing.volces.com/api/v3/embeddings' AS embedding_endpoint,
  80. 4096 AS max_tokens, 0.7 AS temperature, 0 AS sort_order, 1 AS status
  81. UNION ALL
  82. SELECT '通义千问(Qwen)', 'qwen', 'qwen-plus',
  83. 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', '',
  84. 'https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings',
  85. 8192, 0.7, 1, 1
  86. UNION ALL
  87. SELECT '元宝/混元(Yuanbao)', 'yuanbao', 'hunyuan-lite',
  88. 'https://api.hunyuan.cloud.tencent.com/v1/chat/completions', '',
  89. NULL, 4096, 0.7, 2, 1
  90. UNION ALL
  91. SELECT 'DeepSeek', 'deepseek', 'deepseek-v4-pro',
  92. 'https://api.deepseek.com/chat/completions', '',
  93. NULL, 8192, 0.7, 3, 1
  94. ) t
  95. WHERE NOT EXISTS (SELECT 1 FROM admin_ai_model LIMIT 1);
  96. -- 初始化19个场景
  97. INSERT INTO admin_ai_scene (scene_code, scene_name, scene_type, pipeline_type, quality_threshold, status) VALUES
  98. -- 多模型流水线场景
  99. ('workflow_generation', '工作流生成', 'multi_pipeline', 'sequential', NULL, 1),
  100. ('quality_scoring', '质量评分', 'multi_pipeline', 'scoring', 120, 1),
  101. -- 单模型场景
  102. ('workflow_llm', '提示词管理', 'single', NULL, NULL, 1),
  103. ('workflow_fallback', '工作流兜底回答', 'single', NULL, NULL, 1),
  104. ('dynamic_node', '动态节点执行', 'single', NULL, NULL, 1),
  105. ('semantic_analysis', '语义意图分析', 'single', NULL, NULL, 1),
  106. ('summary_generation', '摘要生成', 'single', NULL, NULL, 1),
  107. ('content_moderation', '内容审核', 'single', NULL, NULL, 1),
  108. ('multi_turn_dialogue', '多轮对话管理', 'single', NULL, NULL, 1),
  109. ('takeover_detection', '转人工检测', 'single', NULL, NULL, 1),
  110. ('dynamic_adjustment', '动态节点调整', 'single', NULL, NULL, 1),
  111. ('workflow_evolution', '工作流进化', 'single', NULL, NULL, 1),
  112. ('template_evolution', '模板进化', 'single', NULL, NULL, 1),
  113. ('feedback_evolution', '反馈驱动进化', 'single', NULL, NULL, 1),
  114. ('event_decision', '事件决策', 'single', NULL, NULL, 1),
  115. ('user_optimization', '用户级优化', 'single', NULL, NULL, 1),
  116. ('corpus_analysis', '语料分析', 'single', NULL, NULL, 1),
  117. ('tenant_learning', '租户学习', 'single', NULL, NULL, 1),
  118. ('vector_embedding', '向量嵌入', 'single', NULL, NULL, 1),
  119. ('image_recognition', '图片识别(多模态)', 'single', NULL, NULL, 1);
  120. -- 为单模型场景绑定默认模型(取排序第一的doubao模型)
  121. INSERT INTO admin_ai_scene_model (scene_code, model_id, pipeline_order, role, sort_weight)
  122. SELECT s.scene_code, m.id, 0, 'generator', 0
  123. FROM admin_ai_scene s
  124. CROSS JOIN (SELECT id FROM admin_ai_model WHERE provider_code = 'doubao' AND status = 1 ORDER BY sort_order LIMIT 1) m
  125. WHERE s.scene_type = 'single'
  126. AND NOT EXISTS (SELECT 1 FROM admin_ai_scene_model sm WHERE sm.scene_code = s.scene_code);
  127. -- 为工作流生成场景绑定默认3模型流水线(如存在≥3个模型)
  128. INSERT INTO admin_ai_scene_model (scene_code, model_id, pipeline_order, role, sort_weight)
  129. SELECT 'workflow_generation', m.id, m.rn - 1,
  130. CASE WHEN m.rn = 1 THEN 'generator' WHEN m.rn = 2 THEN 'generator' ELSE 'scorer' END,
  131. 0
  132. FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY sort_order) AS rn FROM admin_ai_model WHERE status = 1 LIMIT 3) m
  133. WHERE NOT EXISTS (SELECT 1 FROM admin_ai_scene_model WHERE scene_code = 'workflow_generation');
  134. -- 为质量评分场景绑定默认2模型流水线(如存在≥2个模型)
  135. INSERT INTO admin_ai_scene_model (scene_code, model_id, pipeline_order, role, sort_weight)
  136. SELECT 'quality_scoring', m.id, m.rn - 1,
  137. CASE WHEN m.rn = 1 THEN 'generator' ELSE 'scorer' END,
  138. 0
  139. FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY sort_order) AS rn FROM admin_ai_model WHERE status = 1 LIMIT 2) m
  140. WHERE NOT EXISTS (SELECT 1 FROM admin_ai_scene_model WHERE scene_code = 'quality_scoring');