428 lines
13 KiB
Markdown
428 lines
13 KiB
Markdown
# 火山引擎视频服务 - 缺失功能检查报告
|
||
|
||
## 📋 检查日期: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`
|
||
**缺失内容**:
|
||
```typescript
|
||
// 需要新增 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`
|
||
**缺失内容**:
|
||
```typescript
|
||
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`
|
||
**缺失函数**:
|
||
```typescript
|
||
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 提示 ❌
|
||
**文件**:相关聊天输入组件
|
||
**缺失函数**:
|
||
```typescript
|
||
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 接口支持保存模型能力配置
|
||
|
||
**示例缺失代码**:
|
||
```typescript
|
||
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天)- 必须完成**
|
||
2. ✅ 简化版参数栏
|
||
- 基础模式选择(下拉菜单)
|
||
- 图片上传按钮(根据模式动态显示)
|
||
- 基础参数调整(分辨率/时长)
|
||
|
||
3. ✅ 管理后台基础配置
|
||
- AI Model API 支持 capabilities/defaultParams
|
||
- 简单的表单支持添加模型能力
|
||
|
||
### **Phase 3:完整体验(3-4天)- 可选优化**
|
||
4. ⚠️ 完整参数栏(横向布局、高级选项)
|
||
5. ⚠️ 管理后台UI完善(预设模板、参数验证)
|
||
6. ⚠️ 视频预览组件增强(元数据显示)
|
||
|
||
### **Phase 4:测试与优化(1-2天)- 可选**
|
||
7. ⚠️ 功能测试
|
||
8. ⚠️ 性能优化
|
||
|
||
---
|
||
|
||
## 📋 立即行动清单
|
||
|
||
### 🔴 紧急(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集成)
|
||
|