Step 4 · Batch B · High-fidelity Wireframe

奇遇笔记 · 批次 B 全景文档

今日 Tab + 日复盘(核心仪式)+ 守望(差异化壁垒)+ prompts_v5 全套契约。这是产品最高频的体验主线 —— 用户每天 10 分钟的陪伴消费 + 关注议题的克制告警。
v0.3 全景版:增加战略背景、prompt 架构、契约说明、前端路由、迁移灰度,给团队和开发同学一份一站式参考。

批次 B · 核心仪式 + 差异化 v 版本 v0.3 全景文档 NSM 日复盘完成率(不是开启率) 核心原则 不打分 · 不催促 · 不焦虑 受众 产品 / 设计 / 算法 / 前端 / 后端

目录 · Table of Contents

  1. §0 战略与背景 · 一句话定位 / v4→v5 落差 / 上游决策
  2. §1 今日 Tab + 日复盘 · 三态 Home / 日复盘流 / Mode 三态映射
  3. §2 守望 (Watchful) · 议题列表 / 添加流程 / 命中详情
  4. §3 prompts_v5 架构 · 双层调度 / 数据流 / prompt 树
  5. §4 8 个 Prompt 契约 · 输入/输出 schema / 强约束清单
  6. §5 前端路由 + 渲染规则 · msg_type → UI 组件 / cards 映射
  7. §6 v4→v5 迁移与灰度 · 双写期 / 灰度计划 / 弃用清单
  8. §7 待决议项 · 已落锤 / 仍需拍板

0战略与背景

这一节给团队成员先建立全局认知 —— 我们为什么改、改成什么样、产品对家长承诺什么。所有后续设计决策都从这里推导

0.1 一句话定位

把 v4 的"3 张固定卡 + score 打分",替换成"AI 决定卡片数 + 不打分 + 钩子文案 + 平淡日兜底 + 守望独立链路",同时通过 age_stage 让 3-6 岁内部仍有适龄差异。

0.2 上游决策(产品锁的)

决策在批次 B 的体现
NSM = 日复盘完成率整个 Tab 1 围绕"今天的复盘"组织,不是新闻流式信息流
主战场 = 消除缺席感的 10 分钟复盘控制在 2~8 张卡片,可在通勤一程读完
AI commute timing 学习不固定 8:00 推送,学用户的实际"碎片可读时段"
"无事发生本身就是信息"平淡日不强行编故事,A+C 兜底(一句解读 + 一个时刻)
守望独立成线Tab 1 命中时 banner 露出,详情进 Tab 3 二级页;不参与 Hero 钩子
守望姿态克制不诊断 / 不焦虑 / 不催促;"我觉得 AI 想多了"反馈永远在
4 维标签情绪 #E59CB1 / 运动 #8DC79B / 社交 #8DB1D9 / 思维 #B197D3
全天陪伴 + 录音即焚复盘材料是 AI 解读 + 奇遇时刻,不再展示"录音/采集时长"
年龄分档(v0.2 新)young (3~4.5 岁) / older (4.5~6 岁) 两档;越界 nudge 不阻断
卡片数 AI 决定(v0.2 新)不固定 5-7 张;orchestrator 按 mode (rich/mild/quiet) 决定 2~8 张
守望阈值按 stage(v0.2 新)young 默认 0.65 / older 默认 0.70;阈值在 prompt 内硬截断,不下放前端

0.3 v4 现状 vs Batch B 落差

v4 是固定 3 卡(summary / metrics / dialogue_style)+ score 0~100 打分。Batch B 重塑为 8 卡候选 + AI 调度 + 不打分。下表是逐项对照:

维度v4Batch B (v5)动作
卡片数固定 3AI 决定(2~8)+ 顶层调度
summary_card1 张多 items + score 0-1004 维度独立成卡,无打分拆 4 卡,去 score
timeline_card全天时间轴"高光奇遇"仅子集重塑为 curator
dialogue_style日复盘出不上日复盘 UI挪到周/月报
Hero 钩子必有新增
平淡日 A+C必有兜底新增
行动建议无(light_tip 接近)每日 ≤1 张新增
守望命中议题告警 + 65/70% 阈值 + hedge新增
年龄约束3-6 岁 young/older 两档新增
commute timing无(无状态)push 时机依此工程层做,不在 prompt

0.4 这份文档的受众

产品 / 设计§0 §1 §2 §7 + 设计决策段
算法 / Prompt 工程§3 §4 + 各 prompt 的 .pmt 文件
前端§4 输出 schema + §5 路由表
后端 / 调度§3 双层架构 + §6 灰度计划

1今日 Tab + 日复盘

用户每天打开 App 的第一屏 —— 情绪锚定 = "今天可可怎么样"。Home 有三种状态:待复盘 / 已复盘 / 平淡日。日复盘是由 AI 决定 2~8 张卡片的故事流(rich/mild/quiet 三种 mode),不再固定 5-7。年龄越界 / 缺生日时在 Hero 上方出现轻量 nudge 条,不阻断浏览。

1.1 今日 Home —— 三个状态 + 年龄 nudge

18:32 ●● 100%
晚上好,晓晴
可可今天的奇遇日报准备好了
!
奇遇目前最适合 3~6 岁,可可已经 7 岁,部分内容可能不适用
×
今日复盘

今天可可让你想笑的瞬间

4 个奇遇时刻 · 5 分钟读完
开始复盘 ›
睡眠规律命中 1 次 · 今天 14:23
最近的奇遇时刻
17:48 · 在客厅
"妈妈,月亮怎么跟着我们回家?"
思维问出第一个天文相关的问题
14:23 · 在卧室
"我不想睡觉,肚子里有虫子"
情绪入睡前抗拒,语言生动
今日
奇遇
宝贝
1.1a 待复盘 + 年龄越界 nudge晚上 commute 时段的入口;hero 用钩子文案 + 封面图;顶部黄条 = age_stage_hint=out_of_range_older;24h 内 ≤1 次,关闭后 7 天不再出现,不进 push
21:14 ●● 100%
已陪伴可可 30 天 · 看过今日复盘
今日复盘 · 已读 18:41

"今天可可让你想笑的瞬间"

重新打开 ›
今天的奇遇时刻 · 4
17:48 · 在客厅
"妈妈,月亮怎么跟着我们回家?"
思维第一个天文问题
15:30 · 在小区花园
"我可以分给小妹妹一颗糖吗?"
社交主动分享行为
14:23 · 在卧室
"我不想睡觉,肚子里有虫子"
情绪入睡抗拒
9:15 · 在幼儿园路上
"今天会不会下雨啊?"
思维主动提问
今日
奇遇
宝贝
1.1b 已复盘状态复盘卡缩成 compact;奇遇时刻流变成主内容;可滑动浏览 / 点击单条详情
19:02 ●● 100%
晚上好,晓晴
今日 · 安静的一天

今天是个安静的日子

无大事 · 1 个值得记的小片段
看一眼小日常
A · AI 解读
可可今天大部分时间在玩积木,没有什么明显的情绪起伏 —— 或许是安静的一天本身。
C · 16:12 · 在客厅
"积木倒了,再来一遍"
思维耐心 / 重试
无事发生本身就是信息
不是每天都需要 5 分钟复盘
今日
奇遇
宝贝
1.1c 平淡日 A+C 兜底对应 prompt mode=quiet;承认平淡,不强行编故事;A = 一句 AI 解读,C = 一个小时刻;底部一句话化解"今天没内容"焦虑
18:32 ●● 100%
晚上好,晓晴
加上生日,奇遇会更懂 可可
×
今日复盘

今天可可让你想笑的瞬间

4 个奇遇时刻 · 5 分钟读完
开始复盘 ›
最近的奇遇时刻
17:48 · 在客厅
"妈妈,月亮怎么跟着我们回家?"
思维第一个天文问题
今日
奇遇
宝贝
1.1d 缺生日 nudge 变体对应 age_stage_hint=missing_age;hint 文案带"+"图标 + 引导跳 Baby Profile 编辑;prompts_v5 兜底走 older stage(不阻断)

1.2 日复盘流程 —— AI 决定 2~8 张卡片(rich 模式如下)

18:35●● 100%
今日复盘 · 3 月 12 日 周三

今天可可让你
想笑的瞬间

4 个奇遇时刻 · 全天陪伴 14 小时
晚饭前可以读完

1.2a 卡片 1 · Hero 钩子全屏插画 + 情感钩子文案;不报告体;底部进度条 6 节
18:36●● 100%
情绪 · Emotion

今天的情绪
比昨天更稳一些

没有明显波动;午睡前有一段抗拒,但很快被绘本转移注意力。

最近 7 天起伏
14:23 · 卧室
"我不想睡觉,肚子里有虫子"
入睡前的拖延话术,妈妈用绘本平稳过渡 ✓
1.2b 情绪卡 (粉 #E59CB1)不打分;"比昨天稳"+ 7 天 sparkline;锚定到一个具体时刻 + 妈妈应对;internal_score 仅用于排序,UI 永不渲染
18:36●● 100%
运动 · Motion

户外活动比
这周平均多 12 分钟

下午在小区花园跑跳了一阵;晚饭前主动要求"再下楼一次"。

最近 7 天活动量
15:30 · 小区花园
"妈妈我还想再玩一会儿"
主动延长户外 — 像是今天体力很好。
1.2c 运动卡 (绿 #8DC79B)出现条件:daily_accumulators.active_minutes ≥ 25;不显示步数 KPI,强调"比昨天/本周"差异
18:37●● 100%
社交 · Social

第一次主动
对陌生孩子开口

今天在花园里 3 段同伴互动,其中一段她主动起话头 —— 看起来比上周更愿意先开口。

最近 7 天同伴互动
15:30 · 小区花园
"我可以分给小妹妹一颗糖吗?"
主动分享 — 第一次看到她对陌生孩子的关心。
1.2d 社交卡 (蓝 #8DB1D9)出现条件:young 含他人互动 ≥1 / older 含同伴互动 ≥2;hedge 词 "看起来"/"像是"/"听起来"
18:38●● 100%
思维 · Cognition

连续 3 天
问到了"月亮"

本周关于天文的提问累计 5 次,比上周多 4 次 —— 像是兴趣窗口打开了。

最近 7 天提问次数
17:48 · 在客厅
"妈妈,月亮怎么跟着我们回家?"
第一次问出天文相关问题 — 标志性。
1.2e 思维卡 (紫 #B197D3)出现条件:含 sub_item.type=insight 或 quote 含问句 ≥1;强调兴趣窗口期,不评估"聪明"
18:39●● 100%
奇遇时刻 · Highlight

今天最值得
记下的两个瞬间

17:48 · 在客厅 · 思维
"妈妈,月亮怎么跟着我们回家?"
这是可可第一次问出天文相关问题 — 标志性。
⭐ 收为里程碑 分享给爸爸
15:30 · 小区花园 · 社交
"我可以分给小妹妹一颗糖吗?"
主动分享 — 第一次看到她对陌生孩子的关心。
⭐ 收为里程碑 分享给爸爸
1.2f 高光奇遇时刻对应 highlight_curator_v5;1-3 个值得纪念;孩子原话直接引用;"收为里程碑"+"分享给爸爸";产品最有故事感的一屏
18:40●● 100%
如果方便的话

可可这周对
"月亮"特别有兴趣

连续 3 天提到月亮、星星、夜空。
周末可以带她看一次儿童天文绘本,或者去户外看看。

为什么这样建议?
3 月 10 / 11 / 12 日 都出现"月亮""星星"相关的提问。AI 觉得是兴趣窗口期。
1.2g 行动建议每日 ≤1 条;stage 风格切换:young (3~4.5 岁) 偏 talk/play/rest("她问'为什么'时多停 3 秒");older (4.5~6 岁) 偏 observe/talk/rest("她讲学校的事时不打断");无锚点时此屏不出
18:41●● 100%
🌙

今日复盘
已完成

明天还会陪着可可。
你今天的陪伴时间是 14 小时。

今天的复盘对你有帮助吗?
1.2h 完成 + 反馈温度文案"明天还会陪着可可";可选评分 + "AI 想多了"路径;不发"再见"消息(不情绪绑架)

设计决策

  • 三态 Home 的差异化:待复盘 = 情绪锚定;已复盘 = 流式时刻浏览;平淡日 = A+C 兜底。避免了 99% App 单一 home 的"今天没新东西,那我打开干嘛"困境。
  • v0.2 卡片数 AI 决定(2~8):固定 5-7 → orchestrator 调度,rich/mild/quiet 三档。维度卡仅在有强证据时出,不凑数。空数组合法。
  • v0.2 mode ↔ Home 三态映射:mode = quiet 直接走 1.1c 平淡日,不进 1.1a/1.1b;mode 切换由 prompt 决定,前端只消费卡片清单不感知 mode。
  • 钩子文案不是报告语:"今天可可让你想笑的瞬间" vs "今日报告已生成"。情感动词 + 具象细节 + 妈妈视角,而不是机器视角。
  • 不打分:每个维度只用"比昨天稳"+ sparkline + 一个时刻锚定。评分会变成焦虑触发器,妈妈不需要 KPI。internal_score 内部排序保留(highlight Top-3 等),UI 永不渲染。
  • v0.2 4 维度独立成卡 + 颜色编码:情绪粉 / 运动绿 / 社交蓝 / 思维紫 一致到 spark / 引用 quote 边框 / 标题色。
  • v0.2 stage 阈值:young (3~4.5 岁) 与 older (4.5~6 岁) 在维度强证据 / 守望命中 / 行动建议风格上分档;越界 nudge 软提醒不阻断。
  • 孩子原话直接引用 vs 他人 AI 总结:孩子的话是产品最有故事感的资产,原话保留;他人的话用 AI 二次表达让叙事更顺。
  • 每日 ≤1 条行动建议+ stage 风格切换:young 偏 talk/play/rest,older 偏 observe/talk/rest;无锚点时此屏不出。
  • "为什么这样建议"展开:AI 透明度 —— 让妈妈看见推理链条而不是黑盒结论。降低误判时的损失。
  • 平淡日的 dignity:承认"今天没什么"比"硬编 X 个突破"更可信。"无事发生本身就是信息" = 产品对家长的尊重。closing 禁忌词:加油 / 期待 / 进步 / 优秀 / 棒。
  • 奇奇 FAB 在复盘中收起:复盘是仪式,不被打断;回到 Home 自动恢复 FAB。

2守望 (Watchful)

替你留意可可的 X 件事」 —— 不是监控,是帮你照看。家长设关注议题 → AI 在每天的素材里留意 → 命中时柔和告知。这是产品的差异化壁垒,但姿态必须克制。

9:41●● 100%
守望中

替你留意可可的 3 件事

本周命中 1 次 · 累计 12 次
关注的议题
😴
睡眠规律
最近命中 · 今天 14:23
关注中
💬
语言进步
7 天前 1 次 · 第一个完整句子
关注中
👋
和陌生小朋友的互动
暂未命中
关注中
守望姿态克制 —— 不诊断,不催促,不焦虑
2.1 守望 Home"替你留意 X 件事"代替"监控";议题列出最近命中状态;底部一行 promise 化解"是不是审视孩子"焦虑
9:41●● 100%

选一个你最关心的方面,AI 会在每天的素材里留意。

😴
睡眠规律
入睡时间 · 睡前情绪 · 起夜
🍚
进食偏好
挑食 · 食量 · 用餐时长
👋
社交表达
主动开口 · 与人互动频率
💬
语言进步
词汇增长 · 完整句子 · 主动提问
🌡
健康信号
咳嗽 · 异常哭闹 · 反复说不舒服
✏️
我自己描述一个
用一句话告诉 AI 你想留意什么
2.2 添加议题 · 选模板5 个常见模板(覆盖 80%)+ 自定义兜底;模板带 4 维色 + 副描述;点击进 Step 2 配置
14:25●● 100%
命中时间 · 14:23
14:23 · 在卧室
"我不想睡觉,肚子里有虫子"
AI 看到的

可能是入睡前的拖延话术,也可能是真实不适。如果近 3 天重复 3 次以上,值得带去看看。

置信度
75%
已过 stage 阈值(young 0.65 / older 0.70)— 此处为 older
如果你想做点什么 · older 风格
💬
等她讲完再追一句"然后呢"
让她自己解释,比直接问更有信息量
📅
3 天内重复 3 次 → 提醒带去看
这次命中
2.3 命中详情对应 watchful_topic_detector_v5;引用原话作证据;必含 hedge(可能/似乎/像是/听起来);stage 阈值:young 0.65 / older 0.70 硬截断;行动建议按 stage 切换风格;"AI 想多了"反馈永远在

设计决策

  • "留意" vs "监控":监控带审视感,留意带伙伴感。一旦感觉是监控孩子,妈妈会反感。这是守望最容易跑偏的地方。
  • 柔和橙色 banner,不警示红:今日 Tab 上的命中提示用 #E89B5A 暖橙,仅"健康信号"高级别才用警示红。避免日常告警把妈妈训练成焦虑反射。
  • v0.2 守望独立链路,不参与 Hero 钩子:watchful_topic_detector_v5 独立 msg_type;不抢日复盘 Hero 注意力;命中独立通知 + 已复盘 Home 专属入口。
  • v0.2 stage 阈值硬截断:young 0.65 / older 0.70 在 prompt 内截断;低于阈值不进入命中流;前端只渲染发布的命中。
  • v0.2 必含 hedge 词:可能 / 似乎 / 像是 / 听起来 / 看起来 —— prompt 校验,不通过不发布。强禁"显然 / 一定 / 肯定 / 必然"。
  • 5 个模板 + 自定义:模板覆盖 80% 常见诉求;自定义入口可见但不喧宾夺主,避免选择瘫痪。
  • 引用奇遇时刻作为证据:AI 命中必须能"指着原话说"——光给结论会被妈妈瞬间不信任。
  • 置信度透明展示:75% 的命中和 95% 的命中是不同事 —— 数字 + bar 让妈妈用合适的把握度对待 AI 的话。
  • "AI 想多了" 反馈永远在:用户主权 —— 不能让 AI 永远代表"对"。这个反馈回流训练,提高未来精度。
  • 行动建议按 stage 切换风格:young = talk-only("问一句");older = observe + talk("等她讲完追一句'然后呢'");不超过 2 条。
  • 不重复 push 同一议题:一天最多 1 次,避免训练用户屏蔽通知。

3prompts_v5 架构

这一节给算法 / 后端同学看 —— 我们怎么把"前端要的 8 张候选卡"翻译成可调度的 prompt 链路。核心思路:双层架构(规则代码兜底 + prompt 精修) + 单卡 prompt 可并行调用

3.1 双层架构

1原料层activity_timeline_analysis_v5 把 ASR 转成结构化 timeline_card
2规则代码兜底工程层按硬规则计算 mode + bootstrap_plan,保证最低质量下限
3调度层 promptdaily_recap_orchestrator_v5 在 bootstrap 上做小幅精修,决定 card_order
4单卡 prompt 并行按 recap_plan 分发到 hero/dimension×4/highlight/action/quiet_day
旁路独立链路watchful_topic_detector 不进入 Hero,直接走通知 + 已复盘 Home 入口

3.2 数据流图(端到端)

原始 ASR 转录 含说话人 ID + 时间戳 activity_timeline_analysis_v5 → cards.timeline_card 原料层(共用,下游消费) 规则代码兜底 计算 mode + bootstrap_plan recap_orchestrator_rules.pmt daily_recap_orchestrator_v5 → cards.recap_plan 调度层(决定卡片清单) hero_hook_v5 → cards.hero_hook dimension_card_v5 ×4 → emotion/motion/social/cognition highlight_curator_v5 → cards.highlight_curator action_suggestion_v5 → cards.action_suggestion quiet_day_a_c_v5 仅 quiet 模式 watchful_topic_detector_v5(独立链路) 输入:原始 ASR + watchful_topics 配置 + age_stage → cards.topic_hits(独立通知 + 已复盘 Home 入口,不进 Hero) 前端按 msg_type 路由 → 8 张候选卡片渲染(详见 §5 路由表) 并行调用 ↓ ↓ ↓ 旁路 ↓

3.3 prompt 树(v5 全量文件清单)

prompts_v5/ ├── _shared/ # 13 个共享片段 │ ├── age_stage_profile.pmt # 年龄分档总规则(核心) │ ├── card_schema_action_suggestion.pmt │ ├── card_schema_dimension.pmt │ ├── card_schema_hero_hook.pmt │ ├── card_schema_highlight.pmt │ ├── card_schema_quiet_day.pmt │ ├── card_schema_timeline.pmt # 沿用 v4 + 注脚 │ ├── card_schema_topic_hits.pmt │ ├── common_output_constraints_json.pmt │ ├── common_output_envelope.pmt # 扩 age_stage 字段 │ ├── insufficient_data_policy.pmt # 扩 quiet 模式分支 │ ├── recap_orchestrator_rules.pmt # 双层架构契约文档 │ └── typo_correction_shared.pmt # 沿用 v4 + young 叠词宽容 │ ├── activity_timeline_analysis_v5.pmt # 沿用 v4 + 不预下结论 ├── daily_recap_orchestrator_v5.pmt # 调度层(核心) ├── hero_hook_v5.pmt # 钩子文案 ├── dimension_card_v5.pmt # 4 维度共用 ├── highlight_curator_v5.pmt # 高光精选 ├── action_suggestion_v5.pmt # 行动建议(≤1) ├── quiet_day_a_c_v5.pmt # 平淡日 A+C 兜底 └── watchful_topic_detector_v5.pmt # 守望(独立链路) # = 全新 = 改造 = 沿用

3.4 prompt 不能 / 能做的边界

规则说明
prompt 不能改 moderich/mild/quiet 由工程层硬规则决定,prompt 不能从 quiet 跳到 rich
prompt 不能新增维度卡candidate_dimensions 是白名单,prompt 只能从中筛选或剔除
prompt 不能在 quiet 模式出 highlight / dimension / actionquiet 模式只允许 hero_hook + quiet_day 两张卡
prompt 可以削减候选维度卡若证据语义弱(仅 1 条且 source 不明确),可剔除 1 张
prompt 可以调整 hero_hook tonecurious / warm / playful / quiet 四档
prompt 可以决定 card_order但需在 adjustment_notes 字段说明原因

48 个 Prompt 契约

每个 prompt 的输入 schema / 输出 cards 键 / 强约束清单 / 禁忌词。前端拿这一节做反序列化 + 渲染规则;算法拿这一节做边界检查。

4.1 msg_type 枚举(前端路由依据)

msg_type来源 promptcards 键UI 落点
activity_cards_v5activity_timeline_analysis_v5timeline_card已复盘 Home 时刻流(1.1b)+ 时间线 Tab
recap_plan_v5daily_recap_orchestrator_v5recap_plan不直接渲染;前端按 card_order 分发
hero_hook_v5hero_hook_v5hero_hook1.1a 待复盘 Hero / 1.2a 复盘流首屏 / 1.1c 平淡日 Hero
dimension_card_v5dimension_card_v5(×4)dimension_emotion / motion / social / cognition1.2b~1.2e 复盘流 4 张维度卡
highlight_curator_v5highlight_curator_v5highlight_curator1.2f 高光奇遇时刻
action_suggestion_v5action_suggestion_v5action_suggestion1.2g 行动建议
quiet_day_v5quiet_day_a_c_v5quiet_day1.1c 平淡日 A+C
topic_hits_v5watchful_topic_detector_v5topic_hits2.3 命中详情 + 1.1a banner + push(独立链路)

4.2 共享信封 (common_output_envelope v2)

v5 所有卡片产物统一使用,前端反序列化先看信封:

{ "msg_type": "hero_hook_v5", // 必填,由 prompt 写死 "msg_id": "", // 由调用方填充 "child_name": "可可", "child_id": "c_001", // 多孩家庭路由 "age_stage": "young | older", "age_stage_hint": "", // out_of_range_young | out_of_range_older | missing_age | "" "summary_date": "2026-05-10", "timezone": "Asia/Shanghai", "share_short_content": "", // 仅 hero_hook(首发) / orchestrator 写 "cards": { /* 各 prompt 自己的 cards 键 */ } }

4.3 8 个 Prompt 契约卡

activity_timeline_analysis_v5.pmt activity_cards_v5 ↺ 改造 原料层
目的:从原始 ASR 转录生成全量 timeline_card 作为下游 v5 prompt 的原料层。下游所有 prompt 都消费 timeline_card。
输入
  • run_context(含 age_stage / age_months / phase)
  • asr_transcript 原始转录(每行 [id][HH:MM:SS]内容
输出 cards 键
  • timeline_card = { title, total_duration, items[] }
  • items 每条:type / start_time / duration_min / is_child_activity / content / tags / sub_item?
  • sub_item.type ∈ quote | risk_signal | insight
下游契约:items 必须按 start_time 升序;不在 content 中预下结论(不写"她今天很开心"),保留客观事实让下游 prompt 各自加工。停用:不再为下游做 score 计算。
daily_recap_orchestrator_v5.pmt recap_plan_v5 ★ 新 调度层
目的:双层架构第二层 —— 在工程层 bootstrap_plan 基础上做小幅精修,决定今天的最终卡片清单与顺序。
输入
  • bootstrap_plan(mode / candidate_dimensions / candidate_highlight_count / candidate_action_suggestion / candidate_quiet_day)
  • timeline_card
  • daily_accumulators
  • previous_cards_anchor 昨日基线
输出 cards.recap_plan
  • mode ∈ rich / mild / quiet(不能改)
  • dimensions[](从 candidate 中筛)
  • highlight_count rich:0~3 / mild:0~1 / quiet:0
  • action_suggestion bool(quiet 恒 false)
  • card_order[] 推荐顺序
  • adjustment_notes 12~30 字说明
card_order 推荐(下方 dimension_* 仅为简写,prompt 实际输出必须展开为完整 key 如 dimension_emotion):
rich:[hero_hook, highlight_curator, dimension_*(score 降序), action_suggestion]
mild:[hero_hook, highlight_curator?, dimension_*, action_suggestion?]
quiet:[hero_hook, quiet_day]
示例(rich,dimensions=[cognition, emotion]):[hero_hook, highlight_curator, dimension_cognition, dimension_emotion, action_suggestion]
hero_hook_v5.pmt hero_hook_v5 ★ 新
目的:生成一条让家长想点开的钩子文案(12~22 字)。是日复盘的"诱饵",决定开启率。
输入
  • recap_plan.mode
  • timeline_card
输出 cards.hero_hook
  • hook_text 12~22 字
  • hook_anchor_event_index(quiet 时 null)
  • tone ∈ curious / warm / playful / quiet
正例:"可可今天问了 7 次为什么" / "她在车上哼了一首没听过的歌"
禁元字眼今日 / 今天的报告 / 陪伴报告 / 报告 / 总结 / 分析 / 记录 / 生成 / 发布
注:孤立的"今天"作为时间副词允许(如"她今天问了…") 禁评价表现优秀 / 棒 / 好 / 聪明 / 真乖 禁结尾句号 / 感叹号 / 问号
dimension_card_v5.pmt dimension_card_v5 ★ 新 ×4 调用
目的:4 维度共用 prompt,单次调用生成 1 张维度卡。dimension 由调用方指定(emotion / motion / social / cognition)。
输入
  • dimension ∈ 4 维之一
  • timeline_card
  • daily_accumulators
  • previous_dimension_anchor
输出 cards.dimension_*
  • dimension + title(4~7 字)
  • headline 12~24 字
  • evidence_items[1~4](兜底场景 1 条;正常 2~4 条)
  • sparkline_7d(工程层填,prompt 输出 [])
  • internal_score 0~100(UI 永不渲染
internal_score 算法:基础分=证据条数×10;stage 加权事件 +15;insight +10;quote +5;上限 100。
禁心理诊断焦虑 / 抑郁 / 自闭 / 多动 / 注意力缺陷 禁评价优秀 / 棒 / 聪明 / 懂事 / 乖 禁性格定性内向 / 外向 / 害羞 / 固执
highlight_curator_v5.pmt highlight_curator_v5 ★ 新
目的:从 timeline.items 精选 0~3 条高光奇遇,改写为 30~60 字叙事体。这是产品最有故事感的一屏。
输入
  • candidate_count 0/1/2/3
  • timeline_card
输出 cards.highlight_curator
  • highlights[] 0~3 条
  • 每条:time + scene + child_quote + ai_interp(30~60 字)+ dimension
多样性:candidate_count=2 时至少 2 dimension;candidate_count=3 时至少 2 dimension。同 dimension 重复 -15 分。
type=risk 不作为高光(走守望链路)禁词很棒 / 真聪明 / 很懂事 / 真乖 禁心理推断"因为她想 X"(除非孩子原话)
action_suggestion_v5.pmt action_suggestion_v5 ★ 新
目的:从 timeline 中挑 1 个可作为"明天小事"锚点的事件,生成 0~1 条行动建议。无锚点输出空数组是合法且推荐的
输入
  • timeline_card
输出 cards.action_suggestion
  • suggestions[] 0~1 条
  • 每条:text(18~32 字) + category + trigger_evidence_index
stage 风格切换:
young (3~4.5 岁):talkplayrest 例:"她问'为什么'时多停 3 秒再答"
older (4.5~6 岁):observetalkrest 例:"她讲今天的事时不打断,让她讲完"
禁命令式应该 / 必须 / 一定要 / 需要 禁评价家长你应该多陪 / 你做得不够 禁任务化每天读 30 分钟绘本
quiet_day_a_c_v5.pmt quiet_day_v5 ★ 新 仅 mode=quiet
目的:承认平淡,给软着陆。A = 一句 AI 解读(24~40 字),C = 一个 30 天对照(20~36 字),closing 温和收束(12~20 字)。
输入
  • timeline_card(稀薄)
  • daily_accumulators
  • thirty_day_baseline(common_activities / quiet_days_count_in_30d)
输出 cards.quiet_day
  • a_today { text, anchor_time }
  • c_compare { text, compare_window_days:30 }
  • closing 12~20 字
stage 基线词:young = 玩 / 问 / 讲故事 / 午睡|older = 玩 / 讲事 / 独处片段 / 读书
极度稀薄兜底:"今天素材不多,{child_name} 大部分时间安静"
禁词加油 / 期待 / 进步 / 优秀 / 棒 / 加把劲 / 再接再厉 / 明天会更好
watchful_topic_detector_v5.pmt topic_hits_v5 ★ 新 独立链路
目的:检测用户配置的议题命中。不进入 Hero / highlight 候选,独立通知 + 已复盘 Home 入口。
输入
  • watchful_topics[] 用户配置(topic_id / label / category / user_keywords)
  • timeline_card
  • raw_transcript_excerpt
输出 cards.topic_hits
  • topic_hits[] 0~N 条
  • 每条:confidence (0~1) + evidence[1~3] + hedge_phrasing(22~40 字) + suggested_action(可空)
stage 阈值(硬截断,不下放前端):young 0.65 / older 0.70。低于阈值不输出该 topic。
必含 hedge 词:可能 / 似乎 / 像是 / 听起来 / 看起来 —— 不通过不发布。
禁断言"她今天咳嗽" 禁医学诊断感冒 / 发烧 / 病 禁强动作建议就医 / 立即处理 / 必须 X

4.4 stage × 维度强证据阈值(dimension_card 触发条件)

维度young (3~4.5 岁)older (4.5~6 岁)
emotion 情绪含情绪 tag 或 sub_item.type=quote/risk_signal 的 items ≥ 1
(哭闹 >3min / 主动表达开心 / 抱抱要求 / 拒绝/抗议)
同样 items ≥ 2
(older 情绪表达更内化,关注语调与具体场景)
motion 运动daily_accumulators.active_minutes ≥ 25同阈值 ≥ 25(6 岁活动量未必更大)
social 社交含他人互动 items ≥ 1需含同伴互动或合作游戏 items ≥ 2
cognition 思维含 sub_item.type=insight 或 quote 含问句 ≥ 1
(新词 / 为什么 / 因果尝试 / 物体探索 >2min)
同上 ≥ 1
(完整叙事 / 规则讨论 / 解释因果 / 计划反思)

4.5 stage × 守望阈值与 hedge 风格

stage置信度阈值触发证据hedge 词推荐suggested_action
young 0.65 身体类单证据可触发;情绪/社交需 ≥2 似乎 / 可能 / 像是 仅 body 类可出("留意一下"级别)
older 0.70 任何 category 单证据不触发,需 ≥2 可能 / 看起来 / 听起来 优先留空,由家长判断

5前端路由 + 渲染规则

这一节给前端同学看 —— 拿到一份产物时怎么决定渲染哪个组件。核心原则:前端不感知 mode 变化,只消费 cards 字典;前端不计算 internal_score,只按 card_order 排序。

5.1 路由总表

msg_type渲染逻辑关键判断
activity_cards_v5 渲染 timeline_card.items 到时刻流 1.1b 已复盘 Home 主区 / 时间线 Tab
recap_plan_v5 不直接渲染。前端按 card_order 顺序拉取并展示其它产物 quiet 模式 → 走 1.1c 平淡日 home
rich/mild → 走 1.1a 钩子 hero
hero_hook_v5 渲染 hook_text 到 1.1a Hero 标题
tone=quiet 时切换到 1.1c calm 视觉
tone 决定视觉变体(curious/warm/playful/quiet)
dimension_card_v5 按 cards 键(dimension_emotion 等)渲染 4 维卡片,色板按维度切 internal_score 不渲染,仅作为前端排序 key 使用(如有需要)
highlight_curator_v5 渲染 highlights[] 到 1.2f;空数组 → 不渲染此屏 每条配"⭐ 收为里程碑"+"分享给爸爸"按钮
action_suggestion_v5 渲染 suggestions[0] 到 1.2g;空数组 → 不渲染此屏 category 决定 icon 选取(💬/🎮/🌙/👁)
quiet_day_v5 渲染 a_today + c_compare + closing 到 1.1c 仅 mode=quiet 出现
topic_hits_v5 每条独立卡片:1.1a banner / push 通知 / 2.3 详情
空数组 → 不出 banner
不进 Hero。banner 颜色:普通 #E89B5A / 紧急 #D9533C

5.2 4 维度色板(统一应用)

情绪 emotion#E59CB1 · soft #FBE2EA
运动 motion#8DC79B · soft #E0F0E5
社交 social#8DB1D9 · soft #DEEAF6
思维 cognition#B197D3 · soft #ECE3F4

5.3 age_stage_hint → UI nudge 决策表

age_stage_hint 值UI 表现展示频次
"" (在范围内)不出 nudge
out_of_range_young1.1a 顶部黄条:"奇遇目前最适合 3~6 岁,部分内容可能不适用"24h ≤1 次;关闭后 7 天不再
out_of_range_older1.1a 顶部黄条:"孩子已经长大了,奇遇可能跟不上 ta 的世界"同上
missing_age1.1d 顶部黄条 + CTA:"加上生日,奇遇会更懂 {child_name}" → 跳 Baby Profile同上,但点击跳转后清除

⚠️ 所有 nudge 都不进 push,仅在 App 内 banner 形式露出。

5.4 多孩家庭路由

每个 child_id 独立跑 orchestrator + 单卡 prompt。原料层 ASR 共用(一台设备一份 raw_transcript,不重复跑 ASR);timeline_card 由工程层按 child 视角切片后下发(基于 speaker_id ↔ child_id 映射过滤 items),下游 prompt 拿到的 timeline_card 已是单 child view。前端按 child_id 路由到对应娃的 Home,并提供"娃切换器"。prompt 不需要意识到"多孩",orchestrator 输入只有一个 child 的 view。

5.5 错误降级策略

故障场景降级
orchestrator 超时 / 失败使用工程层 bootstrap_plan 直接走 rich/mild/quiet 分发
某单卡 prompt 失败该卡不渲染,整个复盘流跳过此屏,不阻断其他卡
highlight / action 输出空数组不是错误,正常隐藏对应屏(合法且推荐)
watchful 失败不影响日复盘;下次素材到达时重试
JSON schema 不合法整个产物丢弃,UI 走 v4 兜底(灰度期)

6v4 → v5 迁移与灰度

这一节给后端 / SRE / 运营看 —— 怎么从 v4 平滑迁到 v5,怎么观测,什么情况下回滚。

6.1 兼容期:双写

A工程层双跑同一份 ASR 同时跑 v4 全套 + v5 全套,落库分开
B前端按 msg_type 路由summary_cards / activity_cards → 旧 UI;recap_plan_v5 / hero_hook_v5 / ... → 新 UI
C用户感知仅暴露新 UI,旧产物作为兜底(v5 schema 不合法时 fallback)

6.2 灰度家庭群

阶段家庭群规模触发升档条件回滚条件
α5%(内部 + 早期共建用户)3 天内复盘完成率 ≥ v4 baseline -5pp,且"AI 想多了"反馈率 < 10%schema 错误率 > 1% / 用户 NPS 下降 > 5pp
β20%7 天稳定期 + 守望命中后家长操作率 ≥ v4 baseline同上 + 平淡日"AI 想多了"反馈率 > 20%
γ50%14 天稳定期 + 4 维卡片单卡反馈正向同上
GA100%γ 持续 14 天稳定启动 v6 规划

6.3 观测指标

指标v4 baselinev5 目标采集点
日复盘完成率(NSM)≥ v4 baseline 持平 +5%1.2h 完成屏触达
Hero 钩子点击率新增基线1.1a → 1.2a 转化
"AI 想多了"反馈率< 10%1.2h 反馈 + 2.3 反馈
守望命中后操作率新增基线2.3 详情停留 + 行动按钮点击
平淡日识别准确率家长认同率 > 75%1.1c 反馈("今天确实平淡 / 其实有事")
schema 错误率< 0.1%后端解析失败计数
多孩家庭路由正确率100%child_id 一致性校验

6.4 v4 弃用清单

v4 资产状态说明
daily_summary_report_v4.pmtdeprecated仅周/月报场景保留 dialogue_style 部分
card_schema_summary_v4弃用
card_schema_metrics_v4弃用内容已并入 dimension_card 的 evidence_items
card_schema_dialogue_style_v4暂留等批次 D 周/月报上线后再决定去留
activity_timeline_analysis_v4沿用 + 改名v5 是 v4 的小改造,迁移即可

6.5 回滚预案

前端按 msg_type 路由意味着回滚成本极低 —— 关闭 v5 流量分发开关,所有用户立即回到 v4 UI,无需 hotfix。

7待决议项

这些是设计时遇到的分叉点 —— 倾向我先标了,但需要你定。

v0.2 已落锤

  • 复盘卡片数固定还是 AI 决定? 已落锤:AI 决定 2~8 张;rich/mild/quiet 三档;orchestrator 调度(prompts_v5/daily_recap_orchestrator_v5)。
  • 平淡日判定阈值 已落锤:mode = quiet 当且仅当 timeline_items < 2 或 daily_accumulators 全为 0;走 1.1c A+C 兜底。
  • dialogue_style_card 在日复盘出吗? 已落锤:日复盘不出;挪到周/月报(批次 D)。
  • internal_score 在 UI 露出吗? 已落锤:永不露出;仅作排序信号(highlight Top-3 / dimension 强证据排序等)。
  • 守望命中是否参与 Hero 钩子? 已落锤:不参与;命中独立通知 + 已复盘 Home 专属入口。
  • 3-6 岁外的兜底 已落锤:3 stage hint(out_of_range_young / out_of_range_older / missing_age)+ Hero 上方轻量 nudge 条;不阻断;24h 内 ≤1 次;关闭后 7 天不再出现;不进 push。

仍需你拍的

  • 多孩家庭 stage 处理(v0.2 新) 倾向方案 B:每个 child_id 独立跑 orchestrator + 单卡,timeline 共用。Tab 1 是否给"娃切换器"?
  • commute timing 学习失败时 默认推送 19:00 + 用户可手动调整。如果用户连续 5 天不打开,是否自动停推?倾向"是 —— 等用户主动唤醒,不催"。
  • 守望命中是否同步给被邀请家人? 倾向"高级别(健康/紧急)同步,普通级别仅主邀请人"。但被邀请人能不能关掉这个同步?
  • 自定义议题数量上限 倾向 5 个 —— 太多会失去焦点。是否按订阅 plan 调整?
  • "收为里程碑" 的存放位置 复盘 → 高光时刻 → 收为里程碑 → 进哪里?倾向 Tab 2 奇遇 / 里程碑墙,批次 C 详设。
  • "分享给爸爸" 的渠道 站内分享 vs 微信卡片?倾向"双轨:站内 + 一键生成微信卡片"。
  • 钩子文案怎么避免重复 库内 30+ 模板 + AI 当日生成。如果连续两天结构相似,要不要强制换骨架?
  • 4 维卡片可不可滑过 / 跳过 v0.2 落锤后,4 维不全出(按强证据触发),所以"滑过"问题部分自然解决;剩余问题:用户能否手动关闭某个维度?
  • "AI 想多了"反馈如何回流到 prompt? 短期:仅作运营信号;中期:作为下次调用的 negative_anchor。