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
5.2 KiB
移除 AI 对话中的音效和配音生成类型
日期: 2026-02-13
类型: 架构调整
影响范围: AI 对话系统、数据模型
📋 背景
业务决策
音效和配音不再通过 AI 对话生成,改用专用的 API 接口处理。
原因:
- 音效和配音的生成流程与图片/视频不同,需要额外的上下文(如
dialogue_id) - 对话系统主要面向图片和视频生成,音频场景需要单独设计
- 简化对话系统的复杂度
🔧 实施内容
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_EFFECT和TargetType.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 对话生成 |
storyboard_sound_effects |
❌ 使用专用 API | ||
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=6或7的记录,不会自动删除 - 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_EFFECT和VOICEOVER枚举 - 更新 Schema 文档注释
- 清理验证逻辑
- 移除音效/配音保存方法
- 更新 API 注释
- 更新业务流程文档
- 更新实现文档
- 创建数据库迁移脚本
- 运行数据库迁移(生产环境)
- 前端适配(移除相关入口)
- 已有数据清理(可选)
🎉 总结
本次调整简化了 AI 对话系统的复杂度,明确了对话生成的边界:
对话生成适用场景:
- ✅ 分镜图片/视频
- ✅ 角色/场景/道具形象
不适用场景:
- ❌ 音效(需要音频描述 + 时长控制)
- ❌ 配音(需要关联对白 + 语音选择)
音效和配音的生成流程将通过专用 API 实现,提供更精细的参数控制。