ai-chatbot/火山引擎视频服务-缺失功能检查报告.md
Your Name 53ddb7e585
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
Initial commit - clean repository
2025-12-17 20:15:18 +08:00

13 KiB
Raw Permalink Blame History

火山引擎视频服务 - 缺失功能检查报告

📋 检查日期:2025-12-09

根据《火山引擎视频服务开发计划.md》,对照实际已完成的代码,以下是详细的缺失功能清单。


✅ 已完成部分(核心后端)

阶段 1:数据库与类型系统扩展 ✅ 100%

  • ✅ AI Provider 类型枚举(volcano-video)
  • ✅ AiModel 表扩展(capabilities、defaultParams)
  • ✅ Message 表扩展(视频存储字段)
  • ✅ TypeScript 类型定义(types/ai.ts)
  • ✅ 数据库迁移脚本(0018_add_volcano_video_support.sql)

阶段 2:核心 Provider 开发 ✅ 100%

  • ✅ volcano-video.ts(完整实现)
  • ✅ 图片处理(URL → Base64 + S3)
  • ✅ 参数构建(--ratio、--dur等)
  • ✅ 任务创建和轮询
  • ✅ 同步/流式生成

阶段 3:视频永久存储系统 ✅ 100%

  • ✅ 视频归档服务(video-archiver.ts)
  • ✅ 定时归档任务(video-archive-job.ts)
  • ✅ 归档API路由(/api/jobs/archive-videos)
  • ✅ Vercel Cron配置(vercel.json)

阶段 7:管理后台配置 ✅ 50%(部分完成)

  • ✅ AI Provider API 验证(支持 volcano-video)
  • ❌ AI Model API 模型能力配置(未实现)
  • ❌ 前端UI增强(未实现)

❌ 缺失功能详细清单

【高优先级 P0】阶段 6:Chat API 集成 - 0% 完成

6.1 generate_video Tool 定义 ❌

文件:app/(chat)/api/chat/route.ts
缺失内容:

// 需要新增 generate_video Tool
{
  name: 'generate_video',
  description: '生成视频,支持文生视频、图生视频等多种模式',
  parameters: {
    type: 'object',
    properties: {
      prompt: { type: 'string', description: '视频生成提示词' },
      mode: { 
        type: 'string', 
        enum: ['text-to-video', 'first-frame', 'first-last-frame', 'reference-images'] 
      },
      images: { type: 'array', items: { type: 'string' } },
      resolution: { type: 'string', enum: ['480p', '720p', '1080p'], default: '720p' },
      ratio: { type: 'string', enum: ['16:9', '4:3', '1:1', '3:4', '9:16', '21:9'] },
      duration: { type: 'number', minimum: 2, maximum: 12, default: 5 }
    },
    required: ['prompt', 'mode']
  }
}

影响:无法通过聊天界面调用视频生成功能。


6.2 智能模型选择逻辑 ❌

文件:app/(chat)/api/chat/route.ts
缺失函数:

  • getCompatibleModel(mode, provider):根据生成模式选择合适的模型
  • selectBestModel(models, mode):从多个模型中选择最佳模型
  • validateParamsAgainstCapabilities(params, model):参数验证

影响:无法根据用户选择的模式自动匹配最佳模型。


6.3 Tool 执行逻辑 ❌

文件:app/(chat)/api/chat/route.ts
缺失内容:

case 'generate_video': {
  const { prompt, mode, images, ...params } = toolCall.args;
  
  // 1. 根据生成模式自动选择合适的模型
  const compatibleModel = await getCompatibleModel(mode, 'volcano-video');
  
  // 2. 验证参数是否符合模型能力
  validateParamsAgainstCapabilities(params, compatibleModel);
  
  // 3. 根据模式处理图片输入
  const options = buildVideoOptions(mode, images, prompt, params, compatibleModel.modelId);
  
  // 4. 调用视频生成(流式输出进度)
  const result = await generateVideoWithProgress(options);
  
  // 5. 保存临时视频URL到数据库
  await saveVideoMessage({
    chatId: message.chatId,
    role: 'assistant',
    temporaryVideoUrl: result.videoUrl,
    videoMetadata: { taskId, duration, resolution, ratio },
    videoStorageStatus: 'temporary'
  });
  
  // 6. 返回视频链接和预览组件
  return formatVideoToolResult(result);
}

影响:完全无法生成视频。


6.4 保存视频消息到数据库 ❌

文件:app/(chat)/api/chat/route.ts
缺失函数:

async function saveVideoMessage(data: {
  chatId: string;
  role: 'assistant';
  temporaryVideoUrl: string;
  videoMetadata: { taskId, duration, resolution, ratio };
  videoStorageStatus: 'temporary';
}) {
  await db.insert(message).values({
    chatId: data.chatId,
    role: data.role,
    content: `生成的视频`,
    temporaryVideoUrl: data.temporaryVideoUrl,
    videoMetadata: data.videoMetadata,
    videoStorageStatus: data.videoStorageStatus,
    createdAt: new Date(),
  });
}

影响:视频生成后无法保存到数据库,归档系统无法工作。


【高优先级 P1】阶段 4:前端参数栏开发 - 0% 完成

4.1 VideoParamsBar 组件 ❌

文件:components/video-params-bar.tsx(完全缺失)
需要实现:

  • 横向参数栏布局(模式/分辨率/宽高比/时长/运镜等)
  • 动态显示/隐藏选项(根据模型能力)
  • 参数实时验证和提示
  • 本地存储保存用户偏好

预计代码量:~300-500 行


4.2 集成到聊天界面 ❌

文件:app/(chat)/page.tsx 或相关聊天组件
缺失内容:

  • 动态图片上传按钮(根据模式显示不同按钮)
    • 文生视频:隐藏图片上传
    • 图生视频-首帧:显示 [+ 图片]
    • 首尾帧:显示 [+ 首帧] [+ 尾帧]
    • 参考图:显示 [+ 参考图 (0/4)]
  • 参数栏显示/隐藏控制(仅当选择 volcano-video 模型时显示)
  • 参数实时同步到消息发送

影响:用户无法在前端界面调整视频参数。


4.3 动态 Placeholder 提示 ❌

文件:相关聊天输入组件
缺失函数:

function getPlaceholder(modelType?: string, mode?: VideoGenerationMode): string {
  if (modelType !== 'volcano-video') return '输入消息...';
  
  switch (mode) {
    case 'text-to-video':
      return '输入文字,描述你想创作的画面内容、运动方式等。';
    case 'first-frame':
      return '描述如何让图片动起来。例如:女孩睁开眼,头发被风吹动。';
    case 'first-last-frame':
      return '描述镜头运动轨迹。例如:360度环绕运镜。';
    case 'reference-images':
      return '描述如何融合参考图元素。';
    default:
      return '输入视频生成提示词...';
  }
}

【中优先级 P2】阶段 5:视频预览组件 - 50% 完成

5.1 视频预览组件 ✅ 部分完成

文件:components/video-preview.tsx(已存在)
已有功能:

  • ✅ 视频播放器
  • ✅ 下载按钮
  • ✅ 全屏播放

缺失功能:

  • ❌ 封面图显示(使用首帧或尾帧)
  • ❌ 悬停显示元数据(分辨率、时长、文件大小)
  • ❌ 编辑按钮(类似图片编辑功能)

5.2 加载动画组件 ✅ 已复用

文件:components/qianwen-video-loading.tsx
状态:✅ 可直接复用,无需额外开发


【中优先级 P2】阶段 7:管理后台配置 - 50% 完成

7.1 AI Provider API ✅ 已完成

文件:app/api/admin/ai-providers/route.ts
状态:✅ 已支持 volcano-video 类型验证


7.2 AI Model API 模型能力配置 ❌

文件:app/api/admin/ai-models/route.ts
缺失内容:

  • ❌ capabilities 字段的 Zod 验证
  • ❌ defaultParams 字段的 Zod 验证
  • ❌ POST/PUT 接口支持保存模型能力配置

示例缺失代码:

const modelConfigSchema = z.object({
  modelId: z.string(),
  displayName: z.string(),
  providerId: z.string().uuid(),
  
  // 🆕 模型能力配置(视频模型专用)
  capabilities: z.object({
    supportedModes: z.array(z.enum([
      'text-to-video', 'first-frame', 'first-last-frame', 'reference-images'
    ])),
    supportedResolutions: z.array(z.enum(['480p', '720p', '1080p'])),
    supportedRatios: z.array(z.enum(['16:9', '4:3', '1:1', '3:4', '9:16', '21:9'])),
    durationRange: z.object({ min: z.number(), max: z.number() }),
    supportWatermark: z.boolean(),
    supportCameraFixed: z.boolean(),
    supportSeed: z.boolean(),
    supportReturnLastFrame: z.boolean(),
    maxReferenceImages: z.number().optional()
  }).optional(),
  
  // 🆕 默认参数配置
  defaultParams: z.object({
    resolution: z.enum(['480p', '720p', '1080p']).default('720p'),
    ratio: z.enum(['16:9', '4:3', '1:1', '3:4', '9:16', '21:9']).default('16:9'),
    duration: z.number().min(2).max(12).default(5),
    watermark: z.boolean().default(true),
    cameraFixed: z.boolean().default(false)
  }).optional()
});

7.3 前端UI增强 ❌

文件:app/(admin)/settings/admin-settings-client.tsx 或相关管理页面
缺失内容:

  • ❌ 添加模型时配置能力参数的UI表单
  • ❌ 支持的功能复选框(文生视频/图生视频等)
  • ❌ 支持的参数配置(分辨率/宽高比/时长范围等)
  • ❌ 默认参数设置表单
  • ❌ 预设模板快速应用功能

影响:管理员无法通过UI配置模型能力,只能手动修改数据库。


【低优先级 P3】阶段 8:测试与优化 - 0% 完成

8.1 单元测试 ❌

缺失内容:

  • volcano-video.ts 的单元测试
  • video-archiver.ts 的单元测试
  • 参数验证逻辑测试

8.2 集成测试 ❌

缺失内容:

  • 完整的视频生成流程测试
  • 归档任务测试
  • S3存储集成测试

8.3 性能优化 ❌

缺失内容:

  • 视频下载超时优化
  • 并发归档数量调整
  • 数据库查询索引优化验证

📊 完成度统计

阶段 描述 完成度 状态
阶段 1 数据库与类型系统扩展 100% ✅ 已完成
阶段 2 核心 Provider 开发 100% ✅ 已完成
阶段 3 视频永久存储系统 100% ✅ 已完成
阶段 4 前端参数栏开发 0% ❌ 未开始
阶段 5 视频预览组件 50% ⚠️ 部分完成
阶段 6 Chat API 集成 0% ❌ 未开始
阶段 7 管理后台配置 50% ⚠️ 部分完成
阶段 8 测试与优化 0% ❌ 未开始

总体完成度:约 50%(核心后端完成,前端和集成未完成)


🚨 核心阻塞问题

⚠️ 无法使用的原因

目前用户完全无法使用视频生成功能,因为:

  1. Chat API 未集成 generate_video Tool ❌

    • 聊天界面无法触发视频生成
    • 即使调用 Provider 也无法保存到数据库
  2. 前端参数栏未开发 ❌

    • 用户无法选择生成模式
    • 无法上传图片
    • 无法调整参数(分辨率/时长等)
  3. 管理后台配置不完整 ❌

    • 管理员无法添加视频模型
    • 无法配置模型能力

🎯 优先级开发建议

Phase 1:核心功能(1-2天)- 必须完成

  1. ✅ Chat API 集成(generate_video Tool)
    • Tool 定义
    • 执行逻辑
    • 数据库保存
    • 智能模型选择

Phase 2:最小可用UI(2-3天)- 必须完成

  1. ✅ 简化版参数栏

    • 基础模式选择(下拉菜单)
    • 图片上传按钮(根据模式动态显示)
    • 基础参数调整(分辨率/时长)
  2. ✅ 管理后台基础配置

    • AI Model API 支持 capabilities/defaultParams
    • 简单的表单支持添加模型能力

Phase 3:完整体验(3-4天)- 可选优化

  1. ⚠️ 完整参数栏(横向布局、高级选项)
  2. ⚠️ 管理后台UI完善(预设模板、参数验证)
  3. ⚠️ 视频预览组件增强(元数据显示)

Phase 4:测试与优化(1-2天)- 可选

  1. ⚠️ 功能测试
  2. ⚠️ 性能优化

📋 立即行动清单

🔴 紧急(P0)- 无此功能无法使用

  • 实现 Chat API generate_video Tool
  • 实现智能模型选择逻辑
  • 实现视频消息保存到数据库

🟠 重要(P1)- 基础可用性

  • 创建简化版 VideoParamsBar 组件
  • 集成参数栏到聊天界面
  • 实现动态图片上传按钮
  • 扩展 AI Model API 支持 capabilities

🟡 优化(P2)- 增强体验

  • 完善视频预览组件(元数据显示)
  • 完善管理后台UI(模型能力配置表单)
  • 添加预设模板功能

🟢 可选(P3)- 锦上添花

  • 单元测试
  • 性能优化
  • 错误处理增强

📝 总结

核心问题:

  • ❌ Chat API 完全未集成:无法调用视频生成
  • ❌ 前端参数栏完全缺失:用户无法操作
  • ❌ 管理后台配置不完整:无法添加模型

建议方案:

  1. 优先完成 Phase 1(Chat API集成),实现基础功能
  2. 然后完成 Phase 2(简化版UI),达到最小可用状态
  3. 最后完成 Phase 3/4(完整体验和优化)

预计剩余工作量:

  • Phase 1:1-2 天(高优先级)
  • Phase 2:2-3 天(高优先级)
  • Phase 3/4:4-6 天(可选优化)

总计:约 7-11 天完成完整功能(最少需要 3-5 天达到最小可用状态)


报告生成时间:2025-12-09
检查范围:完整对比开发计划文档
检查结果:缺失约 50% 功能(主要是前端和API集成)