AIGC 生成视频业务优化方案
1. 背景与现状分析
当前系统中的 AI 视频生成功能(主要集中在分镜生成与图生视频)是核心业务链路。目前的实现方式具有以下特征和痛点:
- 前端重逻辑 (Frontend Heavy):
- ComfyUI 的 JSON 模板解析、变量替换、API 调用逻辑大量耦合在 Vue 组件 (
GenerateStoryBoard.vue) 中。 - 前端直接与 ComfyUI 服务器(或经由简单代理)通信,导致 CORS 问题、连接不稳定、超时处理复杂。
- 业务逻辑泄露在前端,一旦更改生成策略(如更换模型、调整参数结构),必须重新发布前端代码。
- ComfyUI 的 JSON 模板解析、变量替换、API 调用逻辑大量耦合在 Vue 组件 (
- 平台依赖性强:
- 目前深度绑定 AutoDL 上的 ComfyUI,虽然成本低,但缺乏灵活性。
- 接入新平台(如即梦、万相)时,往往通过
if-else硬编码在前端,扩展性差。
- 用户体验割裂:
- 用户需要理解较为底层的概念(如“选择服务器”、“模板参数”),交互复杂度高。
- 生成过程漫长,缺乏持久化的任务状态跟踪,一旦关闭页面或网络波动,任务状态容易丢失。
为了应对日益复杂的生成技术方案和频繁变动的业务需求,本方案从产品交互和技术架构两个维度提出优化建议。
2. 核心策略确认 (Confirmed Strategy)
根据业务现状与用户确认,我们将采用以下服务组合策略:
2.1 图片生成(已接入)
- 服务商:即梦 AI (Jimeng AI)
- 功能:文生图 (Text-to-Image)
- 状态:已接入,作为首帧图生成的默认方案。
2.2 视频生成(双轨制)
- 主要服务(备选/优先):AutoDL + ComfyUI
- 定位:当 AutoDL 节点在线且空闲时,优先使用此方案,以降低成本并获得更高的可控性(如特效、镜头控制)。
- 适用场景:日常批量生产、对成本敏感的任务。
- 兜底服务(核心/高可用):火山引擎 Doubao-Seedance
- 模型ID:
doubao-seedance-1-0-pro-fast-251015 - 定位:作为高可用兜底方案。当 AutoDL 节点离线、排队过长或生成失败时,自动降级切换至此服务。
- 适用场景:高优先级任务、AutoDL 维护期、需要极速生成的场景。
- 模型ID:
3. 阶段 1 实施状态 (Phase 1 Implementation Status)
状态:已完成 (Completed)日期:2025-12-27
阶段 1 重点在于接入火山引擎 Doubao-Seedance 兜底服务,并建立基础的任务追踪机制。
3.1 核心变更
后端集成 (Backend Integration)
- 文件:
api/extend/volcengine/visual.php - 新增功能:实现了
submitSeedanceTask方法,封装了对doubao-seedance-1-0-pro-fast-251015模型的调用逻辑,支持image_urls,prompt,music_volume,video_volume等参数。 - API 控制器:
api/app/aigc/controller/AdminVolcengine.php- 扩展了
visualSubmit接口,增加了对 Seedancereq_key的识别与处理。 - 实现了参数归一化(
normalizeArrayParam),确保前端传来的字符串或数组格式均能正确转换为 API 所需的数组格式。 - 引入了
aigc_tasks数据库写入逻辑,在任务提交成功后立即记录任务元数据。
- 扩展了
- 文件:
数据持久化 (Data Persistence)
- 表结构:
aigc_tasks - SQL 文件:
api/database/sql/aigc_tasks.sql - 用途:记录所有通过后端代理提交的 AIGC 任务(目前主要是 Volcengine 任务),包含
task_id,provider,model,status,input_params等字段,为后续的任务中心和异步状态轮询奠定基础。
- 表结构:
前端适配 (Frontend Adaptation)
- 文件:
web/src/views/aigc/component/components/GenerateStoryBoard.vue - UI 变更:在“即梦”平台的
req_key下拉菜单中增加了Doubao-Seedance (视频兜底)选项。 - 逻辑适配:前端现有的
jiemengGenerate方法已能兼容 Seedance 的参数传递,通过后端代理完成请求。
- 文件:
3.2 下一步计划 (Next Steps)
- 阶段 2:智能调度与队列管理
- 实现
TaskDispatcher,根据 AutoDL 节点状态自动选择 Provider。 - 完善前端任务中心 UI,支持查看历史任务状态和结果。
- 引入 WebSocket 或长轮询机制,实时更新任务状态。
- 实现
4. 详细设计 (Reference)
4.1 数据库设计 (aigc_tasks)
sql
CREATE TABLE `aigc_tasks` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '提交任务的管理员ID',
`provider` varchar(50) NOT NULL DEFAULT '' COMMENT '服务商: volcengine, comfyui, midjourney',
`provider_model` varchar(100) NOT NULL DEFAULT '' COMMENT '模型标识: jimeng_t2v_v30, doubao-seedance...',
`provider_task_id` varchar(100) NOT NULL DEFAULT '' COMMENT '服务商返回的任务ID',
`status` varchar(50) NOT NULL DEFAULT 'pending' COMMENT '状态: pending, processing, success, failed, cancelled',
`input_params` text COMMENT '任务输入参数(JSON)',
`output_result` text COMMENT '任务输出结果(JSON)',
`error_msg` text COMMENT '错误信息',
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`completed_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_provider_task` (`provider`,`provider_task_id`),
KEY `idx_user` (`user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AIGC生成任务记录表';4.2 统一接口与适配器模式 (Provider Adapter Pattern)
定义标准的 GenerationProviderInterface,屏蔽不同底层实现的差异。
php
interface VideoGenerationProvider {
public function submitTask(array $params): string; // 返回 task_id
public function getStatus(string $task_id): array; // 返回状态、进度、结果
public function cancelTask(string $task_id): bool;
}
// 适配器1:AutoDL ComfyUI
class ComfyUIProvider implements VideoGenerationProvider {
// 处理 AutoDL/ComfyUI 的 JSON 构造、WebSocket 监听或轮询
}
// 适配器2:Volcengine Seedance
class VolcengineProvider implements VideoGenerationProvider {
// 封装 Volcengine SDK 调用
}