---
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. 所有测试通过