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.
 

8.2 KiB

数据格式迁移验证报告

日期: 2026-02-13
执行时间: 03:31:18
版本: v1.1


迁移结果

执行概况

命令: docker exec jointo-server-app python scripts/migrate_model_capabilities.py
退出码: 0(成功)
耗时: ~2.4秒

统计数据

模型类型 总数 已配置 capabilities 已配置 reference 覆盖率
文本模型 (1) 5 5 0 100%
图片模型 (2) 3 3 3 100%
视频模型 (3) 9 9 9 100%
音频模型 (4) 5 5 0 100%
总计 22 22 12 100%

📋 迁移详情

已更新模型(12 个)

视频模型(9 个)

  1. sora-2

    {
      "size": {"values": ["720x1280", "1280x720"], "default": "720x1280"},
      "seconds": {"values": ["4", "8", "12"], "default": "4"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  2. sora-2-pro

    {
      "size": {"values": ["720x1280", "1280x720"], "default": "720x1280"},
      "seconds": {"values": ["4", "8", "12"], "default": "4"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  3. veo-3.1-generate-preview

    {
      "size": {"values": ["720P", "1080P"], "default": "720P"},
      "seconds": {"values": ["4", "6", "8"], "default": "8"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  4. veo-3.1-fast-generate-preview

    {
      "size": {"values": ["720P", "1080P"], "default": "720P"},
      "seconds": {"values": ["4", "6", "8"], "default": "4"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  5. wan2.6-t2v(仅文生视频)

    {
      "size": {"values": ["832x480", "480x832", "624x624", "1088x832", "832x1088", "960x960", "1280x720", "720x1280", "1248x1632", "1632x1248", "1440x1440", "1080x1920", "1920x1080"], "default": "1280x720"},
      "seconds": {"values": ["5", "10"], "default": "5"},
      "input_reference": {"supported": false},
      "video_mode": "t2v"
    }
    
  6. wan2.6-i2v(图生视频)

    {
      "size": {...},
      "seconds": {"values": ["5", "10"], "default": "5"},
      "input_reference": {"supported": true, "num": 1},
      "video_mode": "i2v"
    }
    
  7. jimeng-3.0-720p

    {
      "size": {"values": ["1280x720", "720x1280"], "default": "1280x720"},
      "seconds": {"values": ["5"], "default": "5"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  8. jimeng-3.0-1080p

    {
      "size": {"values": ["1920x1080", "1080x1920"], "default": "1920x1080"},
      "seconds": {"values": ["5"], "default": "5"},
      "input_reference": {"supported": true, "num": 1}
    }
    
  9. jimeng-3.0-pro

    {
      "size": {"values": ["1920x1080", "1080x1920", "1280x720", "720x1280"], "default": "1920x1080"},
      "seconds": {"values": ["5", "10"], "default": "5"},
      "input_reference": {"supported": true, "num": 1}
    }
    

图片模型(3 个)

  1. dall-e-3

    {
      "size": {"values": ["1024x1024", "1792x1024", "1024x1792"], "default": "1024x1024"},
      "quality": {"values": ["standard", "hd"], "default": "standard"},
      "input_fidelity": {"values": ["high", "low"], "default": "low"},
      "moderation": {"values": ["auto", "low"], "default": "auto"},
      "output_format": {"values": ["png", "jpeg", "webp"], "default": "jpeg"},
      "n": {"type": "integer", "min": 1, "max": 10, "default": 1},
      "reference_image": {"supported": true, "num": 1}
    }
    
  2. gemini-2.5-flash-image

    {
      "size": {"values": ["1K", "2K", "4K", "auto"], "default": "auto"},
      "quality": {"values": ["low", "medium", "high"], "default": "medium"},
      "n": {"type": "integer", "min": 1, "max": 10, "default": 1},
      "reference_image": {"supported": true, "num": 1}
    }
    
  3. gemini-3-pro-image-preview

    {
      "size": {"values": ["1K", "2K", "4K", "auto"], "default": "auto"},
      "quality": {"values": ["low", "medium", "high"], "default": "high"},
      "n": {"type": "integer", "min": 1, "max": 10, "default": 1},
      "reference_image": {"supported": true, "num": 1}
    }
    

已跳过模型(10 个)

这些模型暂无预定义 capabilities 配置,属于正常情况:

模型名称 类型 原因
eleven_text_to_sound_v2 音频 无配置
eleven_turbo_v2 音频 无配置
eleven_turbo_v2_5 音频 无配置
eleven_monolingual_v1 音频 无配置
eleven_multilingual_v2 音频 无配置
gpt-5.1 文本 无配置
gpt-5.2 文本 无配置
deepseek-v3.2 文本 无配置
gemini-3-flash-preview 文本 无配置
gemini-2.5-flash 文本 无配置

🔍 数据验证

SQL 验证

-- 验证对象格式
SELECT model_name, model_type, 
       capabilities->'reference_image' as reference_image,
       capabilities->'input_reference' as input_reference
FROM ai_models 
WHERE capabilities->'reference_image' IS NOT NULL 
   OR capabilities->'input_reference' IS NOT NULL;

结果(示例):

model_name     | model_type | reference_image              | input_reference
---------------|------------|------------------------------|--------------------------------
dall-e-3       | 2          | {"num": 1, "supported": true}| null
sora-2         | 3          | null                         | {"num": 1, "supported": true}
wan2.6-t2v     | 3          | null                         | {"supported": false}

完整性验证

SELECT 
  model_type, 
  COUNT(*) as total,
  COUNT(capabilities) as with_capabilities,
  COUNT(CASE WHEN capabilities->'reference_image' IS NOT NULL 
             OR capabilities->'input_reference' IS NOT NULL THEN 1 END) as with_reference
FROM ai_models 
GROUP BY model_type 
ORDER BY model_type;

结果:

model_type | total | with_capabilities | with_reference
-----------|-------|-------------------|---------------
1          | 5     | 5                 | 0
2          | 3     | 3                 | 3   ← 100% 覆盖
3          | 9     | 9                 | 9   ← 100% 覆盖
4          | 5     | 5                 | 0

📊 数据格式对比

修改前(整数格式)

{
  "reference_image": 1,
  "input_reference": 5
}

问题:

  • 语义不清:0 是"不支持"还是"支持 0 个"?
  • 扩展性差:无法添加更多元数据
  • 需要额外转换逻辑

修改后(对象格式)

{
  "reference_image": {
    "supported": true,
    "num": 1
  },
  "input_reference": {
    "supported": false
  }
}

优势:

  • 语义明确:supported 显式表达能力状态
  • 可扩展:支持添加 max_size_mbformats 等字段
  • 统一格式:数据库与 API 响应格式一致

🔧 技术细节

转换器兼容性

文件: server/app/utils/capability_transformer.py

# 同时支持新旧格式
if isinstance(ref_value, dict):
    # 对象格式(推荐)
    result[field] = ref_value
elif isinstance(ref_value, int) and ref_value > 0:
    # 整数格式(向后兼容)
    result[field] = {
        "supported": True,
        "num": ref_value
    }

迁移脚本更新

文件: server/scripts/migrate_model_capabilities.py

变更统计:

  • 修改行数: ~50 行
  • 涉及模型: 31 个(迁移脚本中配置的所有模型)
  • 数据库更新: 12 个活跃模型

验证通过标准

检查项 状态 结果
迁移脚本执行 退出码 0,无错误
数据格式正确 所有模型使用对象格式
数据完整性 12/12 模型配置完整
API 响应验证 transform_capabilities_to_api 输出正确
向后兼容 转换器支持整数格式降级

📚 相关文档


验证人: Claude
执行时间: 2026-02-13 03:31:18
验证状态: 通过