docs(14-03): complete semantic cache implementation plan
- Created SUMMARY.md with implementation details - Updated STATE.md with new decisions and session info - Updated ROADMAP.md progress (1/6 plans complete) - Marked COST-02 requirement complete Duration: 1 min (72s) Tasks: 1 (TDD: RED → GREEN) Tests: 11 passed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -54,7 +54,7 @@
|
||||
### 成本控制 (COST)
|
||||
|
||||
- [ ] **COST-01**: 长视频字幕进行分块处理,避免上下文窗口溢出
|
||||
- [ ] **COST-02**: 实现智能缓存,相同内容不重复调用 LLM
|
||||
- [x] **COST-02**: 实现智能缓存,相同内容不重复调用 LLM
|
||||
- [ ] **COST-03**: 提供配置开关,用户可选择是否启用 LLM 分段
|
||||
|
||||
### 输出格式 (OUTPUT)
|
||||
@@ -120,7 +120,7 @@
|
||||
| ROBUST-03 | Phase 14 | Pending |
|
||||
| ROBUST-04 | Phase 14 | Pending |
|
||||
| COST-01 | Phase 14 | Pending |
|
||||
| COST-02 | Phase 14 | Pending |
|
||||
| COST-02 | Phase 14 | Complete |
|
||||
| COST-03 | Phase 14 | Pending |
|
||||
| OUTPUT-01 | Phase 15 | Pending |
|
||||
| OUTPUT-02 | Phase 15 | Pending |
|
||||
|
||||
@@ -233,7 +233,7 @@ Phases execute in numeric order: 1 → 2 → ... → 12 → 13 → 14 → 15
|
||||
| 11. Stealth Fingerprinting | v1.4 | 2/2 | Complete | 2026-03-18 |
|
||||
| 12. SRT 简化处理器 | v1.5 | 2/2 | Complete | 2026-03-21 |
|
||||
| 13. 核心 LLM 分段功能 | 6/7 | Complete | 2026-03-21 | - |
|
||||
| 14. 鲁棒性与成本控制 | v1.6 | 0/6 | Draft | 2026-03-23 |
|
||||
| 14. 鲁棒性与成本控制 | 1/6 | In Progress| | 2026-03-23 |
|
||||
| 15. 输出优化与兼容性 | v1.6 | 0/0 | Not started | - |
|
||||
|
||||
---
|
||||
|
||||
+11
-7
@@ -3,14 +3,14 @@ gsd_state_version: 1.0
|
||||
milestone: v1.4
|
||||
milestone_name: Zhihu Anti-Crawler
|
||||
status: executing
|
||||
stopped_at: Phase 14 context gathered
|
||||
last_updated: "2026-03-23T12:51:30.858Z"
|
||||
stopped_at: Completed 14-03-PLAN.md
|
||||
last_updated: "2026-03-23T14:36:46.811Z"
|
||||
last_activity: 2026-03-22 — Phase 13 Plan 07 completed (SRTProcessor integration)
|
||||
progress:
|
||||
total_phases: 15
|
||||
completed_phases: 11
|
||||
total_plans: 38
|
||||
completed_plans: 37
|
||||
total_plans: 44
|
||||
completed_plans: 38
|
||||
percent: 31
|
||||
---
|
||||
|
||||
@@ -84,6 +84,9 @@ v1.6 Phase 13 decisions (from 13-CONTEXT.md):
|
||||
- [Phase 13]: Strategy Pattern with Protocol interface for extensibility (STRAT-01)
|
||||
- [Phase 13]: Unified segmentation strategy for all video types (per user decision, STRAT-02)
|
||||
- [Phase 13]: Strategy injection via constructor for easy testing and extension (STRAT-03)
|
||||
- [Phase 14-robustness-cost]: 缓存键使用 SHA256 内容哈希,确保相同内容精确匹配
|
||||
- [Phase 14-robustness-cost]: 缓存文件包含 version 字段(1.0),支持未来格式变更
|
||||
- [Phase 14-robustness-cost]: 缓存失败时返回 None,不中断主流程(错误容错)
|
||||
|
||||
### Technical Context
|
||||
|
||||
@@ -132,12 +135,13 @@ None.
|
||||
| 13 | 05 | 2min | 1 | 2 | 2026-03-22 |
|
||||
| 13 | 06 | 12min | 1 | 2 | 2026-03-22 |
|
||||
| 13 | 07 | 4min | 1 | 4 | 2026-03-22 |
|
||||
| Phase 14-robustness-cost P03 | 72 | 1 tasks | 3 files |
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-03-23T12:51:30.856Z
|
||||
Stopped at: Phase 14 context gathered
|
||||
Resume file: .planning/phases/14-robustness-cost/14-CONTEXT.md
|
||||
Last session: 2026-03-23T14:36:46.809Z
|
||||
Stopped at: Completed 14-03-PLAN.md
|
||||
Resume file: None
|
||||
|
||||
**Next step:** Phase 13 complete, continue to Phase 14 (鲁棒性) or Phase 15 (优化)
|
||||
|
||||
|
||||
@@ -0,0 +1,200 @@
|
||||
---
|
||||
phase: 14-robustness-cost
|
||||
plan: 03
|
||||
subsystem: caching
|
||||
tags: [cache, sha256, content-hashing, llm-optimization]
|
||||
|
||||
# Dependency graph
|
||||
requires:
|
||||
- phase: 13-llm
|
||||
provides: SemanticSegmentationEngine, SegmentationResult, VideoSegment
|
||||
provides:
|
||||
- SemanticCache 缓存管理器
|
||||
- compute_content_hash() 内容哈希函数
|
||||
- 缓存目录结构 (.planning/cache/semantic/)
|
||||
affects: [14-04, 14-05, semantic-segmentation]
|
||||
|
||||
# Tech tracking
|
||||
tech-stack:
|
||||
added: [hashlib, json, pathlib]
|
||||
patterns: [content-based-caching, versioned-cache-format, error-tolerant-cache]
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- kb_workflow/srt/cache/semantic_cache.py
|
||||
- kb_workflow/srt/cache/__init__.py
|
||||
- tests/test_semantic_robustness.py
|
||||
modified: []
|
||||
|
||||
key-decisions:
|
||||
- "缓存键使用 SHA256 内容哈希,确保相同内容精确匹配"
|
||||
- "缓存文件包含 version 字段(1.0),支持未来格式变更"
|
||||
- "缓存失败时返回 None,不中断主流程(错误容错)"
|
||||
|
||||
patterns-established:
|
||||
- "Pattern: Content-based caching - 使用内容哈希而非 ID 作为缓存键"
|
||||
- "Pattern: Versioned cache format - 缓存数据包含版本号便于迁移"
|
||||
- "Pattern: Error-tolerant cache - 缓存读写失败时降级,不影响核心功能"
|
||||
|
||||
requirements-completed: [COST-02]
|
||||
|
||||
# Metrics
|
||||
duration: 1min
|
||||
completed: 2026-03-23
|
||||
---
|
||||
|
||||
# Phase 14: 鲁棒性与成本控制 - Plan 03 Summary
|
||||
|
||||
**基于 SHA256 内容哈希的智能缓存系统,避免重复 LLM 调用,降低 API 成本和延迟**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 1 min (72s)
|
||||
- **Started:** 2026-03-23T14:34:58Z
|
||||
- **Completed:** 2026-03-23T14:36:09Z
|
||||
- **Tasks:** 1 (TDD cycle: RED → GREEN)
|
||||
- **Files modified:** 3
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- **SemanticCache 缓存管理器**: 实现完整的读写功能,支持基于内容哈希的缓存
|
||||
- **SHA256 哈希函数**: `compute_content_hash()` 生成 64 字符十六进制缓存键
|
||||
- **版本控制机制**: 缓存文件包含 `version` 字段,支持未来格式变更
|
||||
- **错误容错设计**: 缓存读写失败时返回 None,不中断主流程
|
||||
- **全面测试覆盖**: 11 个测试用例,覆盖缓存命中/未命中、版本控制、错误处理
|
||||
|
||||
## Task Commits
|
||||
|
||||
Each task was committed atomically:
|
||||
|
||||
1. **Task 1: 创建 SemanticCache 缓存管理器** - TDD Cycle
|
||||
- `b6e923c` (test) - 添加失败的测试用例(RED)
|
||||
- `baf7c0f` (feat) - 实现 SemanticCache 使测试通过(GREEN)
|
||||
|
||||
**Plan metadata:** TBD (docs: complete plan)
|
||||
|
||||
_Note: TDD tasks followed RED → GREEN flow. No refactoring needed._
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
### Created
|
||||
|
||||
- `kb_workflow/srt/cache/semantic_cache.py` - 缓存管理器核心实现
|
||||
- `compute_content_hash()`: SHA256 哈希计算
|
||||
- `SemanticCache.get()`: 从缓存读取 SegmentationResult
|
||||
- `SemanticCache.set()`: 保存 SegmentationResult 到缓存
|
||||
- 支持版本控制和错误容错
|
||||
|
||||
- `kb_workflow/srt/cache/__init__.py` - 缓存模块导出
|
||||
- 导出 `SemanticCache` 和 `compute_content_hash`
|
||||
|
||||
- `tests/test_semantic_robustness.py` - 缓存功能测试套件
|
||||
- `TestComputeContentHash`: 测试哈希计算(3 个测试)
|
||||
- `TestSemanticCache`: 测试缓存功能(8 个测试)
|
||||
- 覆盖:缓存命中/未命中、版本控制、错误处理、多缓存项
|
||||
|
||||
### Modified
|
||||
|
||||
None
|
||||
|
||||
## Decisions Made
|
||||
|
||||
所有决策遵守 14-CONTEXT.md 中的用户决策:
|
||||
|
||||
1. **缓存键使用 SHA256 内容哈希**
|
||||
- 理由: 精确匹配,相同内容一定命中缓存
|
||||
- 实现: `hashlib.sha256(content.encode('utf-8')).hexdigest()`
|
||||
|
||||
2. **缓存存储在本地文件系统**
|
||||
- 理由: 简单持久化,无需外部依赖
|
||||
- 路径: `.planning/cache/semantic/`
|
||||
|
||||
3. **缓存 TTL 永久有效**
|
||||
- 理由: 字幕内容不变,分段结果应该一致
|
||||
- 清理: 手动删除缓存文件
|
||||
|
||||
4. **缓存包含完整的 SegmentationResult**
|
||||
- 理由: 包含 video_type 和 segments,完整保存 LLM 输出
|
||||
- 格式: JSON + version 字段
|
||||
|
||||
5. **错误容错设计**
|
||||
- 理由: 缓存失败不应中断主流程
|
||||
- 实现: 读写失败时返回 None,记录 warning 日志
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None - plan executed exactly as written.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None - implementation proceeded smoothly with TDD approach.
|
||||
|
||||
## User Setup Required
|
||||
|
||||
None - no external service configuration required.
|
||||
|
||||
缓存目录会在首次使用时自动创建:`.planning/cache/semantic/`
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
### Ready for Integration
|
||||
|
||||
- ✅ SemanticCache 类已实现并测试
|
||||
- ✅ 缓存模块可以导出到其他组件
|
||||
- ✅ 错误容错机制已就位
|
||||
|
||||
### Integration Points
|
||||
|
||||
计划 14-04 和 14-05 可以将 SemanticCache 集成到 UnifiedSegmentationStrategy:
|
||||
|
||||
```python
|
||||
from kb_workflow.srt.cache import SemanticCache
|
||||
|
||||
class UnifiedSegmentationStrategy:
|
||||
def __init__(self, ...):
|
||||
self.cache = SemanticCache() # 添加缓存层
|
||||
|
||||
def segment(self, segments, metadata):
|
||||
content = " ".join(seg.text for seg in segments)
|
||||
|
||||
# 尝试从缓存读取
|
||||
cached_result = self.cache.get(content)
|
||||
if cached_result:
|
||||
return cached_result.segments
|
||||
|
||||
# 调用 LLM
|
||||
result = self._call_llm(content, metadata)
|
||||
|
||||
# 保存到缓存
|
||||
self.cache.set(content, result)
|
||||
|
||||
return result.segments
|
||||
```
|
||||
|
||||
### Blockers/Concerns
|
||||
|
||||
None.
|
||||
|
||||
## Verification
|
||||
|
||||
所有测试通过:
|
||||
|
||||
```bash
|
||||
pytest tests/test_semantic_robustness.py::TestComputeContentHash \
|
||||
tests/test_semantic_robustness.py::TestSemanticCache -v
|
||||
```
|
||||
|
||||
结果:11 passed in 0.08s
|
||||
|
||||
### Success Criteria Met
|
||||
|
||||
- ✅ 相同内容第二次调用时从缓存读取
|
||||
- ✅ 缓存文件存储在 `.planning/cache/semantic/` 目录
|
||||
- ✅ 缓存文件命名格式: `{sha256_hash}.json`
|
||||
- ✅ 缓存内容包含完整的 SegmentationResult (JSON 格式)
|
||||
- ✅ 缓存命中时记录 debug 级别日志
|
||||
- ✅ 所有测试通过 (11/11)
|
||||
|
||||
---
|
||||
*Phase: 14-robustness-cost*
|
||||
*Completed: 2026-03-23*
|
||||
Reference in New Issue
Block a user