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/14-robustness-cost/14-CONTEXT.md
T

114 lines
4.7 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 14: 鲁棒性与成本控制 - Context
**Gathered:** 2026-03-23
**Status:** Ready for planning
<domain>
## Phase Boundary
提高 LLM 语义分段的稳定性和成本效率。
**核心能力:**
- LLM 调用失败时的重试和降级策略
- 长视频字幕的分块处理,避免上下文窗口溢出
- 智能缓存,避免重复 LLM 调用
- 详细的日志记录,便于问题诊断
**不包括:**
- 输出格式优化(Phase 15 - 兼容性)
- 新的分段策略(Phase 13 已实现统一策略)
</domain>
<decisions>
## Implementation Decisions
### 重试策略
- **重试次数**: 重试 1 次 — 失败后立即降级到规则分段,简单快速,避免浪费配额
- **重试条件**: 仅可恢复错误触发重试 — 网络错误/超时/限流重试,API 错误(如 400)直接降级
- **重试延迟**: 立即重试 — 失败后立即重试,大多数情况下网络抖动是瞬时的
- **不可恢复错误**: API 错误(4xx)、解析失败、验证失败等直接降级,不重试
### 分块处理
- **分块阈值**: 5000 字符(约 10-15 分钟字幕)— 与 ASRCorrector 的 batch_size 一致,保持代码模式统一
- **分块方式**: 按句子边界分割 — 在句号、问号、感叹号等标点符号后分割,保持语义完整性
- **结果合并**: 直接拼接各分块结果 — 每个分块独立分段后直接拼接,简单快速
- **分块策略**: 长字幕按句子边界分成多个 5000 字符以内的块,每块独立调用 LLM 分段
### 缓存机制
- **缓存键**: 字幕内容哈希(SHA256)— 精确匹配,相同内容一定命中
- **缓存存储**: 本地文件系统 — 存储在 `.planning/cache/semantic/` 目录,简单持久化
- **缓存 TTL**: 永久有效 — 字幕内容不变,分段结果应该一致,手动清理过期缓存
- **缓存内容**: 完整的 SegmentationResult(JSON 格式),包含 video_type 和 segments
### 日志详细程度
- **降级日志**: 记录原因 + 降级方式 — 如 "API key 未配置,降级到规则分段"
- **日志级别**: 区分级别
- 降级:warning 级别
- 重试:info 级别
- 成功:debug 级别
- **重试日志**: 记录重试原因和次数
- **缓存日志**: 记录缓存命中/未命中,使用 debug 级别
### Claude's Discretion
- 具体的重试逻辑实现细节
- 缓存文件命名规则和目录结构
- 分块算法的具体实现(句子边界检测)
- 日志消息的具体措辞和格式
</decisions>
<code_context>
## Existing Code Insights
### Reusable Assets
- **kb_workflow/srt/semantic_engine.py** — UnifiedSegmentationStrategy 类,已有基本降级逻辑(AI 不可用时使用规则分段)
- **kb_workflow/srt/corrector.py** — ASRCorrector 类,有 `_correct_long_text()` 方法处理长文本分批(batch_size=5000,按句子分割)
- **kb_workflow/deep_analyzer/__init__.py** — SimpleAIClient 类,统一的 LLM 调用接口
### Established Patterns
- **Lazy AI Client 初始化**: ASRCorrector 模式 — 在 __init__ 中尝试创建 SimpleAIClient,如果 api_key 为空则设为 None
- **AIClientProtocol**: 定义了 generate(prompt, max_tokens, disable_reasoning) 方法
- **降级策略**: UnifiedSegmentationStrategy.segment() 中已有 try-except,异常时返回规则分段
- **日志模式**: 使用 `logger.info/warning/error`,已在 semantic_engine.py 中使用
### Integration Points
- **UnifiedSegmentationStrategy.segment()**: 需要添加重试逻辑和分块处理
- **SemanticSegmentationEngine**: 可以添加缓存层
- **SimpleAIClient.generate()**: LLM 调用点,需要捕获可恢复错误进行重试
- **缓存目录**: `.planning/cache/semantic/` — 需要创建目录结构
</code_context>
<specifics>
## Specific Ideas
- **分块与 ASRCorrector 一致**: 复用 ASRCorrector 的分批处理模式(batch_size=5000,按句子分割)
- **重试仅网络错误**: 区分可恢复错误(网络、超时、限流)和不可恢复错误(API 错误、解析失败)
- **缓存与内容绑定**: 使用内容哈希而非视频 ID,避免同一视频更新后缓存失效问题
- **日志便于诊断**: 降级时记录具体原因(如 "ConnectionError: 请求超时,重试后仍失败,降级到规则分段")
</specifics>
<deferred>
## Deferred Ideas
- **缓存清理命令**: 自动清理过期缓存的功能 — 延后到未来版本,当前手动删除缓存文件
- **缓存压缩**: 压缩缓存文件以节省空间 — 延后到缓存文件较大时再考虑
- **分块智能合并**: 检测相邻分段语义相似度并合并 — 增加复杂度,当前直接拼接足够
</deferred>
---
*Phase: 14-robustness-cost*
*Context gathered: 2026-03-23*