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

184 lines
6.3 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: 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>