You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

4.4 KiB

修复:init_data.py 缺少 capabilities 迁移步骤

日期: 2026-02-13
类型: Bug Fix
影响范围: 数据初始化流程


问题描述

init_data.py 统一初始化脚本缺少 migrate_model_capabilities.py 步骤,导致新初始化的数据库中 AI 模型缺少 capabilities 配置。

症状

执行 docker exec jointo-server-app python scripts/init_data.py 后:

  • AI 模型基本信息已同步(model_name, display_name, model_type 等)
  • capabilities 字段为空(NULL)
  • 前端无法获取模型支持的参数(分辨率、时长、宽高比等)
  • AI 生成功能无法正常工作

根本原因

init_data.py 的执行流程:

# 修复前(错误)
SCRIPTS = [
    ("同步 AI 模型", "sync_all_models.py"),             # ✅ 同步模型基本信息
    ("更新模型本地化配置", "update_model_localization.py"),  # ⚠️ 缺少 capabilities
    ("初始化积分定价配置", "init_pricing_configs.py"),
    ("同步 AI 技能", "sync_ai_skills.py"),
]

sync_all_models.py 只从 AIHubMix/ElevenLabs API 同步模型的基本信息,不包含 capabilities 配置(因为 capabilities 是项目内维护的手工配置)。


解决方案

修改内容

sync_all_models.pyupdate_model_localization.py 之间插入 migrate_model_capabilities.py

# 修复后(正确)
SCRIPTS = [
    ("同步 AI 模型", "sync_all_models.py"),                    # 1️⃣ 同步模型基本信息
    ("迁移模型 capabilities 配置", "migrate_model_capabilities.py"),  # 2️⃣ ✅ 新增!写入 capabilities
    ("更新模型本地化配置", "update_model_localization.py"),      # 3️⃣ 更新本地化和可见性
    ("初始化积分定价配置", "init_pricing_configs.py"),          # 4️⃣ 初始化定价
    ("同步 AI 技能", "sync_ai_skills.py"),                     # 5️⃣ 同步技能
]

执行顺序说明

步骤 脚本 作用 依赖
1 sync_all_models.py 从 API 同步模型基本信息
2 migrate_model_capabilities.py 为模型写入 capabilities 配置 依赖步骤 1(需要模型已存在)
3 update_model_localization.py 更新本地化和可见性 依赖步骤 2(需要 capabilities 已写入)
4 init_pricing_configs.py 初始化积分定价 依赖步骤 3(需要模型已配置)
5 sync_ai_skills.py 同步 AI 技能 独立

验证

自动验证脚本

创建了 verify_init_data.py 来验证配置:

docker exec jointo-server-app python scripts/verify_init_data.py

输出:

✅ 所有检查通过!init_data.py 配置正确。

手动验证

执行完整初始化流程:

# 1. 执行初始化
docker exec jointo-server-app python scripts/init_data.py

# 2. 检查 capabilities 是否已写入
docker exec jointo-server-postgres psql -U jointoAI -d jointo -c "
SELECT 
    model_name,
    CASE 
        WHEN capabilities IS NULL THEN '❌ NULL'
        WHEN capabilities::text = '{}' THEN '⚠️ 空对象'
        ELSE '✅ 已配置'
    END as capabilities_status,
    jsonb_pretty(capabilities) 
FROM ai_models 
LIMIT 5;
"

预期所有模型的 capabilities_status 应为 ✅ 已配置


影响范围

已修复

  • 新环境初始化时,模型 capabilities 字段正确填充
  • init_data.py 执行流程完整且顺序正确

⚠️ 需要手动处理的场景

如果您在修复前已经执行过 init_data.py,需要手动补充 capabilities:

# 单独执行 capabilities 迁移
docker exec jointo-server-app python scripts/migrate_model_capabilities.py

相关文件

文件 变更类型 说明
server/scripts/init_data.py 修改 添加 migrate_model_capabilities.py 到执行列表
server/scripts/verify_init_data.py 新增 验证脚本配置正确性
docs/server/changelogs/2026-02-13-init-data-capabilities-fix.md 新增 本文档

测试

测试步骤

  1. 执行 verify_init_data.py 验证配置
  2. 清空数据库并重新执行 init_data.py
  3. 验证所有模型的 capabilities 字段非空
  4. 前端能正确获取模型参数
  5. AI 生成功能正常工作

测试结果

所有测试通过


修复人员: AI Assistant
审核人员: 待定
状态: 已完成