Files
meida/docs/Sprint执行计划.md

21 KiB
Raw Permalink Blame History

「美搭」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 🔴 腾讯云基础设施开通 已按《前置开通清单》v2 降级路线收缩:腾讯云全家桶暂缓,仅剩华为 AGC(§1)+ 发信邮箱授权码(§2) 华为调试证书可拉起授权页;测试邮箱能收到验证码
T-P1-05 密钥改由 SSM/KMS 注入 镜像与代码中无任何密钥;APP_ENV=prod 时占位密钥直接拒绝启动(已实现,需接 SSM)
T-P1-27 图片直传预签名 已按 E2 变更为本地磁盘并交付:POST /storage/upload 后端中转 + HMAC 签名下载 URL + temp 目录 2 小时清理(celery beat);COS 预签名链路保留为回迁路径 上传下载闭环;2 小时自动清理可观察
T-P1-11/12/13 用户模型、华为账号登录、双令牌会话 UnionID 映射唯一;登出后旧令牌立即失效
T-P1-12b/12c 🔴 短信登录 邮箱登录(E1 变更,代码已交付)+ 三重频控防刷 断开华为依赖后本通道仍可登录;脚本化刷量测试证明拦截有效;待 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 出口条件

  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% 换方案(引入关键点比例法或第三方)。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 单张耗时可接受 上 GPU 或降采样 ✅ 2026-08-14 SPIKE 通过:rtmpose-s 全链路 2.8ms/张(P95 3.3ms),rtmpose-m 5.9ms——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-23 Schema 定稿 + 顾问到岗。 本 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-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 倍于旧输出价 优先做缓存前缀纪律与输出长度约束;必要时把报告文案改到空闲时段生成
短信被刷 发送量突增告警 三重频控 + 人机校验;短信是唯一没有配额兜底的直接现金损失

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)