Skip to content

AIGC 生成视频业务优化方案

1. 背景与现状分析

当前系统中的 AI 视频生成功能(主要集中在分镜生成与图生视频)是核心业务链路。目前的实现方式具有以下特征和痛点:

  • 前端重逻辑 (Frontend Heavy)
    • ComfyUI 的 JSON 模板解析、变量替换、API 调用逻辑大量耦合在 Vue 组件 (GenerateStoryBoard.vue) 中。
    • 前端直接与 ComfyUI 服务器(或经由简单代理)通信,导致 CORS 问题、连接不稳定、超时处理复杂。
    • 业务逻辑泄露在前端,一旦更改生成策略(如更换模型、调整参数结构),必须重新发布前端代码。
  • 平台依赖性强
    • 目前深度绑定 AutoDL 上的 ComfyUI,虽然成本低,但缺乏灵活性。
    • 接入新平台(如即梦、万相)时,往往通过 if-else 硬编码在前端,扩展性差。
  • 用户体验割裂
    • 用户需要理解较为底层的概念(如“选择服务器”、“模板参数”),交互复杂度高。
    • 生成过程漫长,缺乏持久化的任务状态跟踪,一旦关闭页面或网络波动,任务状态容易丢失。

为了应对日益复杂的生成技术方案和频繁变动的业务需求,本方案从产品交互技术架构两个维度提出优化建议。


2. 核心策略确认 (Confirmed Strategy)

根据业务现状与用户确认,我们将采用以下服务组合策略:

2.1 图片生成(已接入)

  • 服务商:即梦 AI (Jimeng AI)
  • 功能:文生图 (Text-to-Image)
  • 状态:已接入,作为首帧图生成的默认方案。

2.2 视频生成(双轨制)

  • 主要服务(备选/优先)AutoDL + ComfyUI
    • 定位:当 AutoDL 节点在线且空闲时,优先使用此方案,以降低成本并获得更高的可控性(如特效、镜头控制)。
    • 适用场景:日常批量生产、对成本敏感的任务。
  • 兜底服务(核心/高可用)火山引擎 Doubao-Seedance
    • 模型IDdoubao-seedance-1-0-pro-fast-251015
    • 定位:作为高可用兜底方案。当 AutoDL 节点离线、排队过长或生成失败时,自动降级切换至此服务。
    • 适用场景:高优先级任务、AutoDL 维护期、需要极速生成的场景。

3. 阶段 1 实施状态 (Phase 1 Implementation Status)

状态:已完成 (Completed)日期:2025-12-27

阶段 1 重点在于接入火山引擎 Doubao-Seedance 兜底服务,并建立基础的任务追踪机制。

3.1 核心变更

  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 接口,增加了对 Seedance req_key 的识别与处理。
      • 实现了参数归一化(normalizeArrayParam),确保前端传来的字符串或数组格式均能正确转换为 API 所需的数组格式。
      • 引入了 aigc_tasks 数据库写入逻辑,在任务提交成功后立即记录任务元数据。
  2. 数据持久化 (Data Persistence)

    • 表结构aigc_tasks
    • SQL 文件api/database/sql/aigc_tasks.sql
    • 用途:记录所有通过后端代理提交的 AIGC 任务(目前主要是 Volcengine 任务),包含 task_id, provider, model, status, input_params 等字段,为后续的任务中心和异步状态轮询奠定基础。
  3. 前端适配 (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 调用
}