--- phase: 13 plan: 04 type: tdd wave: 1 depends_on: [] files_modified: - kb_workflow/srt/semantic_engine.py - tests/test_semantic_engine.py autonomous: true requirements: - TITLE-01 - TITLE-02 - TITLE-03 must_haves: truths: - "系统能为主题/章节类型的分段生成描述性标题" - "标题简洁准确(5-15字),反映分段的主要内容" - "论点/观点类型的分段只分段,不加标题" artifacts: - path: "kb_workflow/srt/semantic_engine.py" provides: "标题生成 Prompt 指令和验证" contains: "VideoSegment.title 字段验证" - path: "tests/test_semantic_engine.py" provides: "标题生成测试" min_lines: 60 key_links: - from: "SEGMENTATION_PROMPT" to: "VideoSegment.title" via: "Prompt 指导 LLM 生成标题" pattern: "为主题.*生成标题.*5-15字" - from: "VideoSegment.validate_title_length" to: "Pydantic 验证" via: "标题长度限制" pattern: "len.*title.*15" --- 实现主题标题生成功能 目的:让 LLM 为主题/章节类型分段生成简洁准确的标题,论点/观点分段不加标题 输出:VideoSegment.title 字段和验证,Prompt 中的标题生成指令 @/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) - **标题范围**: LLM 自主判断 — 让 LLM 自行判断哪些分段需要标题(主题/章节类),哪些不需要(观点/对话类),不在 Prompt 中硬性规定 - **标题风格**: 简洁描述型 — 标题应简短(5-15 字),如「机器学习概述」「梯度下降原理」,类似目录结构 - **标题格式**: H2 (##) — 在 Markdown 输出中,标题使用二级标题(##),与现有「## 内容」格式保持一致 - **标题缺失处理**: 跳过标题 — 如果 LLM 无法为某个分段生成合适的标题(如过渡性内容),该分段不加标题,直接以内容开始 主题标题生成 kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py Prompt 设计(用户决策): - 让 LLM 自主判断哪些分段需要标题 - 标题简洁(5-15字),如「机器学习概述」 - 过渡性内容可将 title 设为 null Pydantic 验证: - title: Optional[str] = None - 标题长度验证(不超过 15 字) 测试验证: - 主题/章节分段生成标题 - 标题简洁准确 - 论点/观点分段标题为 null 在 VideoSegment 模型中: 1. title: Optional[str] = Field(None, description="分段标题(5-15字)") 2. @field_validator('title') 验证长度 在 SEGMENTATION_PROMPT 中: 1. 添加标题生成指令 2. 说明 LLM 自主判断是否需要标题 3. 标题简洁(5-15字) 4. 无法生成标题时设为 null 测试: 1. test_title_generation() - 验证标题生成 2. test_title_omission() - 验证不需要标题时为 null Task 1: 实现标题生成功能 kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py RED 阶段 - 测试预期行为: - test_title_generation: 主题/章节分段生成标题 - test_title_omission: 论点/观点分段不加标题(title=null) GREEN 阶段 - 实现功能: - VideoSegment.title: Optional[str] = None - @field_validator 验证标题长度(5-15 字) - SEGMENTATION_PROMPT 添加标题生成指令 - 说明 LLM 自主判断是否需要标题 REFACTOR 阶段 - 优化代码: - 优化标题验证逻辑 在 semantic_engine.py 中实现: 1. 更新 VideoSegment 模型: ```python class VideoSegment(BaseModel): title: Optional[str] = Field( None, description="分段标题(5-15字),主题/章节类型有标题,观点/对话类型为空" ) content: str = Field(..., description="分段内容,保持句子完整性") start_index: int = Field(..., description="在原文中的起始字符位置") end_index: int = Field(..., description="在原文中的结束字符位置") @field_validator('title') @classmethod def validate_title_length(cls, v: Optional[str]) -> Optional[str]: if v is not None and len(v) > 15: raise ValueError("标题长度不应超过 15 字") return v ``` 2. 在 SEGMENTATION_PROMPT 中添加标题指令: ```python 【分段要求】 ... 6. 为主分/章节类型的分段生成简洁标题(5-15字),论点/观点类型分段不加标题 【输出格式】 ... "title": "分段标题(如果此分段不需要标题则设为 null)", ... ``` 3. 在 Prompt 示例中说明标题判断标准(自主判断) 测试验证: - 主题分段有标题(如「机器学习概述」) - 过渡性内容标题为 null - 标题长度不超过 15 字 pytest tests/test_semantic_engine.py::test_title_generation -x - VideoSegment.title 字段定义为 Optional[str] - @field_validator 验证标题长度(5-15 字) - SEGMENTATION_PROMPT 包含标题生成指令 - 说明 LLM 自主判断是否需要标题 - 测试验证标题生成和省略 - pytest tests/test_semantic_engine.py -v 相关测试通过 - 标题长度验证生效 - Prompt 指令清晰(LLM 自主判断) 1. VideoSegment.title 定义为 Optional[str] 2. @field_validator 验证标题长度(5-15 字) 3. SEGMENTATION_PROMPT 包含标题生成指令 4. 测试验证标题生成和省略 After completion, create `.planning/phases/13-llm/13-04-SUMMARY.md`