Files
dl-organizer/TMDB_REFACTOR_PLAN.md
T

99 lines
3.9 KiB
Markdown
Raw Normal View History

> [!NOTE]
2026-04-07 11:07:01 +08:00
> Status: Historical snapshot. Current refactor results and validated baseline are tracked in `CHANGELOG.md` (updated 2026-04-07).
# TMDB Enrichment 重构执行计划
## 1. 目标与范围
- 目标:提升 `vlm enrich` 在 TMDB 场景下的正确性、稳定性、可观测性。
- 范围:`src/vlm/providers/tmdb.py``src/vlm/enrichment.py``src/vlm/cli.py`、配置与测试。
- 非目标:不改动 CLI 命令名和现有核心参数,不引入复杂依赖。
## 2. 设计原则
- 简洁优先:保留现有调用链,避免过度抽象。
- 统计真实:`api_calls` 仅统计真实外部请求。
- 错误可解释:区分鉴权、限流、无匹配、服务异常。
- 向后兼容:默认配置缺省时仍可运行,行为可预测。
## 3. 分阶段计划
### 阶段 0:基线确认
- 记录当前测试基线:
- `uv run pytest tests/test_enrichment.py tests/test_cli_enrich.py`
- 记录当前运行基线:
- `uv run vlm enrich --input identities.json --refresh-all`
- 输出基线报告(用于对比重构前后变化)。
### 阶段 1TMDB Provider 重构
- 新增 TMDB HTTP 访问层(可内聚在 provider 文件内):
- 统一请求构建(query/header/timeout)。
- 统一响应解析与错误分类。
- 错误分类与策略:
- `401/403`:鉴权失败,停止该条 provider 请求并记录原因。
- `404`:资源缺失,返回无匹配。
- `429`:指数退避重试(含上限)。
- `5xx`:有限重试,最终记录失败。
- 保留最小调用路径:`search -> details`
### 阶段 2Enrichment 统计与语义修复
- 统一并明确统计口径:
- `api_calls`:真实发起的远程请求次数。
- `enriched`:获得有效 provider 或翻译结果的记录数。
- `skipped`:未产生 enrich 结果的记录数。
- 增加 skip/reason 聚合(建议键):
- `no_key``no_match``rate_limited``provider_error``invalid_input`
- 保持 `needs_review` 判定逻辑稳定且可解释。
### 阶段 3:CLI 进度与结果展示
- TTY:保留 `click.progressbar`
- 非 TTY:保留分段文本进度(每 5% 或固定步进)。
- 结束摘要补充原因分布:
- 示例:`Skip reasons: no_key=4632 no_match=0 provider_error=0`
### 阶段 4:配置与文档
- 配置补全(默认模板):
- `enrichment.api_keys.tmdb`
- `enrichment.tmdb.language`(默认 `zh-CN`
- `enrichment.tmdb.region`(可选)
- `enrichment.tmdb.include_adult`(默认 `false`
- README 增加:
- key 配置示例。
- 常见错误排查(401/429/0 enriched)。
- 小样本验证流程。
### 阶段 5:测试与回归
- Provider 测试:
- 鉴权失败、限流重试、5xx 重试、无匹配。
- Enrichment 测试:
- 统计口径、skip reason 聚合、无 key 场景。
- CLI 测试:
- 非 TTY 进度输出、摘要 reason 输出。
- 回归测试:
- `uv run pytest` 全量通过。
## 4. 任务拆解(执行顺序)
1. Task A:实现 TMDB 请求层与错误分类。`[已完成]`
2. Task B:重构 `TMDBProvider.enrich()` 以接入请求层。`[已完成]`
3. Task C:重构 enrichment 统计与 reason 聚合。`[已完成]`
4. Task D:更新 CLI 输出(进度与摘要)。`[已完成]`
5. Task E:补全配置模型与默认配置导出。`[已完成]`
6. Task F:补充/修复测试并回归。`[已完成]`
7. Task G:更新 README 与变更说明。`[待执行]`
## 5. 验收标准
- 功能:
- 有 key 时可正常 enrich,统计准确。
- 无 key 时不误报 `api_calls`,输出原因可解释。
- 质量:
- 新增测试覆盖关键分支,相关测试通过。
- 无破坏性 CLI 变更,现有命令仍可用。
- 体验:
- 非 TTY 场景有清晰进度和失败原因摘要。
## 6. 执行记录模板
每个 Task 完成后记录以下内容:
- 变更文件:
- 关键改动:
- 测试命令:
- 测试结果:
- 风险与后续: