---
phase: 13
plan: 06
type: execute
wave: 2
depends_on:
- 13-01
- 13-02
- 13-03
- 13-04
- 13-05
files_modified:
- kb_workflow/srt/semantic_engine.py
- tests/test_semantic_engine.py
autonomous: true
requirements:
- STRAT-01
- STRAT-02
- STRAT-03
must_haves:
truths:
- "系统提供可扩展的分段策略架构"
- "Phase 13 实现统一策略(用户决策:无类型区分)"
- "策略架构支持未来添加新策略(扩展性)"
artifacts:
- path: "kb_workflow/srt/semantic_engine.py"
provides: "可扩展的策略架构(Strategy Pattern 预留)"
min_lines: 300
exports: ["SemanticSegmentationEngine", "SegmentationStrategy"]
- path: "tests/test_semantic_engine.py"
provides: "策略扩展性测试"
min_lines: 50
key_links:
- from: "SegmentationStrategy"
to: "SemanticSegmentationEngine"
via: "策略模式架构"
pattern: "class.*Strategy.*segment"
- from: "tests"
to: "SegmentationStrategy"
via: "验证策略可扩展性"
pattern: "test.*strategy.*extensibility"
---
实现可扩展的分段策略架构
目的:提供策略架构支持未来扩展(Phase 13 实现统一策略,遵守用户决策)
输出:SegmentationStrategy 接口,统一策略实现
@/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md
@/home/starmen1265/.claude/get-shit-done/templates/summary.md
@.planning/phases/13-llm/13-CONTEXT.md
@.planning/phases/13-llm/13-RESEARCH.md
# User Decision (Locked)
- **视频类型策略**: 无类型区分 — 使用统一的分段 Prompt,不针对不同视频类型(知识类/故事类/教程类)设计不同策略
# Research Document
Open Question 3: STRAT-01/STRAT-02/STRAT-03 需求的边界
Recommendation: 在代码结构上预留策略扩展接口(Strategy Pattern),但 Phase 13 只实现统一策略
分段策略架构
kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py
架构设计(研究文档建议):
- 预留 Strategy Pattern 接口(SegmentationStrategy)
- Phase 13 实现统一策略(UnifiedSegmentationStrategy)
- 支持未来添加知识类/故事类等特定策略
Phase 13 实现(遵守用户决策):
- 统一策略适用于所有视频类型
- 视频类型仅用于 Prompt 上下文,不改变分段策略
测试验证:
- 策略接口可扩展
- 统一策略适用于所有视频类型
在 semantic_engine.py 中:
1. 定义 SegmentationStrategy Protocol(接口)
2. 实现 UnifiedSegmentationStrategy(统一策略)
3. SemanticSegmentationEngine 使用策略接口
测试:
1. test_strategy_selection() - 验证策略选择
2. test_strategy_extensibility() - 验证策略可扩展性
Task 1: 实现可扩展策略架构
kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py
在 semantic_engine.py 中实现策略架构:
1. 定义 SegmentationStrategy Protocol:
```python
from typing import Protocol, List
from kb_workflow.srt.parser import Segment
class SegmentationStrategy(Protocol):
"""分段策略接口"""
def segment(
self,
segments: List[Segment],
metadata: dict
) -> List[str]:
"""对字幕分段进行语义分段
Args:
segments: 字幕分段列表
metadata: 视频元数据
Returns:
段落文本列表
"""
...
```
2. 实现 UnifiedSegmentationStrategy(统一策略):
```python
class UnifiedSegmentationStrategy:
"""统一分段策略
适用于所有视频类型(知识类、故事类、访谈类等)。
视频类型仅用于 Prompt 上下文,不改变分段策略。
遵守用户决策:无类型区分,使用统一 Prompt。
"""
def __init__(self, ai_client: Optional[AIClientProtocol] = None):
self.ai_client = ai_client
# Lazy initialization...
def segment(
self,
segments: List[Segment],
metadata: dict
) -> List[str]:
# 调用 LLM 进行语义分段
# 使用统一的 SEGMENTATION_PROMPT
...
```
3. 更新 SemanticSegmentationEngine:
```python
class SemanticSegmentationEngine:
def __init__(
self,
strategy: Optional[SegmentationStrategy] = None,
fallback_segmenter: Optional['SemanticSegmenter'] = None
):
# 默认使用统一策略
self.strategy = strategy or UnifiedSegmentationStrategy()
self.fallback_segmenter = fallback_segmenter or SemanticSegmenter()
def segment(
self,
segments: List[Segment],
metadata: dict
) -> List[str]:
return self.strategy.segment(segments, metadata)
```
测试验证:
- 策略接口可扩展(可实现新策略)
- 统一策略适用于所有视频类型
- 策略切换不影响功能
pytest tests/test_semantic_engine.py::test_strategy_extensibility -x
- SegmentationStrategy Protocol 定义完成
- UnifiedSegmentationStrategy 实现完成
- SemanticSegmentationEngine 使用策略接口
- 测试验证策略可扩展性
- pytest tests/test_semantic_engine.py -v 相关测试通过
- 策略接口清晰(Protocol 定义)
- 统一策略符合用户决策(无类型区分)
- 架构支持未来扩展
1. SegmentationStrategy Protocol 定义完成
2. UnifiedSegmentationStrategy 实现完成
3. SemanticSegmentationEngine 使用策略接口
4. 测试验证策略可扩展性