Files
meida/docs/Sprint执行计划.md
T
xslandCursor f4075f6827 收口文档评审冲突并补齐 Sprint 执行计划
统一性能、token、配额与成本口径,补齐短信登录等缺口任务,并回写脚手架实测暴露的思考模式与峰谷计价约束。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-14 09:40:50 +08:00

235 lines
16 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.
# 「美搭」Sprint 执行计划
> 版本:**v1.0** | 创建日期:2026-08-13 | 状态:待评审
>
> **本文与《开发任务拆解》的分工**:WBS 回答「一共有哪些任务、谁依赖谁」,本文回答**「下一步做什么、做完怎么算过、谁在这个 Sprint 里没被阻塞」**。
> 任务编号沿用 WBS 的 `T-P<阶段>-<序号>`,本文不新造编号,只做排期与状态标注。
>
> **排期原则**:Sprint 按**依赖就绪**切分,不按固定天数。一个 Sprint 的出口条件全绿才开下一个;
> 但**内容生产轨(顾问 + 自采)从 Sprint 0 起持续跑**,永不等待工程轨 —— 它是关键路径。
**状态图例**:✅ 已完成 🟡 部分完成(括号内为剩余) ⬜ 未开始 🔴 关键路径
---
## 0. 团队轨道划分
4~6 人的实际约束是:**同一时间最多四条轨并行**,且算法与内容两轨的产能不能靠 AI 加速。
| 轨道 | 角色 | 本项目里的特点 |
| --- | --- | --- |
| **BE** 后端 | 后端 + AI 辅助 | 地基与业务逻辑,可被 AI 显著加速 |
| **FE** 端侧 | 鸿蒙 ArkTS | 受 `T-P0-17` 骨架验证结论约束,不能提前铺量 |
| **ALG** 算法 | 算法 | 体型/色彩/脸型三项验证是硬门槛,**结论不达标要换方案而不是硬做** |
| **CONT** 内容 | 全职形象顾问 + 产品 | **产能决定上线时间**,见 §6 |
---
## 1. Sprint 0:地基已落地部分的验收与补齐
> **本 Sprint 的特殊性**:工程地基的骨架已经在 `meida_backend` 仓库落地并跑通了一条真实纵向切片
> (取 token → 预扣配额 → 真实调用 DeepSeek → 记成本 → 提交配额),
> 因此 Sprint 0 的重点不是「从零搭」,而是**验收既有部分 + 补齐缺口**。
### 1.1 已交付(`meida_backend`,实测通过)
| 任务 | 状态 | 实测证据 |
| --- | --- | --- |
| `T-P1-01` 仓库结构与包边界 | ✅ | `apps / packages / services` 三层;**四条 import-linter 契约全绿**,`packages/domain` 禁 framework 与 IO 由机器强制 |
| `T-P1-02` CI 流水线 | ✅ | ruff + mypy(domain/llm 为 strict) + pytest + lint-imports + detect-secrets + gitleaks + **迁移 upgrade→downgrade→upgrade 往返** 六道防线 |
| `T-P1-03` 本地开发环境 | 🟡(缺 COS mock) | `make up` 起 pgvector + Redis,端口 55432/56379 避冲突;`make install` 一条命令装齐 |
| `T-P1-06` Alembic 基线 | ✅ | `0001` 建 9 张表并创建 `vector` 扩展;正反向往返实测通过 |
| `T-P1-07` 统一响应与错误码 | ✅ | `code/message/data/request_id` 信封;每个错误码有文案,且**配额文案经测试断言不含价格字样** |
| `T-P1-08` 可观测性 | 🟡(缺 CLS 与看板) | structlog JSON + request_id 贯穿;**日志脱敏有专项测试**(手机号/令牌/密钥/诊断结论);Prometheus 指标就绪,OTel 留开关 |
| `T-P1-19` 任务中心 | 🟡(仅骨架任务) | `tk_task` + 状态机(非法跃迁有测试)+ 幂等键;`POST /tasks/ping`、`GET /tasks/{id}`、列表可用 |
| `T-P1-24` **LLM 网关** | ✅ | 场景路由、主备故障转移、熔断器、结构化输出重试、Prompt 版本、成本归因,共 28 个单测 |
| `T-P1-25` 成本归因表 | ✅ | `ob_ai_call` 每次调用(含失败)落一行;实测行:`tokens_in=240 / cached=128 / cost_cents=0.10744` |
| `T-P1-26` 配额账本 | 🟡(缺周期重置与后台) | 预扣三段式 + `bl_ledger` 幂等;实测 DeepSeek 超时时**自动退还**、成功时 `committed` |
### 1.2 本 Sprint 待补(BE)
| 任务 | 内容 | 验收标准 |
| --- | --- | --- |
| `T-P1-04` 🔴 | 腾讯云基础设施开通(VPC/CVM/PG/Redis/COS 四桶/CDN/CLS) | 四桶权限与生命周期策略生效;**临时桶 2 小时清理实测**(`CR-02`) |
| `T-P1-05` | 密钥改由 SSM/KMS 注入 | 镜像与代码中无任何密钥;`APP_ENV=prod` 时占位密钥直接拒绝启动(已实现,需接 SSM) |
| `T-P1-27` | 图片直传预签名 URL + 临时桶生命周期 | 图片不经应用服务器;2 小时自动清理 |
| `T-P1-11`/`12`/`13` | 用户模型、华为账号登录、双令牌会话 | UnionID 映射唯一;登出后旧令牌立即失效 |
| `T-P1-12b`/`12c` 🔴 | 短信登录 + 三重频控防刷 | **断开华为依赖后本通道仍可登录**;脚本化刷量测试证明拦截有效 |
| `T-P1-25b` | 日成本熔断补齐四档降级与后台开关 | 注入成本可复现四档;**被拒请求配额净扣减 = 0**;在途任务放行 |
| `T-P1-09`/`10` | 三张看板 + 埋点事件字典 | 能回答架构 §15 的三个问题 |
### 1.3 本 Sprint 新增(工程实测暴露的两项,原 WBS 未覆盖)
| 任务 | 类型 | 内容 | 为什么必须单独立项 |
| --- | --- | --- | --- |
| **`T-P1-24a`** | DEV | **思考模式按场景显式配置** | `deepseek-v4-flash` **默认开启思考模式**。实测同一个单句问答:开启 13.5s、关闭 1.8s,且思考 token 按输出价计费。漏配会同时打破 `NFR-PERF-02b`(整轮 15s)与成本模型。已实现:四个场景全部显式关闭,可按场景改配置打开,并单独记 `tokens_reasoning` |
| **`T-P1-25c`** | DEV | **峰谷单价按调用时刻计价** | DeepSeek 自 **2026-08-17 00:00** 起峰谷定价,高峰(北京时间 09:00-12:00、14:00-18:00)单价是空闲时段的 **2 倍**。报告生成多发生在白天高峰,用单一均价记账会让成本与账单差出近一倍 —— 而 `ob_ai_call` 是 V2 定价的唯一依据。已实现:两套价目表 + 按时刻选择 |
> **`T-P1-25c` 对成本模型的直接影响**:`NFR-COST` 的预算与熔断阈值是按旧单价(输入 ¥1 / 输出 ¥2 每百万 token)推算的。
> 8-17 之后空闲档为 ¥1.5/¥4.5、高峰档为 ¥3/¥9,**输出侧涨 2.25~4.5 倍**。
> 上线前必须用实测 token 分布重算一次日预算,否则熔断阈值会在错误的位置触发。
### 1.4 出口条件
1. 端到端 `make smoke` 在**接入真实 COS 与短信通道后**仍全绿
2. `make check`(lint + typecheck + imports + test + secrets)零告警
3. 腾讯云环境清单归档,四桶生命周期实测通过
4. 两条登录通道**互不依赖**,各自单独可用
---
## 2. Sprint 1:验证门槛闯关(ALG 主导,与 Sprint 0 并行)
> **这个 Sprint 的产出是结论与数据,不是功能。** 结论不达标就换方案,不要带着不达标的模块往下走 ——
> 报告的可信度是产品的根,根不稳后面全是返工。
| 任务 | 轨道 | 验证门槛(`Phase 0` 档,非上线档) | 不达标的处置 |
| --- | --- | --- | --- |
| `T-P0-10` 🔴 | ALG | 体型测算与人工标注一致率 **≥ 80%** | 换方案(引入关键点比例法或第三方) |
| `T-P0-11` 🔴 | ALG | 色彩季型一致率 **≥ 75%** | 降级为「色彩倾向」而非「季型结论」 |
| `T-P0-12` | ALG | BiRefNet 抠图质检通过 **≥ 90%** | 调参或改用商业抠图 API |
| `T-P0-13` | BE | 换装单次 `gpu_seconds` 与成功率基线 | 数据直接填入成本模型,**并按 §1.3 的新单价重算** |
| `T-P0-14` | BE | 发型接口可用性与耗时基线 | — |
| `T-P0-16` | ALG | RTMPose ONNX CPU 单张耗时可接受 | 上 GPU 或降采样 |
| `T-P0-17` 🔴 | FE | 鸿蒙骨架打通登录/拍照/直传/轮询/展示 | **结论决定 FE 能否铺量**,不通则先解决工程链路 |
| `T-P0-18` | BE | AI 标识元数据经水印/COS/CDN/保存后仍存活 | 改用不可剥离的显式水印 |
| `T-P0-19` | BE | LLM 缓存命中率与成本降幅 | 已有初步实测:固定前缀命中 128/240 输入 token |
**并行的合规轨(BIZ,不占用开发产能)**:`T-P0-01` 核实备案模型清单是否覆盖 DeepSeek + 智谱两家 🔴、
`T-P0-02` 合规档案归集、`T-P0-05` 三份协议文案、`T-P0-06` PIA、`T-P0-07` 词库与制度。
> `T-P0-01` 之所以标红:**备案只含一家而线上跑两家,是上架核验的直接失败项。** 网关虽已实现主备路由,
> 但若备案未覆盖智谱,V1 就必须配成单路由 —— 这会改变故障转移的前提,越早知道越好。
**出口条件**:六项技术验证全部有明确结论(含「不达标 → 换方案」的决定),
`T-P0-01` 有书面结论,`T-P0-17` 骨架 Demo 可运行。
---
## 3. Sprint 2:知识库可运营(M2)
> **依赖**:Sprint 0 出口 + `T-P0-23` Schema 定稿 + 顾问到岗。
> **本 Sprint 的成败标志不是代码,而是「顾问能不能不找工程就把内容录进去」。**
| 任务 | 轨道 | 验收标准 |
| --- | --- | --- |
| `T-P2-01` | BE | 12 类实体可存取;`tryon_ready` 标志可用 |
| `T-P2-02` | BE | 规则求值 p95 < 50ms;**硬约束可拦截** |
| `T-P2-03` | BE | BGE-M3 向量化可重跑,模型版本可切换 |
| `T-P2-04` 🔴 | BE | 检索 p95 < 200ms;**硬过滤零漏** |
| `T-P2-05` | BE | 1~3 跳返回可解释路径 |
| `T-P2-07` | ALG | 抠图批处理 + 白底规格校验拦截不合格图 |
| `T-P2-08` | ALG | 属性预标注准确率 ≥ 70%,人工可修正 |
| `T-P2-09` 🔴 | BE | **顾问可独立完成内容维护、审核、发布与回滚,全程无工程介入** |
| `T-P2-10` | BE | 发布后检索缓存自然失效 |
| `T-P2-11` 🔴 | BE | 黄金集框架接入 CI,**指标退化即阻断合并** |
| `T-P2-06` | BE | 无结果 query 全量记录并可排序 |
**内容轨(CONT,本 Sprint 的真实瓶颈)**:`T-P2-12` 色板、`T-P2-13` 规则库冷启动(**V1 硬指标 400 条**)、
`T-P2-14` 实体录入、`T-P2-15` 单品 300 件 `tryon_ready`、`T-P2-16` 黄金集标注(**四个子集共 330 例**)。
**出口条件**:知识库达到《美学知识库-建设方案》§9.1 的 **V1 硬指标**(规则 400 / 单品 300 / 方案 100),
黄金集四子集就位并在 CI 里生效,后台可由顾问独立操作。
---
## 4. Sprint 3:报告闭环(M3)
> **依赖**:Sprint 1 的三项算法结论 + Sprint 2 的规则与检索。
| 任务 | 轨道 | 验收标准 |
| --- | --- | --- |
| `T-P3-01` | ALG | 各项返回置信度与质量标记 |
| `T-P3-02` | ALG | 图片质量门禁拦截准确率 ≥ 85%,**给出具体重拍指引**(不是「照片不合格」) |
| `T-P3-03`/`04`/`05` | ALG | 达到 Sprint 1 的验证基线 |
| `T-P3-06` 🔴 | BE | **32 维度**每维四要素(值/置信度/依据/规则命中)完整,缺失显式标注 |
| `T-P3-07` | BE | 触发与频控符合需求文档 §3;配额生效 |
| `T-P3-08` | FE | 问卷完成率 ≥ 80%,可跳过不阻断 |
| `T-P3-09` 🔴 | BE | **LLM 或渲染失败不需重新上传照片**(中间态落库 + 分步恢复) |
| `T-P3-10` | BE | 文案结论与诊断值一致,无自相矛盾 |
| `T-P3-11` 🔴 | BE | 黄金集**硬性禁忌违反数 = 0**;贬损词零通过 |
| `T-P3-12` | BE | 长图渲染 p95 < 8s,跨设备一致 |
| `T-P3-21` | BE+FE | **结论认同/修正入口** —— 「认同率 > 70%、修正率 < 15%」的唯一数据来源 |
| `T-P3-22` | BE+FE | **全面报告预约留资** —— V1 唯一的商业化验证数据来源 |
> `T-P3-21`/`T-P3-22` 是本轮评审补的两项。**缺了它们,V1 会白跑一遍**:
> 前者缺失就无法判断报告质量指标是否达标,后者缺失就拿不到 V2 定价所需的需求信号。
**出口条件**:用户可完整走通初级报告并产出画像与记忆;
初级报告 P95 < 90s(`NFR-PERF-03`);诊断准确率达到**上线质量门槛**(体型 85% / 季型 80%)。
---
## 5. Sprint 4:Agent 与换装(M4)
> **可并行度是本 Sprint 的关键**:`M4-a` 换装/发型只依赖 Sprint 0 与素材入库,**可与 Sprint 3 并行启动**;
> `M4-b` Agent 必须等 Sprint 2 检索 + Sprint 3 画像,**是真正的关键路径**。
**M4-a(可提前)**:`T-P4-01`~ 换装服务纳管改造(`TD-00`)、发型打标与推荐、素材联调。
**M4-b(关键路径)**:意图识别(验证 85% / 上线 90% 两档)、多轮上下文、画像注入、
生成后校验、越界拒答、SSE 流式。
**本 Sprint 的两条硬红线**:
1. **不得编造天气数值**(`TD-33`)。V1 不接天气 API,只能反问用户或按城市+月份推断气候区 ——
模型幻觉出一个温度,用户第二天就会发现。
2. **token 预算按架构 §7.2 执行**(注入 ≤ 1400,总输入 ≤ 4200)。超预算不是「效果更好」,
是成本线性上涨且缓存命中率下降。
**出口条件**:报告 + Agent + 换装/发型三者可用且互相联动;Agent 整轮 P95 < 15s(`NFR-PERF-02b`)。
---
## 6. 持续轨:内容生产(贯穿全程,**关键路径**)
> 关键路径已从「备案审批」转移到「内容产能」。这条轨的特点是 **不能靠 AI 加速,只能靠产能倒排**。
| 任务 | 何时启动 | 产出 |
| --- | --- | --- |
| `T-P0-20` 🔴 | **立刻,全项目最优先** | 全职顾问到岗 + 规则库产能基线(条/周) |
| `T-P0-21` 🔴 | **立刻** | 自采流水线跑通 + 首批 20 件 + 每周产能数据 |
| `T-P0-22`/`23`/`25` | 顾问到岗后 | 拍摄 SOP、本体 Schema、32 维字典与规则矩阵框架 |
| `T-P0-24` | 与 Sprint 1 并行 | 60 款发型适配标签打标 |
| `T-P0-26` | 与 Sprint 1 并行 | ≥ 15 人用户访谈(**V1 不展示价格,价格敏感度只能靠访谈采集**) |
| `T-P0-28` | 采购开始前 | 素材版权留档机制(`license=self_shot`) |
**倒排方法**:拿到 `T-P0-20`/`T-P0-21` 的周产能后,用「V1 硬指标 ÷ 周产能」推出 M2 出口日期,
再据此反推整体上线时间。**在拿到产能数据之前,任何上线日期承诺都没有依据。**
---
## 7. Sprint 5:上线就绪(M5)
`T-P5-*` 全量执行,其中最容易被漏的四项:
| 任务 | 为什么容易漏 |
| --- | --- |
| `T-P0-03`/`04` | 备案编号公示位必须**发布包实机验证**,且展示的模型名与网关实际路由**同源校验** |
| `T-P5-18` | CLS 日志留存 ≥ 6 个月(`CR-11`)是法定义务,原 WBS 无人认领 |
| `T-P5-19` | 熔断四档演练 —— 熔断逻辑没演练过等于没有 |
| `T-P5-17` | 会员页静态展示 + 「上线提醒我」留资,为 V2 蓄客 |
**出口条件**:合规检查清单全绿、压测通过(容量基线见架构 §12.2)、
监控齐备、备案编号公示实机验证通过、V1 可用性 ≥ 99.5%(`NFR-REL-01`,单可用区部署的现实取值)。
---
## 8. 风险与应对
| 风险 | 触发信号 | 应对 |
| --- | --- | --- |
| **内容产能不足** | 周产能低于「硬指标 ÷ 可接受周数」 | 增加拍摄棚时或外采白底图;**不要降低 `tryon_ready` 质检标准** |
| **算法门槛不达标** | `T-P0-10`/`11` 一致率低于验证门槛 | 该维度降级为「仅供参考」或不展示,**不要延期整个产品** |
| **备案未覆盖两家模型** | `T-P0-01` 结论为单家 | V1 配单路由,故障转移改为降级重试;同步办变更 |
| **成本超预算** | 日成本达预算 70% | 四档熔断自动降级;同时按 §1.3 用实测分布重算阈值 |
| **8-17 涨价冲击** | 空闲/高峰单价 2.25~4.5 倍于旧输出价 | 优先做缓存前缀纪律与输出长度约束;必要时把报告文案改到空闲时段生成 |
| **短信被刷** | 发送量突增告警 | 三重频控 + 人机校验;**短信是唯一没有配额兜底的直接现金损失** |
---
**文档版本**:v1.0
**创建日期**:2026-08-13
**状态**:待评审
**关联文档**:《开发任务拆解》(任务定义与依赖)、《需求规格说明》(验收指标唯一事实源)、
《技术架构文档》(token 预算与成本模型)、《技术选型与调研报告》(`TD-00`~`TD-33`)