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

8.0 KiB
Raw Blame History

phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
phase plan type wave depends_on files_modified autonomous requirements must_haves
13 07 execute 2
13-01
13-02
13-03
13-04
13-05
13-06
kb_workflow/pipeline/processors/srt.py
tests/test_srt_processor_integration.py
true
CONFIG-03
truths artifacts key_links
SRTProcessor 支持启用/禁用 LLM 语义分段
启用时使用 SemanticSegmentationEngine,禁用时使用规则分段
知乎/文章平台继续使用 AnalyzeProcessor,不受影响
path provides min_lines exports
kb_workflow/pipeline/processors/srt.py SRTProcessor 集成 LLM 分段 350
SRTProcessor.__init__
SRTProcessor.process
path provides min_lines
tests/test_srt_processor_integration.py SRTProcessor 集成测试 100
from to via pattern
SRTProcessor.__init__ SemanticSegmentationEngine enable_semantic_segmentation 参数 enable_semantic.*segmentation
from to via pattern
SRTProcessor.process SemanticSegmentationEngine.segment 条件分支选择分段方式 if.*semantic.*else.*rule
from to via pattern
Pipeline.run AnalyzeProcessor/SRTProcessor 平台路由逻辑(保持不变) platform.*bilibili.*srt
集成 SemanticSegmentationEngine 到 SRTProcessor

目的:让 SRTProcessor 支持 LLM 语义分段(可选),保持向后兼容 输出:更新的 SRTProcessor,集成测试

<execution_context> @/home/starmen1265/.claude/get-shit-done/workflows/execute-plan.md @/home/starmen1265/.claude/get-shit-done/templates/summary.md </execution_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)

class SRTProcessor(BaseProcessor):
    def __init__(
        self,
        state_manager: Optional[WorkflowStateManager] = None,
        enable_correction: bool = True
    ):
        ...
        self.segmenter = SemanticSegmenter()  # 规则分段
Task 1: 集成 SemanticSegmentationEngine 到 SRTProcessor kb_workflow/pipeline/processors/srt.py, tests/test_srt_processor_integration.py 更新 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>
- pytest tests/test_srt_processor_integration.py -v 全部通过 - pytest tests/test_srt_processor.py -v 现有测试不回归 - 平台路由逻辑不受影响 - 向后兼容(enable_semantic_segmentation=False 时行为不变)

<success_criteria>

  1. SRTProcessor 支持 enable_semantic_segmentation 参数
  2. 启用时使用 LLM 分段,禁用时使用规则分段
  3. AI 不可用时自动降级
  4. 集成测试验证所有场景
  5. 平台路由逻辑不受影响 </success_criteria>
After completion, create `.planning/phases/13-llm/13-07-SUMMARY.md`