13 KiB
火山引擎视频服务 - 缺失功能检查报告
📋 检查日期: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%(核心后端完成,前端和集成未完成)
🚨 核心阻塞问题
⚠️ 无法使用的原因
目前用户完全无法使用视频生成功能,因为:
-
Chat API 未集成 generate_video Tool ❌
- 聊天界面无法触发视频生成
- 即使调用 Provider 也无法保存到数据库
-
前端参数栏未开发 ❌
- 用户无法选择生成模式
- 无法上传图片
- 无法调整参数(分辨率/时长等)
-
管理后台配置不完整 ❌
- 管理员无法添加视频模型
- 无法配置模型能力
🎯 优先级开发建议
Phase 1:核心功能(1-2天)- 必须完成
- ✅ Chat API 集成(generate_video Tool)
- Tool 定义
- 执行逻辑
- 数据库保存
- 智能模型选择
Phase 2:最小可用UI(2-3天)- 必须完成
-
✅ 简化版参数栏
- 基础模式选择(下拉菜单)
- 图片上传按钮(根据模式动态显示)
- 基础参数调整(分辨率/时长)
-
✅ 管理后台基础配置
- AI Model API 支持 capabilities/defaultParams
- 简单的表单支持添加模型能力
Phase 3:完整体验(3-4天)- 可选优化
- ⚠️ 完整参数栏(横向布局、高级选项)
- ⚠️ 管理后台UI完善(预设模板、参数验证)
- ⚠️ 视频预览组件增强(元数据显示)
Phase 4:测试与优化(1-2天)- 可选
- ⚠️ 功能测试
- ⚠️ 性能优化
📋 立即行动清单
🔴 紧急(P0)- 无此功能无法使用
- 实现 Chat API generate_video Tool
- 实现智能模型选择逻辑
- 实现视频消息保存到数据库
🟠 重要(P1)- 基础可用性
- 创建简化版 VideoParamsBar 组件
- 集成参数栏到聊天界面
- 实现动态图片上传按钮
- 扩展 AI Model API 支持 capabilities
🟡 优化(P2)- 增强体验
- 完善视频预览组件(元数据显示)
- 完善管理后台UI(模型能力配置表单)
- 添加预设模板功能
🟢 可选(P3)- 锦上添花
- 单元测试
- 性能优化
- 错误处理增强
📝 总结
核心问题:
- ❌ Chat API 完全未集成:无法调用视频生成
- ❌ 前端参数栏完全缺失:用户无法操作
- ❌ 管理后台配置不完整:无法添加模型
建议方案:
- 优先完成 Phase 1(Chat API集成),实现基础功能
- 然后完成 Phase 2(简化版UI),达到最小可用状态
- 最后完成 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集成)