-- AI 模型能力字段 + 每类型每能力唯一启用,可重复执行。 -- capability 与 type 一起构成「启用唯一」分组:同一 type + capability 下只允许一个模型启用。 -- 老数据按模型标识自动判定:含 vl 的对话模型视为视觉能力,其余为文本能力。 SET @col_exists = (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'ai_model' AND COLUMN_NAME = 'capability'); SET @sql = IF(@col_exists = 0, 'ALTER TABLE ai_model ADD COLUMN capability VARCHAR(20) NOT NULL DEFAULT ''text'' COMMENT ''模型能力:text-文本,vision-视觉'' AFTER type', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE ai_model SET capability = 'vision' WHERE type = 1 AND capability = 'text' AND LOWER(model) LIKE '%vl%'; -- 同一 type + capability 只保留排序最靠前的一个启用,其余关闭 UPDATE ai_model m JOIN ( SELECT id FROM ( SELECT id, ROW_NUMBER() OVER (PARTITION BY type, capability ORDER BY sort, id) AS rn FROM ai_model WHERE status = 0 AND deleted = 0 ) ranked WHERE ranked.rn > 1 ) dup ON dup.id = m.id SET m.status = 1; -- 能力字典 INSERT INTO system_dict_type (name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) SELECT 'AI 模型能力', 'ai_model_capability', 0, 'AI 模型的能力分组', '1', NOW(), '1', NOW(), b'0', '1970-01-01 00:00:00' WHERE NOT EXISTS (SELECT 1 FROM system_dict_type WHERE type = 'ai_model_capability' AND deleted = b'0'); INSERT INTO system_dict_data (sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) SELECT 1, '文本', 'text', 'ai_model_capability', 0, '', '', '', '1', NOW(), '1', NOW(), b'0' WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type = 'ai_model_capability' AND value = 'text' AND deleted = b'0'); INSERT INTO system_dict_data (sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) SELECT 2, '视觉', 'vision', 'ai_model_capability', 0, '', '', '', '1', NOW(), '1', NOW(), b'0' WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type = 'ai_model_capability' AND value = 'vision' AND deleted = b'0');