# DreamWeaver 工程鲁棒性改进计划 ## 概述 本计划旨在提升 DreamWeaver 项目的工程质量,包括测试覆盖、稳定性、可观测性等方面。 ## 任务列表 ### P0 - 关键问题修复 #### Task-1: 修复 Rate Limit 内存泄漏 - **文件**: `backend/app/api/stories.py` - **问题**: `_request_log` 全局字典无清理机制,长期运行内存无限增长 - **方案**: 添加 TTL 自动清理机制,使用 `cachetools.TTLCache` - **测试**: 验证过期条目自动清理 #### Task-2: 添加核心 API 测试 - **文件**: `backend/tests/` (新建) - **范围**: - `test_auth.py`: OAuth 流程、session 验证 - `test_stories.py`: 故事 CRUD、rate limit - **目标**: 核心路径覆盖率 ≥80% ### P1 - 稳定性提升 #### Task-3: 添加 API 重试机制 - **文件**: `backend/app/services/gemini.py`, `minimax.py`, `drawing.py` - **方案**: 使用 `tenacity` 库,指数退避重试 - **配置**: 最多 3 次重试,初始间隔 1s #### Task-4: 添加结构化日志 - **文件**: `backend/app/core/logging.py` (新建), 各 service 文件 - **方案**: 使用 `structlog`,JSON 格式输出 - **埋点**: API 调用、错误、性能指标 ### P2 - 代码优化 #### Task-5: 重构 Provider Router - **文件**: `backend/app/services/provider_router.py` - **问题**: 三个函数重复代码 - **方案**: 抽象通用 failover 函数 #### Task-6: 配置外部化 - **文件**: `backend/app/core/config.py`, `backend/app/services/gemini.py` - **问题**: 模型名硬编码 - **方案**: 移至环境变量配置 #### Task-7: 修复脆弱的 URL 解析 - **文件**: `backend/app/services/drawing.py` - **问题**: 字符串切片解析 URL 不可靠 - **方案**: 使用正则表达式 ## 依赖关系 ``` Task-1 (独立) Task-2 (独立,但需要 Task-1 完成后验证) Task-3 (独立) Task-4 (独立) Task-5 (独立) Task-6 (独立) Task-7 (独立) ``` ## 新增依赖 ```toml # pyproject.toml [project.dependencies] cachetools>=5.0.0 # Task-1: TTL cache tenacity>=8.0.0 # Task-3: 重试机制 structlog>=24.0.0 # Task-4: 结构化日志 # [project.optional-dependencies.dev] pytest-cov>=4.0.0 # Task-2: 覆盖率报告 httpx[http2] # Task-2: 测试 mock