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-02-PLAN.md
T

185 lines
6.1 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: 02
type: tdd
wave: 1
depends_on: []
files_modified:
- kb_workflow/srt/semantic_engine.py
- tests/test_semantic_engine.py
autonomous: true
requirements:
- BOUND-01
- BOUND-02
- BOUND-03
- BOUND-04
must_haves:
truths:
- "系统能检测字幕中的话题转换点"
- "边界检测基于语义分析,而非时间间隔或字符长度"
- "话题切换时正确创建分段,不混入不同话题的内容"
- "单个话题的内容保持完整,不会被错误截断"
artifacts:
- path: "kb_workflow/srt/semantic_engine.py"
provides: "语义边界检测 Prompt 模板"
min_lines: 250
exports: ["SEGMENTATION_PROMPT", "_parse_result"]
- path: "tests/test_semantic_engine.py"
provides: "话题边界检测测试"
min_lines: 80
key_links:
- from: "SEGMENTATION_PROMPT"
to: "LLM 输出"
via: "Prompt 指令要求识别话题转换点"
pattern: "话题转换.*分段"
- from: "_parse_result"
to: "SegmentationResult"
via: "解析 LLM 返回的 JSON"
pattern: "extract.*json.*validate"
---
<objective>
实现语义边界检测功能
目的:让 LLM 识别话题转换点,在不同主题之间创建分段边界
输出:SEGMENTATION_PROMPT 模板,_parse_result 解析方法
</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
# Existing Code
From kb_workflow/srt/segmenter.py:
```python
class SemanticSegmenter:
# 规则分段:基于时间间隔(>3秒)和字符长度(>500)
def segment(self, segments: List[Segment]) -> List[str]:
# 简单启发式规则
```
SemanticSegmentationEngine 将替代这个规则分段器,使用 LLM 进行语义分析。
</context>
<feature>
<name>语义边界检测</name>
<files>kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py</files>
<behavior>
Prompt 设计:
- 明确指令「在话题转换处创建新分段,不要混入不同话题的内容」
- 强调「基于语义完整性,而非时间或字符长度」
- 建议分段数量 5-8 个(可灵活调整)
- 每段约 1000-2000 字(为保持语义完整性可突破)
LLM 输出解析:
- 提取 JSON 格式的分段结果
- 验证每个分段的 start_index 和 end_index
- 验证分段内容不重叠且覆盖原文
边界检测质量:
- 话题切换时正确创建边界
- 单个话题内容保持完整
</behavior>
<implementation>
在 semantic_engine.py 中:
1. 定义 SEGMENTATION_PROMPT 常量(包含话题转换检测指令)
2. 实现 extract_json_from_llm_response() 方法(参考研究文档)
3. 实现 _parse_result() 方法,解析 LLM 输出并验证
测试:
1. test_topic_boundary_detection() - 验证话题转换检测
2. test_semantic_completeness() - 验证单个话题完整性
</implementation>
</feature>
<tasks>
<task type="auto" tdd="true">
<name>Task 1: 实现语义边界检测 Prompt 和解析</name>
<files>kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py</files>
<behavior>
RED 阶段 - 测试预期行为:
- test_topic_boundary_detection: LLM 正确识别话题转换点
- test_semantic_completeness: 单个话题内容完整,不混入其他话题
GREEN 阶段 - 实现功能:
- SEGMENTATION_PROMPT 包含「在话题转换处创建新分段」指令
- extract_json_from_llm_response() 从 LLM 响应提取 JSON
- _parse_result() 使用 Pydantic 验证 SegmentationResult
REFACTOR 阶段 - 优化代码:
- 提取 JSON 提取逻辑为独立函数
- 优化 Prompt 指令的清晰度
</behavior>
<action>
在 semantic_engine.py 中实现:
1. SEGMENTATION_PROMPT 模板(基于研究文档):
```python
SEGMENTATION_PROMPT = """你是一个专业的视频内容分析师。请将以下字幕内容按语义分段。
【视频信息】
类型:{video_type}
标题:{title}
总字数:{total_chars}字
【字幕内容】
{content}
【分段要求】
1. 建议将内容分为 5-8 个段落(可根据语义完整性灵活调整)
2. 每个段落约 1000-2000 字(为保持语义完整性可以突破此范围)
3. **在话题转换处创建新分段,不要混入不同话题的内容**
4. 保持句子完整性,分段边界应放在自然停顿处
..."""
```
2. extract_json_from_llm_response(response: str) -> Dict:
- 尝试直接解析 JSON
- 提取 ```json ``` 代码块
- 使用正则提取任何 JSON 对象
3. _parse_result(llm_output: str, fallback_segments) -> List[VideoSegment]:
- 调用 extract_json_from_llm_response
- 使用 SegmentationResult.validate() 验证
- 失败时返回 fallback_segments
测试使用 mock_ai_client 模拟 LLM 响应,验证:
- 话题转换点正确识别
- 分段内容不重叠
- 覆盖完整原文
</action>
<verify>
<automated>pytest tests/test_semantic_engine.py::test_topic_boundary_detection -x</automated>
</verify>
<done>
- SEGMENTATION_PROMPT 包含话题转换检测指令
- extract_json_from_llm_response() 能从各种格式提取 JSON
- _parse_result() 能正确解析和验证 LLM 输出
- 测试验证边界检测质量
</done>
</task>
</tasks>
<verification>
- pytest tests/test_semantic_engine.py -v 相关测试通过
- Prompt 指令清晰明确
- JSON 解析健壮(处理多种格式)
</verification>
<success_criteria>
1. SEGMENTATION_PROMPT 包含话题转换检测指令
2. extract_json_from_llm_response() 能处理纯 JSON、代码块、混合文本
3. _parse_result() 使用 Pydantic 验证 LLM 输出
4. 测试验证边界检测功能
</success_criteria>
<output>
After completion, create `.planning/phases/13-llm/13-02-SUMMARY.md`
</output>