--- phase: 12-srt-simplifier plan: 02 type: execute wave: 2 depends_on: - 12-01 files_modified: - kb_workflow/pipeline/pipeline.py - kb_workflow/pipeline/schemas.py - kb_workflow/cli.py - kb_workflow/deep_analyzer/__init__.py - tests/test_bilibili_pipeline.py autonomous: false requirements: - OUT-03 - SCOPE-01 - SCOPE-02 must_haves: truths: - "B 站视频处理流程使用 SRTProcessor 替代 AnalyzeProcessor" - "知乎等其他平台处理器保持不变" - "DeepAnalyzer 不再被 B 站视频处理调用" - "kb-workflow process 命令正常工作" artifacts: - path: "kb_workflow/pipeline/pipeline.py" provides: "Pipeline 编排" contains: "bilibili pipeline steps" - path: "kb_workflow/cli.py" provides: "CLI 入口" contains: "process_command" key_links: - from: "kb_workflow/cli.py" to: "kb_workflow/pipeline/pipeline.py" via: "Pipeline class" pattern: "Pipeline" - from: "kb_workflow/pipeline/pipeline.py" to: "kb_workflow/pipeline/processors/srt.py" via: "platform check" pattern: "SRTProcessor" --- 将 SRTProcessor 集成到 Pipeline,修改 B 站处理流程使用简化处理,移除 DeepAnalyzer 调用,同时保持知乎等其他平台处理不变。 Purpose: 实现需求 SCOPE-01(移除深度分析)和 SCOPE-02(仅针对 B 站),确保 B 站视频生成简化的 Markdown 文档。 Output: 修改后的 Pipeline 和 CLI,集成测试通过。 @/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md @/home/starmen1265/.claude/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md ## 现有 Pipeline 流程(from cli.py) ```python processors = [ ParseProcessor(), DownloadProcessor(), ASRProcessor(), AnalyzeProcessor(), # B 站视频:深度分析(需移除) ArchiveProcessor(), ] config = PipelineConfig( steps=["parse", "download", "asr", "analyze", "archive"], ) ``` ## Pipeline 条件逻辑(from pipeline.py) ```python # 现有平台相关逻辑示例 text_content_types = {"article", "answer", "zhuanlan", "question"} if step_name == "asr" and parsed.content_type in text_content_types: logger.info(f"Skipping ASR for text content type: {parsed.content_type}") continue ``` ## B 站 vs 知乎处理差异 | 平台 | 内容类型 | ASR | 分析 | |------|----------|-----|------| | bilibili | video | 需要 | 简化(SRTProcessor) | | bilibili | article | 跳过 | AnalyzeProcessor(保留) | | zhihu | answer | 跳过 | AnalyzeProcessor(保留) | | zhihu | zhuanlan | 跳过 | AnalyzeProcessor(保留) | ## 需要修改的文件 1. `pipeline.py`: 根据平台类型选择处理器 2. `cli.py`: 更新处理器列表 3. `schemas.py`: 添加必要的 Input/Output Schema Task 1: 修改 Pipeline 支持平台特定处理流程 kb_workflow/pipeline/pipeline.py, kb_workflow/pipeline/schemas.py 修改 Pipeline 支持平台特定处理流程: 1. 更新 `kb_workflow/pipeline/schemas.py`: - 确认 `SRTInput` 和 `SRTOutput` 已在 12-01 中添加 - 添加 `SRTInput` 到 imports 2. 修改 `kb_workflow/pipeline/pipeline.py` 的 `run` 方法: - 在 step 处理循环中,检测 B 站视频 + analyze 步骤的情况 - B 站视频(platform="bilibili", content_type="video")时: - 跳过 "analyze" 步骤 - 执行 "srt" 步骤(使用 SRTProcessor) - 其他情况保持原有逻辑 3. 修改 `run` 方法中的步骤输入创建逻辑: - 添加 `elif step_name == "srt":` 分支 - SRTInput 需要: srt_file(从 ASR 结果获取), metadata_file, output_file 4. 修改 `_populate_skipped_step_results` 方法: - 添加 "srt" 步骤的现有文件扫描逻辑 关键代码位置: pipeline.py 约 170-250 行 python -c "from kb_workflow.pipeline.pipeline import Pipeline; print('Pipeline imports OK') - Pipeline 能根据平台类型选择处理器 - B 站视频使用 SRTProcessor - 其他平台保持 AnalyzeProcessor Task 2: 更新 CLI 处理器注册 kb_workflow/cli.py 更新 CLI 处理器注册: 1. 修改 `kb_workflow/cli.py` 的 `process_command` 函数: - 导入 SRTProcessor: `from .pipeline.processors import SRTProcessor` - 将 SRTProcessor 添加到 processors 列表 - 更新 PipelineConfig.steps: `["parse", "download", "asr", "srt", "analyze", "archive"]` (Pipeline 会根据平台条件跳过不需要的步骤) 2. 处理器列表变为: ```python processors = [ ParseProcessor(), DownloadProcessor(), ASRProcessor(), SRTProcessor(), # 新增:B 站视频使用 AnalyzeProcessor(), # 保留:知乎/文章使用 ArchiveProcessor(), ] ``` 注意:Pipeline 步骤顺序保持不变,SRTProcessor 和 AnalyzeProcessor 都注册, 但 Pipeline 会根据平台类型选择执行哪一个。 python -c "from kb_workflow.cli import process_command; print('CLI imports OK') - CLI 正确导入 SRTProcessor - 处理器列表包含所有处理器 - process_command 函数正常工作 Task 3: 添加 B 站视频流程的端到端测试 tests/test_bilibili_pipeline.py 添加 B 站视频流程的端到端测试: 1. 创建 `tests/test_bilibili_pipeline.py`: - 使用 mock 模拟 BilibiliAdapter 的 fetch_metadata 和 download_video - 使用 mock 模拟 ASRProcessor 的输出(返回 SRT 文件路径) - 测试 B 站视频处理流程: - 验证 SRTProcessor 被调用 - 验证 AnalyzeProcessor 被跳过 - 验证生成的 Markdown 文件格式正确 2. 测试用例: - `test_bilibili_video_uses_srt_processor`: 验证 B 站视频使用 SRTProcessor - `test_bilibili_article_uses_analyze_processor`: 验证 B 站文章使用 AnalyzeProcessor - `test_zhihu_answer_uses_analyze_processor`: 验证知乎回答使用 AnalyzeProcessor 3. 使用 pytest fixtures 创建测试数据: - 模拟的 SRT 文件内容 - 模拟的 metadata.json 内容 pytest tests/test_bilibili_pipeline.py -v - B 站视频流程测试通过 - 平台路由逻辑正确 - 生成的 Markdown 格式正确 Task 4: 更新 DeepAnalyzer 添加弃用警告 kb_workflow/deep_analyzer/__init__.py 更新 DeepAnalyzer 添加弃用警告(但保留功能): 1. 修改 `kb_workflow/deep_analyzer/__init__.py`: - 在 `DeepAnalyzer.__init__` 中添加日志警告: ```python import logging logger = logging.getLogger(__name__) logger.warning( "DeepAnalyzer is deprecated for Bilibili video processing. " "Use SRTProcessor instead." ) ``` - 功能保持不变,以便知乎等其他平台继续使用 2. 不删除任何代码,只是添加警告 注意:DeepAnalyzer 仍被 AnalyzeProcessor 使用,知乎处理需要它。 此任务只是添加警告,提醒开发者 B 站视频应使用 SRTProcessor。 python -c "from kb_workflow.deep_analyzer import DeepAnalyzer; print('DeepAnalyzer imports OK') - DeepAnalyzer 仍可正常导入和使用 - 初始化时输出弃用警告 - 知乎处理流程不受影响 完整的 B 站视频简化处理流程: - SRTProcessor 处理器(解析、分段、纠错、Markdown 生成) - Pipeline 平台路由逻辑(B 站视频用 SRT,其他用 Analyze) - CLI 集成和端到端测试 1. 运行单元测试: `pytest tests/test_srt_processor.py tests/test_bilibili_pipeline.py -v` 2. 测试 B 站视频处理(需要真实 SRT 文件或 mock): ```bash # 使用测试模式运行 python -m kb_workflow process "https://www.bilibili.com/video/BV1test" --no-skip ``` 3. 验证输出文件格式: - 检查生成的 .md 文件包含 YAML frontmatter - 检查时间戳已移除 - 检查文本已分段 4. 验证知乎处理不受影响: ```bash python -m kb_workflow process "https://zhuanlan.zhihu.com/p/123456" --no-skip ``` Type "approved" or describe issues found - 所有单元测试通过 - B 站视频使用 SRTProcessor - 知乎处理使用 AnalyzeProcessor - CLI 命令正常工作 - DeepAnalyzer 弃用警告正常输出 1. 运行 `kb-workflow process ` 生成 Markdown 文件(非深度分析报告) 2. Markdown 文件包含视频元数据(标题、作者、时长) 3. 元数据处理功能保持不变(BilibiliAdapter 正常工作) 4. 视频标签正常生成 5. DeepAnalyzer 对 B 站视频输出弃用警告 6. 知乎等其他平台处理器不受影响 7. 所有测试通过 After completion, create `.planning/phases/12-srt-simplifier/12-02-SUMMARY.md`