mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-05-06 14:04:32 +08:00
4.9 KiB
4.9 KiB
数据存储问题修复文档
问题描述
前端显示0个切片和0个合集,但实际的处理流程已经成功完成,生成了视频文件和元数据文件。
问题原因
-
数据存储逻辑未被调用:Pipeline适配器中有完整的数据存储逻辑(
_save_clips_to_database和_save_collections_to_database),但在ProcessingOrchestrator的execute_pipeline方法中没有被调用。 -
架构设计问题:ProcessingOrchestrator只负责执行流水线步骤,但没有负责将结果保存到数据库。
-
数据分离存储模式:系统采用了分离存储模式,将完整数据保存在文件系统中,数据库中只保存元数据和路径引用,但数据存储逻辑没有被正确触发。
解决方案
1. 修复ProcessingOrchestrator
在execute_pipeline方法的最后添加数据存储逻辑:
def execute_pipeline(self, srt_path: Path, steps_to_execute: Optional[List[ProcessingStep]] = None) -> Dict[str, Any]:
# ... 执行流水线步骤 ...
# 流水线执行完成,保存数据到数据库
self._save_pipeline_results_to_database(results)
# 更新任务状态为完成
self._update_task_status(TaskStatus.COMPLETED, progress=100)
2. 添加数据存储方法
在ProcessingOrchestrator中添加_save_pipeline_results_to_database方法:
def _save_pipeline_results_to_database(self, results: Dict[str, Any]):
"""将流水线执行结果保存到数据库"""
try:
logger.info(f"开始保存项目 {self.project_id} 流水线结果到数据库")
# 获取项目目录
project_dir = self.adapter.data_dir / "projects" / self.project_id
# 保存切片数据到数据库
step4_result = results.get('step4_title', {}).get('result', [])
if step4_result:
logger.info(f"保存 {len(step4_result)} 个切片到数据库")
self.adapter._save_clips_to_database(self.project_id, project_dir / "step4_title" / "step4_title.json")
# 保存合集数据到数据库
step5_result = results.get('step5_clustering', {}).get('result', [])
if step5_result:
logger.info(f"保存 {len(step5_result)} 个合集到数据库")
self.adapter._save_collections_to_database(self.project_id, project_dir / "step5_clustering" / "step5_clustering.json")
logger.info(f"项目 {self.project_id} 流水线结果已全部保存到数据库")
except Exception as e:
logger.error(f"保存流水线结果到数据库失败: {e}")
# 不抛出异常,避免影响整个流水线的完成状态
3. 创建修复脚本
创建scripts/fix_data_storage.py脚本来手动修复已存在的项目:
def fix_project_data_storage(project_id: str):
"""修复项目数据存储"""
# 创建Pipeline适配器
adapter = PipelineAdapter(db, None, project_id)
# 保存切片数据到数据库
adapter._save_clips_to_database(project_id, clips_file)
# 保存合集数据到数据库
adapter._save_collections_to_database(project_id, collections_file)
修复结果
修复前
- 数据库中的切片数量: 0
- 数据库中的合集数量: 0
- 前端显示: 0个切片,0个合集
修复后
- 数据库中的切片数量: 6
- 数据库中的合集数量: 1
- 前端显示: 6个切片,1个合集
数据详情
切片数据:
- "AI不会取代你,但会用AI的'超级个体'会碾压你" (评分: 0.96)
- "AI让经验失效,却让这项能力变得前所未有地重要" (评分: 0.95)
- "未来十年真正抗风险的能力,不在技能,而在判断" (评分: 0.94)
- "AI创业正进入大学生时代,这届年轻人开始弯道超车" (评分: 0.93)
- "所谓的非共识,不过是小圈子的共识" (评分: 0.88)
- "投资人和程序员眼中的MCP为何天差地别?" (评分: 0.82)
合集数据:
- "职场成长记" - 探讨职业发展、技能提升与职场心态变化。
使用方法
修复现有项目
python scripts/fix_data_storage.py --project-id <项目ID>
仅检查数据
python scripts/fix_data_storage.py --project-id <项目ID> --check-only
预防措施
- 自动化修复:在项目处理完成后自动触发数据存储
- 数据验证:在处理完成后验证数据库中的数据完整性
- 错误处理:改进错误处理机制,确保数据存储失败不会影响整个流水线
- 监控告警:添加监控机制,及时发现数据存储问题
相关文件
backend/services/processing_orchestrator.py- 处理编排器backend/services/pipeline_adapter.py- 流水线适配器backend/services/storage_service.py- 存储服务scripts/fix_data_storage.py- 数据存储修复脚本backend/models/clip.py- 切片模型backend/models/collection.py- 合集模型