184 lines
6.3 KiB
Markdown
184 lines
6.3 KiB
Markdown
---
|
||
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"
|
||
---
|
||
|
||
<objective>
|
||
实现主题标题生成功能
|
||
|
||
目的:让 LLM 为主题/章节类型分段生成简洁准确的标题,论点/观点分段不加标题
|
||
输出:VideoSegment.title 字段和验证,Prompt 中的标题生成指令
|
||
</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)
|
||
- **标题范围**: LLM 自主判断 — 让 LLM 自行判断哪些分段需要标题(主题/章节类),哪些不需要(观点/对话类),不在 Prompt 中硬性规定
|
||
- **标题风格**: 简洁描述型 — 标题应简短(5-15 字),如「机器学习概述」「梯度下降原理」,类似目录结构
|
||
- **标题格式**: H2 (##) — 在 Markdown 输出中,标题使用二级标题(##),与现有「## 内容」格式保持一致
|
||
- **标题缺失处理**: 跳过标题 — 如果 LLM 无法为某个分段生成合适的标题(如过渡性内容),该分段不加标题,直接以内容开始
|
||
</context>
|
||
|
||
<feature>
|
||
<name>主题标题生成</name>
|
||
<files>kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py</files>
|
||
<behavior>
|
||
Prompt 设计(用户决策):
|
||
- 让 LLM 自主判断哪些分段需要标题
|
||
- 标题简洁(5-15字),如「机器学习概述」
|
||
- 过渡性内容可将 title 设为 null
|
||
|
||
Pydantic 验证:
|
||
- title: Optional[str] = None
|
||
- 标题长度验证(不超过 15 字)
|
||
|
||
测试验证:
|
||
- 主题/章节分段生成标题
|
||
- 标题简洁准确
|
||
- 论点/观点分段标题为 null
|
||
</behavior>
|
||
<implementation>
|
||
在 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
|
||
</implementation>
|
||
</feature>
|
||
|
||
<tasks>
|
||
<task type="auto" tdd="true">
|
||
<name>Task 1: 实现标题生成功能</name>
|
||
<files>kb_workflow/srt/semantic_engine.py, tests/test_semantic_engine.py</files>
|
||
<behavior>
|
||
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>
|
||
</task>
|
||
</tasks>
|
||
|
||
<verification>
|
||
- pytest tests/test_semantic_engine.py -v 相关测试通过
|
||
- 标题长度验证生效
|
||
- Prompt 指令清晰(LLM 自主判断)
|
||
</verification>
|
||
|
||
<success_criteria>
|
||
1. VideoSegment.title 定义为 Optional[str]
|
||
2. @field_validator 验证标题长度(5-15 字)
|
||
3. SEGMENTATION_PROMPT 包含标题生成指令
|
||
4. 测试验证标题生成和省略
|
||
</success_criteria>
|
||
|
||
<output>
|
||
After completion, create `.planning/phases/13-llm/13-04-SUMMARY.md`
|
||
</output>
|