This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-skills/.planning/phases/13-llm/13-07-PLAN.md
T

223 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
phase: 13
plan: 07
type: execute
wave: 2
depends_on:
- 13-01
- 13-02
- 13-03
- 13-04
- 13-05
- 13-06
files_modified:
- kb_workflow/pipeline/processors/srt.py
- tests/test_srt_processor_integration.py
autonomous: true
requirements:
- CONFIG-03
must_haves:
truths:
- "SRTProcessor 支持启用/禁用 LLM 语义分段"
- "启用时使用 SemanticSegmentationEngine,禁用时使用规则分段"
- "知乎/文章平台继续使用 AnalyzeProcessor,不受影响"
artifacts:
- path: "kb_workflow/pipeline/processors/srt.py"
provides: "SRTProcessor 集成 LLM 分段"
min_lines: 350
exports: ["SRTProcessor.__init__", "SRTProcessor.process"]
- path: "tests/test_srt_processor_integration.py"
provides: "SRTProcessor 集成测试"
min_lines: 100
key_links:
- from: "SRTProcessor.__init__"
to: "SemanticSegmentationEngine"
via: "enable_semantic_segmentation 参数"
pattern: "enable_semantic.*segmentation"
- from: "SRTProcessor.process"
to: "SemanticSegmentationEngine.segment"
via: "条件分支选择分段方式"
pattern: "if.*semantic.*else.*rule"
- from: "Pipeline.run"
to: "AnalyzeProcessor/SRTProcessor"
via: "平台路由逻辑(保持不变)"
pattern: "platform.*bilibili.*srt"
---
<objective>
集成 SemanticSegmentationEngine 到 SRTProcessor
目的:让 SRTProcessor 支持 LLM 语义分段(可选),保持向后兼容
输出:更新的 SRTProcessor,集成测试
</objective>
<execution_context>
@/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md
@/home/starmen1265/.claude/get-shit-done/templates/summary.md
</execution_context>
<context>
@.planning/phases/13-llm/13-CONTEXT.md
@.planning/phases/13-llm/13-RESEARCH.md
# User Decision (Locked)
- **SRTProcessor 集成**: 配置开关控制 — 新增 `enable_semantic_segmentation` 参数,True 时用 LLM 分段,False 时保留规则分段作为后备选项
- **现有 SemanticSegmenter**: 完全替代 — 新代码完全替代旧代码,SemanticSegmenter 被 SemanticSegmentationEngine 取代
# Existing Code (from srt.py)
```python
class SRTProcessor(BaseProcessor):
def __init__(
self,
state_manager: Optional[WorkflowStateManager] = None,
enable_correction: bool = True
):
...
self.segmenter = SemanticSegmenter() # 规则分段
```
</context>
<tasks>
<task type="auto">
<name>Task 1: 集成 SemanticSegmentationEngine 到 SRTProcessor</name>
<files>kb_workflow/pipeline/processors/srt.py, tests/test_srt_processor_integration.py</files>
<action>
更新 SRTProcessor,集成 LLM 语义分段:
1. 在 __init__ 中添加 `enable_semantic_segmentation` 参数:
```python
def __init__(
self,
state_manager: Optional[WorkflowStateManager] = None,
enable_correction: bool = True,
enable_semantic_segmentation: bool = False # 新增参数
):
super().__init__(state_manager)
self.enable_correction = enable_correction
self.enable_semantic_segmentation = enable_semantic_segmentation
# 初始化分段器
if enable_semantic_segmentation:
try:
from kb_workflow.srt.semantic_engine import SemanticSegmentationEngine
from kb_workflow.deep_analyzer import SimpleAIClient
ai_client = SimpleAIClient()
if ai_client.api_key:
self.segmenter = SemanticSegmentationEngine(ai_client=ai_client)
logger.info("Semantic segmentation enabled")
else:
logger.info("AI API key not configured, using rule-based segmenter")
self.segmenter = SemanticSegmenter()
except Exception as e:
logger.warning(f"Failed to initialize semantic engine: {e}, using rule-based segmenter")
self.segmenter = SemanticSegmenter()
else:
self.segmenter = SemanticSegmenter()
# 初始化纠错器(保持不变)
...
```
2. 更新 process() 方法中的分段调用:
```python
# Step 2: 语义分段
logger.info("Segmenting subtitles into paragraphs")
if self.enable_semantic_segmentation and isinstance(self.segmenter, SemanticSegmentationEngine):
# LLM 语义分段
paragraphs = self.segmenter.segment(segments, metadata=metadata)
else:
# 规则分段
paragraphs = self.segmenter.segment(segments)
logger.info(f"Generated {len(paragraphs)} paragraphs")
```
3. 更新 _generate_markdown() 以支持带标题的分段:
```python
def _generate_markdown(
self,
output_file: Path,
metadata: Dict[str, Any],
paragraphs: List[str], # 或 List[VideoSegment]
tags: List[str]
) -> None:
...
# 如果 paragraphs 包含 VideoSegment(LLM 分段结果)
if paragraphs and hasattr(paragraphs[0], 'title'):
for seg in paragraphs:
if seg.title:
content_parts.append(f"## {seg.title}")
content_parts.append(seg.content)
content_parts.append("")
else:
# 规则分段(纯文本)
content_parts.append("## 内容")
content_parts.append("")
for para in paragraphs:
content_parts.append(para)
content_parts.append("")
...
```
4. 更新 SRTInput/Output Schema(如果需要):
- 考虑是否需要添加 semantic_segmentation_enabled 字段
5. 创建集成测试:
```python
# tests/test_srt_processor_integration.py
def test_srt_processor_semantic_mode():
"""测试 SRTProcessor 语义分段模式"""
# mock AI client
# enable_semantic_segmentation=True
# 验证调用 SemanticSegmentationEngine
def test_srt_processor_rule_based_mode():
"""测试 SRTProcessor 规则分段模式"""
# enable_semantic_segmentation=False
# 验证使用 SemanticSegmenter
def test_srt_processor_semantic_fallback():
"""测试 AI 不可用时降级到规则分段"""
# AI client 无效
# 验证降级到 SemanticSegmenter
```
6. 确保 Pipeline 平台路由逻辑不受影响(Phase 12 已实现):
- B站视频使用 SRTProcessor
- 知乎/文章继续使用 AnalyzeProcessor
- 不修改 Pipeline.run() 中的路由逻辑
</action>
<verify>
<automated>pytest tests/test_srt_processor_integration.py::test_srt_processor_semantic_mode -x</automated>
</verify>
<done>
- SRTProcessor 支持 enable_semantic_segmentation 参数
- 启用时使用 SemanticSegmentationEngine
- 禁用时使用 SemanticSegmenter(向后兼容)
- AI 不可用时自动降级到规则分段
- _generate_markdown() 支持带标题的分段
- 集成测试验证所有场景
- 平台路由逻辑不受影响(知乎/文章继续使用 AnalyzeProcessor)
</done>
</task>
</tasks>
<verification>
- pytest tests/test_srt_processor_integration.py -v 全部通过
- pytest tests/test_srt_processor.py -v 现有测试不回归
- 平台路由逻辑不受影响
- 向后兼容(enable_semantic_segmentation=False 时行为不变)
</verification>
<success_criteria>
1. SRTProcessor 支持 enable_semantic_segmentation 参数
2. 启用时使用 LLM 分段,禁用时使用规则分段
3. AI 不可用时自动降级
4. 集成测试验证所有场景
5. 平台路由逻辑不受影响
</success_criteria>
<output>
After completion, create `.planning/phases/13-llm/13-07-SUMMARY.md`
</output>