6.3 KiB
6.3 KiB
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 | 04 | tdd | 1 |
|
true |
|
|
目的:让 LLM 为主题/章节类型分段生成简洁准确的标题,论点/观点分段不加标题 输出:VideoSegment.title 字段和验证,Prompt 中的标题生成指令
<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.mdUser Decision (Locked)
- 标题范围: LLM 自主判断 — 让 LLM 自行判断哪些分段需要标题(主题/章节类),哪些不需要(观点/对话类),不在 Prompt 中硬性规定
- 标题风格: 简洁描述型 — 标题应简短(5-15 字),如「机器学习概述」「梯度下降原理」,类似目录结构
- 标题格式: H2 (##) — 在 Markdown 输出中,标题使用二级标题(##),与现有「## 内容」格式保持一致
- 标题缺失处理: 跳过标题 — 如果 LLM 无法为某个分段生成合适的标题(如过渡性内容),该分段不加标题,直接以内容开始
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 阶段 - 优化代码:
- 优化标题验证逻辑
</behavior>
<action>
在 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 字
</action>
<verify>
<automated>pytest tests/test_semantic_engine.py::test_title_generation -x</automated>
</verify>
<done>
- VideoSegment.title 字段定义为 Optional[str]
- @field_validator 验证标题长度(5-15 字)
- SEGMENTATION_PROMPT 包含标题生成指令
- 说明 LLM 自主判断是否需要标题
- 测试验证标题生成和省略
</done>
- pytest tests/test_semantic_engine.py -v 相关测试通过
- 标题长度验证生效
- Prompt 指令清晰(LLM 自主判断)
<success_criteria>
- VideoSegment.title 定义为 Optional[str]
- @field_validator 验证标题长度(5-15 字)
- SEGMENTATION_PROMPT 包含标题生成指令
- 测试验证标题生成和省略 </success_criteria>