21 KiB
「美搭」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 建 8 张表(id_user / id_user_identity / id_consent / bl_quota_rule / bl_quota / bl_ledger / tk_task / ob_ai_call)并创建 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 超时自动退还;任务奖励 claim 已并入(POST /quota/tasks/{task_key}/claim,幂等 40910 + 封顶 40310);周期重置靠 period_key 自然滚动(无后台任务=设计如此,非缺口) |
T-P1-25b 四档熔断 |
✅(阈值待重算) | 60/80/90/100% 四档降级 + critical 豁免 + Redis 手动 override + Prometheus 指标;"被拒请求配额净扣减 = 0"有集成断言;⚠️ LLM_DAILY_BUDGET_CENTS=100000 仍是旧价占位,8-17 后按实测重算 |
T-P1-13 双令牌会话 |
✅ | refresh 一次性轮换(FOR UPDATE 行锁)+ 服务端撤销 + 重放检测告警;dev-token 向后兼容 |
T-P1-10 埋点通道(服务端) |
✅ | POST /events/batch fail-close 整批校验 + PII 剔除;事件字典校验待 TD-23 定稿后收紧 |
T-P1-27 直传预签名 |
✅(联调待 COS)→ E2 变更后由本地存储替代 | 原三重校验 + 可审计 key 布局保留;现行路径 POST /storage/upload 后端中转 + 签名下载 + temp 2h 清理(celery beat),COS 链路降为回迁保留 |
T-P1-12 华为账号登录(代码) |
✅(联调待 AGC) | OIDC JWKS 验签(kid 轮换、alg 锁定、audience 空配置拒绝)+ UnionID 映射;自造密钥全测,19 单测 |
T-P1-12b/12c 邮箱登录(代码) |
✅(发送待 SMTP 授权码) | 2026-08-15 需求变更:短信→邮箱(E1)并已交付——email_login.py 验证码哈希存储/一次性/5 次作废 + 三重频控(脚本化刷量 11 次断言拦截)+ 掩码纪律;fake/smtp 双通道可切(QQ/163 授权码),旧短信通道代码已移除 |
1.2 本 Sprint 待补(BE)
| 任务 | 内容 | 验收标准 |
|---|---|---|
T-P1-04 🔴 |
华为调试证书可拉起授权页;测试邮箱能收到验证码 | |
T-P1-05 |
密钥改由 SSM/KMS 注入 | 镜像与代码中无任何密钥;APP_ENV=prod 时占位密钥直接拒绝启动(已实现,需接 SSM) |
T-P1-27 |
POST /storage/upload 后端中转 + HMAC 签名下载 URL + temp 目录 2 小时清理(celery beat);COS 预签名链路保留为回迁路径 |
上传下载闭环;2 小时自动清理可观察 |
T-P1-11/12/13 |
用户模型、华为账号登录、双令牌会话 | UnionID 映射唯一;登出后旧令牌立即失效 |
T-P1-12b/12c 🔴 |
断开华为依赖后本通道仍可登录;脚本化刷量测试证明拦截有效;待 SMTP 授权码落位后真实发信验证 | |
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 出口条件
- 端到端
make smoke在接入真实 COS 与短信通道后仍全绿 make check(lint + typecheck + imports + test + secrets)零告警- 腾讯云环境清单归档,四桶生命周期实测通过
- 两条登录通道互不依赖,各自单独可用
2. Sprint 1:验证门槛闯关(ALG 主导,与 Sprint 0 并行)
这个 Sprint 的产出是结论与数据,不是功能。 结论不达标就换方案,不要带着不达标的模块往下走 —— 报告的可信度是产品的根,根不稳后面全是返工。
| 任务 | 轨道 | 验证门槛(Phase 0 档,非上线档) |
不达标的处置 |
|---|---|---|---|
T-P0-10 🔴 |
ALG | 体型测算与人工标注一致率 ≥ 80% | 换方案(引入关键点比例法或第三方)。2026-08-14 SPIKE(scripts/spikes/REPORT.md):原型通过——合成图 6/6 体型变体(H/A/V/O/X+中性)分类正确,测宽与真值偏差 ±1px;正式 ≥80% 一致率需顾问轨 ≥100 体标注。⚠️ RTMPose 在合成剪影上置信度极低(0.003,域差异)——真实照片重验是本项的前置 |
T-P0-11 🔴 |
ALG | 色彩季型一致率 ≥ 75% | 降级为「色彩倾向」而非「季型结论」 |
T-P0-12 |
ALG | BiRefNet 抠图质检通过 ≥ 90% | 调参或改用商业抠图 API。SPIKE 初步:有条件通过——管线与代理指标全绿(前景占比 0.244 / 连通域 1.0 / 羽化 ~1px);⚠️ CPU 单张 3.1s,同步接口不可接受,需异步化(走任务中心);≥90% 质检率必须真实素材验证 |
T-P0-13 |
BE | 换装单次 gpu_seconds 与成功率基线 |
数据直接填入成本模型,并按 §1.3 的新单价重算 |
T-P0-14 |
BE | 发型接口可用性与耗时基线 | — |
T-P0-16 |
ALG | RTMPose ONNX CPU 单张耗时可接受 | |
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-23Schema 定稿 + 顾问到岗。 本 Sprint 的成败标志不是代码,而是「顾问能不能不找工程就把内容录进去」。
| 任务 | 轨道 | 验收标准 |
|---|---|---|
T-P2-01 |
BE | ✅ 2026-08-14:12 类实体 CRUD + 状态机(16 组跃迁全覆盖)+ kb_asset(tryon_ready 标志 + partial 索引) |
T-P2-02 |
BE | ✅ 2026-08-14:规则引擎 p95 0.412ms(400 条规则,预算 50ms 的 1/120);硬约束 hard_blocks + 用户禁忌压过专业推荐,黄金集 11 组固化 |
T-P2-03 |
BE | ✅(接口位):EmbeddingProvider 可插拔 + embedding_model/version 随行写入(可重跑判据);当前为确定性假实现,真实 BGE-M3 ONNX 待接入 |
T-P2-04 🔴 |
BE | ✅ 2026-08-14:硬过滤→向量→关键词→RRF 重排;硬过滤零漏有红线用例(禁忌实体向量距离 0 仍零出现 + 对照组);顺带修复 jsonb NULL 语义真 bug |
T-P2-05 |
BE | ✅ 2026-08-14:递归 CTE 1~3 跳可解释路径(path 数组防环) |
T-P2-07 |
ALG | 抠图批处理 + 白底规格校验拦截不合格图(SPIKE 代理指标已就绪,批处理待素材) |
T-P2-08 |
ALG | 属性预标注准确率 ≥ 70%,人工可修正 |
T-P2-09 🔴 |
BE | 顾问可独立完成内容维护、审核、发布与回滚,全程无工程介入(极简后台,第三批开发中) |
T-P2-10 |
BE | 发布后检索缓存自然失效(第三批开发中) |
T-P2-11 🔴 |
BE | 黄金集框架接入 CI,指标退化即阻断合并(第三批开发中) |
T-P2-06 |
BE | ✅ 2026-08-14:无结果 query 落 kb_gap(同 query+filter 聚合 hit_count),列表/排序接口随后台交付 |
内容轨(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-bAgent 必须等 Sprint 2 检索 + Sprint 3 画像,是真正的关键路径。
M4-a(可提前):T-P4-01~ 换装服务纳管改造(TD-00)、发型打标与推荐、素材联调。
M4-b(关键路径):意图识别(验证 85% / 上线 90% 两档)、多轮上下文、画像注入、
生成后校验、越界拒答、SSE 流式。
本 Sprint 的两条硬红线:
- 不得编造天气数值(
TD-33)。V1 不接天气 API,只能反问用户或按城市+月份推断气候区 —— 模型幻觉出一个温度,用户第二天就会发现。 - 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 倍于旧输出价 | 优先做缓存前缀纪律与输出长度约束;必要时把报告文案改到空闲时段生成 |
| 短信被刷 | 发送量突增告警 | 三重频控 + 人机校验;短信是唯一没有配额兜底的直接现金损失 |
9. 多 Agent 并行开发交付记录(2026-08-14)
两批共 11 个任务(T1~T11)以「协调提交消除共享文件冲突面 + 每 task 独立 worktree/分支 + 逐分支合并跑全量门禁」的方式并行交付。零合并冲突;任务契约与协作规程见 开发任务包/。
| 批次 | 任务 → WBS 映射 | 单测增量 | 集成增量 |
|---|---|---|---|
| 第一批(5 任务) | T1 四档熔断→T-P1-25b;T2 任务奖励→T-P1-26 收尾;T3 埋点→T-P1-10;T4 刷新令牌→T-P1-13;T5 直传预签名→T-P1-27 |
+69 | +12 |
| 第二批(6 任务) | T6 实体图谱→T-P2-01/05;T7 规则引擎→T-P2-02;T8 混合检索→T-P2-03/04/06;T9 视觉 SPIKE→T-P0-10/12/16(结论已回写 §2);T10 华为登录→T-P1-12;T11 短信登录→T-P1-12b/12c |
+235 | +22 |
| 累计 | 单测 169→473,集成 3→38 |
待联调清单(代码就绪、等外部凭证):华为登录(AGC 配置)、短信真实发送(签名审核)、COS 直传(四桶创建)——对应《前置开通清单》。
遗留提醒:8-17 峰谷新价生效后重算 LLM_DAILY_BUDGET_CENTS 与四档阈值;RTMPose 真实照片重验;BiRefNet CPU 3.1s/张需异步化接入任务中心。
文档版本:v1.2
创建日期:2026-08-13
最后更新:2026-08-16
状态:待评审
2026-08-16 变更(对应《前置开通清单》v2 个人开发者降级路线):T-P1-12b/12c
短信登录→邮箱验证码登录(E1,代码已交付,待 SMTP 授权码);T-P1-27 COS 直传→
本地磁盘存储(E2,已交付:multipart 上传 + HMAC 签名下载 + temp 2h 清理挂 celery beat);
T-P1-04 腾讯云全家桶收缩为华为 AGC + 发信邮箱两件事。
关联文档:《开发任务拆解》(任务定义与依赖)、《需求规格说明》(验收指标唯一事实源)、
《技术架构文档》(token 预算与成本模型)、《技术选型与调研报告》(TD-00~TD-33)