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.
 

5.2 KiB

移除 AI 对话中的音效和配音生成类型

日期: 2026-02-13
类型: 架构调整
影响范围: AI 对话系统、数据模型


📋 背景

业务决策

音效和配音不再通过 AI 对话生成,改用专用的 API 接口处理。

原因:

  1. 音效和配音的生成流程与图片/视频不同,需要额外的上下文(如 dialogue_id
  2. 对话系统主要面向图片和视频生成,音频场景需要单独设计
  3. 简化对话系统的复杂度

🔧 实施内容

1. 移除枚举值

文件: server/app/models/ai_conversation.py

class TargetType(IntEnum):
    """目标类型"""
    STORYBOARD = 1      # 分镜
    CHARACTER = 2       # 角色
    SCENE = 3           # 场景
    PROP = 4            # 道具
    RESOURCE = 5        # 通用资源
    # ❌ 移除: SOUND_EFFECT = 6
    # ❌ 移除: VOICEOVER = 7

2. 更新 Schema 文档

文件: server/app/schemas/ai_conversation.py

target_type: int = Field(
    ..., 
    alias="targetType", 
    description="目标类型(1=分镜 2=角色 3=场景 4=道具 5=资源)"
)

3. 清理验证逻辑

文件: server/app/services/ai_conversation_service.py

移除:

  • TargetType.SOUND_EFFECTTargetType.VOICEOVER 的验证分支
  • 相关的 Repository 临时代码
  • VALID_COMBINATIONS 中的音效/配音配置

4. 简化生成结果保存逻辑

文件: server/app/services/ai_generation_result_service.py

移除方法:

  • _save_sound_effect() - 音效保存逻辑
  • _save_voiceover() - 配音保存逻辑

保留:

  • _save_storyboard_audio() - 仅作为扩展预留,记录警告日志

5. 更新 API 文档

文件: server/app/api/v1/ai_conversations.py

# 更新注释
"""
支持多态关联 + 标签系统:
- target_type: 目标类型(分镜/角色/场景/道具/资源)
"""

📊 数据库影响

现有数据处理

ai_conversations:

-- 如果已有 target_type=6 或 7 的数据,需要手动清理或迁移
SELECT COUNT(*) FROM ai_conversations 
WHERE target_type IN (6, 7);

-- 可选:标记为已删除
UPDATE ai_conversations 
SET status = 3  -- DELETED
WHERE target_type IN (6, 7);

数据库字段注释更新:

COMMENT ON COLUMN "public"."ai_conversations"."target_type" IS 
  '目标类型:1=分镜, 2=角色, 3=场景, 4=道具, 5=通用资源';

🔄 新的业务场景映射

target_type 业务场景 存储表 生成方式
1 分镜图片/视频 storyboard_images / storyboard_videos AI 对话生成
2 角色形象 project_resources AI 对话生成
3 场景图片 project_resources AI 对话生成
4 道具图片 project_resources AI 对话生成
6 音效 storyboard_sound_effects 使用专用 API
7 配音 storyboard_voiceovers 使用专用 API

📝 相关代码文件

修改文件

  • server/app/models/ai_conversation.py - 移除枚举值
  • server/app/schemas/ai_conversation.py - 更新文档
  • server/app/api/v1/ai_conversations.py - 更新注释
  • server/app/services/ai_conversation_service.py - 清理验证逻辑
  • server/app/services/ai_generation_result_service.py - 移除保存方法

数据库迁移

  • server/alembic/versions/20260213_1200_update_ai_conversations_comments.py - 更新字段注释

运行迁移:

# Docker 环境
docker exec jointo-server-app alembic upgrade head

# 本地环境
cd server && alembic upgrade head

更新文档

  • docs/server/guides/ai-conversation-generation-workflow.md - 更新业务流程
  • docs/server/changelogs/2026-02-13-ai-generation-result-auto-save.md - 更新实现文档

⚠️ 注意事项

1. 向后兼容性

  • 已有数据: 如果数据库中存在 target_type=67 的记录,不会自动删除
  • API 行为: 前端仍然可以传入 6 或 7,但会被验证逻辑拒绝

2. 前端适配

前端需要移除以下场景:

  • 创建音效对话 (target_type=6)
  • 创建配音对话 (target_type=7)

3. 音效和配音的新流程

音效和配音改为使用专用 API:

  • 音效生成: POST /api/v1/storyboards/{id}/sound-effects
  • 配音生成: POST /api/v1/storyboards/{id}/voiceovers

(具体 API 待实现)


验证清单

  • 移除 TargetType.SOUND_EFFECTVOICEOVER 枚举
  • 更新 Schema 文档注释
  • 清理验证逻辑
  • 移除音效/配音保存方法
  • 更新 API 注释
  • 更新业务流程文档
  • 更新实现文档
  • 创建数据库迁移脚本
  • 运行数据库迁移(生产环境)
  • 前端适配(移除相关入口)
  • 已有数据清理(可选)

🎉 总结

本次调整简化了 AI 对话系统的复杂度,明确了对话生成的边界:

对话生成适用场景:

  • 分镜图片/视频
  • 角色/场景/道具形象

不适用场景:

  • 音效(需要音频描述 + 时长控制)
  • 配音(需要关联对白 + 语音选择)

音效和配音的生成流程将通过专用 API 实现,提供更精细的参数控制。