# 数学脑（MathBrain）— 内部需求评审会议纪要

---

## 会议信息

| 项 | 内容 |
|---|---|
| 日期 | 2026年7月12日（周日）14:00–14:45 |
| 地点 | 远程 · 腾讯会议 |
| 参会人 | **PM**（产品经理，3年教育产品经验）、**Dev**（全栈开发，5年 Flask/前端经验） |
| 会议目标 | 逐条辩论 P0/P1/P2 需求清单，形成可交付排期 |
| 当前版本 | MVP v8.0（已上线：莫兰迪 UI、剧本广场、立绘系统、葫芦侠行93节点） |

---

## 辩论实录

### P0-1: 数学专业模拟器完整数据填充（8学期120节点）

**PM：** 我先讲这个。模拟器现在是半成品——只有60个节点，覆盖大概2年的内容。但这个功能是我们"数学人生"板块的第二引擎，用户点进去玩到一半就断了，体验非常差。我主张把8学期120节点一次性填完。这不是纯内容工作——每个节点的 choice 分支、属性影响、结局判定，这些都有逻辑骨架，我们只是把血肉填进去。

**Dev：** 你说的"只是填血肉"，我不同意。我先问你：120个节点，每个节点平均3段叙事文本、2-3个选项、effects 数值设计——你用 AI 生成初稿也得人工调，对吧？你算过没有，60节点→120节点，按当前 seed_simulator.json 的密度来看，每个节点需要约15分钟调优，这就是30人时。但这不是纯体力活——你剧情分支树的平衡性要不要测？gpa/interest/skill 三属性的数值曲线要不要调？现在 engine 的节点跳转是硬编码在 JSON 里的 `next` 字段，你在写的时候就容易出现死循环或者无法到达的结局。

**PM：** 我认可你说的数值平衡问题。但这恰恰说明我们需要一次性做完——如果分开做，第二期添加的节点必然会打破第一期的数值平衡，回头又要返工。120节点一个版本搞定，后续只做 bugfix。

**Dev：** 你说的是一个好理由，但我担心的是另一个问题：当前引擎的限制。你看 `app.js` 里的 `simState`，和葫芦侠行的状态机是两套独立的全局变量，但渲染逻辑共享同一套 `renderVNNode()`。这意味着如果你要在模拟器里加入"学期切换动画""成绩单展示""毕业典礼"这些仪式感节点，现有的 render 逻辑根本撑不住。你不光要填数据，你还得改前端渲染引擎。

**PM：** 等等，我说的就是填充数据，我没说要加学期切换动画。那些是 nice-to-have。

**Dev：** OK，那我们就说纯数据填充。120节点，我给4个工作日——前提是你给我一份完整的节点树草稿，我做 JSON 编码和数值校对。你自己写不了 JSON 的话，我给你一个 Excel 模板你填，我再转。

**PM：** 可以，我出剧情草稿 + 属性曲线设计，你做编码。那你觉得120节点够不够？

**Dev：** 120节点8学期，平均每学期15个节点，每个节点2-3个选择，分支深度大概3-4层——够用户玩30-40分钟，可以了。再多就是内容膨胀，边际效用递减。

| 结论 | ⚠️ **有条件通过** |
|---|---|
| 工作量 | PM 3天（剧情草稿+数值设计）+ Dev 4天（JSON编码+前端引擎适配） = **7人天** |
| 风险 | 🟡 中（数值平衡 + 引擎适配可能溢出） |
| 条件 | PM 先出完整草稿，Dev 评估后再开工 |

---

### 多剧本体系（NG架构：主剧本触发衍生剧本）

**PM：** 这个是我最近一直在想的大方向。现在我们只有《葫芦侠行》一个主剧本，93个节点8章，很完整。但如果用户玩完第八章某个结局后，系统提示"新篇章已解锁——《三力思外传》"，用户就会想继续玩。这就像 Netflix 的互动剧集，一个主剧火了之后出衍生剧。技术上也不复杂吧——就是多套 JSON 之间通过结局节点互相引用。

**Dev：** 不复杂？我跟你掰扯一下。当前代码：`storyData` 是一个全局变量，加载后 `vnState.currentNode` 指向一个节点，rendering 逻辑假设你在单一剧本里。你加了多个剧本，我需要：第一，剧本间状态转移——用户在剧本A里积累的 shuli/xiayi/xinzhi/favorability 要不要带到剧本B？带的话，怎么映射？不带的话，多剧本之间就是完全割裂的，用户感受不到"同一个世界观"。

**PM：** 这个确实要讨论。我的直觉是"部分继承"——像《巫师3》那样，前作存档影响续作开局，但不是1:1映射。比如葫芦侠行主剧本通关后，厚朴侠好感度超过30的玩家，在《厚朴侠前传》里解锁特殊对话线。

**Dev：** 行，就算我们解决了状态继承，第二个问题：存档系统。现在5个槽位只存 `currentNode` + `stats` + `favorability`。多剧本的话，每个槽位要不要存"哪个剧本的哪个节点"？存档面板要不要按剧本分组显示？这些全是前端改动。

**PM：** 等等，你说的这些都是必须改的吗？如果第一期我们只做最简单的方案：主剧本结局节点里加一个 `next_story` 字段指向另一个 JSON 的 start_node，然后系统弹一个提示"新剧本已解锁"，用户手动回剧本广场选择。不做状态继承，不做跨剧本存档。

**Dev：** 这个可以。改动量小很多：只是在结局渲染时读 `next_story` 字段，弹 toast。存档不用改。但你这样做完之后，用户期望就被拉高了——他们看到"新剧本解锁"，就以为是一个连续的体验，结果进去发现数据全清零。这个体验落差你能接受吗？

**PM：** 能接受。先给用户"发现惊喜"的感觉，后续版本再完善继承逻辑。MVP 只要解锁+跳转就行。

**Dev：** 那就这样。但我有一个技术债提醒：如果将来要做状态继承，现在的数据模型就需要预留 `cross_story_state` 字段，否则回头要重构存档表。

| 结论 | ⚠️ **有条件通过（MVP版本）** |
|---|---|
| 范围 | 仅做"结局节点→解锁新剧本提示→手动跳转"，不做状态继承 |
| 工作量 | **4人天**（Dev 3天引擎改造 + PM 1天新剧本草稿） |
| 风险 | 🟡 中（用户期望落差；数据模型需预留扩展） |
| 技术债 | 存档表需预留 `story_id` 字段 |

---

### 葫芦侠行2.0：Phaser.js 星露谷级互动

**PM：** 好，到我最想推的 feature 了。现在的葫芦侠行是纯文字+静态立绘，交互就是点按钮。我调研过 Phaser.js，它是 HTML5 2D 游戏框架，能做角色在场景里走动、对话气泡弹出、迷你游戏（比如射箭小游戏代替掷骰子判定）。你一个月装好 Phaser，做出第一幕——角色可在秉公习武堂地图上行走，和 NPC 对话，战斗用回合制数学题——绝对爆。

**Dev：** （吸一口气）我要泼冷水了。第一，你对 Phaser.js 调研到什么程度了？你跑过 demo 没有？

**PM：** 看了一些教程，API 看起来不复杂，scene-preload-create-update 的生命周期。

**Dev：** 好，那我问你几个问题。第一，我们现在的架构是 Flask 渲染 HTML，JS 接管 SPA 切换。Phaser.js 是一个独立的渲染引擎，它自己管理 canvas。你要把 Phaser 的 canvas 嵌到我们的 MathLife 面板里，CSS 怎么接管？safe-area 适配怎么做？390px 宽度的 canvas 上做地图行走，体验怎么样？

**PM：** Canvas 可以响应式缩放，Phaser 有 Scale Manager。

**Dev：** Scale Manager 是为游戏设计的，不是为嵌在 WebView 里的 SPA panel 设计的。我真的做过。你 Phaser 跑起来之后，`switchModule()` 切换到"发现"tab，Phaser 场景是 pause 还是 destroy？如果你 destroy 再 recreate，加载时间可能3-5秒。你让用户每次切换 tab 都等？

**PM：** 那就 pause，保持内存。

**Dev：** 移动端内存是个大问题。Phaser 跑一个 tilemap + 8个 sprite + 对话系统，大概占 80-120MB。加上我们现有的 DOM 渲染，低端 iPhone 可能直接闪退。这不是我说做不到，是移动端 WebView 的限制。

**PM：** 那你觉得时间线呢？不要只说不行，给一个你认为可行的方案。

**Dev：** 如果你真的要做互动地图，我的建议：不用 Phaser，用纯 CSS + DOM 做。就用 `position: absolute` 的图片+按钮放在一个有背景图的地图容器里，角色走动用 CSS transition。不需要 Phaser 的重型渲染。星露谷的感觉可以用像素风 CSS 背景图 + 莫兰迪调色来模拟。这叫"低配星露谷"——开发2周，用户体验能达到你期望的60%。

**PM：** 60% 不够，我要的是真正的沉浸感。纯 DOM 做不出来角色在场景里连续走动的感觉，只能做 warp（瞬移）。

**Dev：** 你要连续走动，Phaser 确实能给你。但我认真评估：Phaser 迁移 = 6周（学习1+搭建1+场景1+对话系统1+移动适配1+测试1），风险高。而且做完之后，以后所有人改剧情都得学 Phaser，不是改 JSON 那么简单。这是架构级变更。

**PM：** 好吧。我承认之前的1人月估计太乐观了。那我们先做你提的"低配星露谷"方案——CSS DOM 地图 + 瞬移交互，2周交付。如果用户反馈很好，再评估 Phaser 迁移。

**Dev：** 同意。但我建议我们在 CSS 方案里预留一个接口——地图走动的渲染抽象成一个 `renderMap()` 函数，将来如果要切 Phaser，只需要替换这个函数的实现。

| 结论 | ⚠️ **有条件通过（降级为CSS低配版）** |
|---|---|
| 方案 | CSS DOM 地图 + 像素风背景 + 瞬移交互（非 Phaser） |
| 工作量 | **10人天**（Dev 8天 + UI素材 2天） |
| 风险 | 🟡 中（像素风美术资源需设计；Phaser 作为 V3 选项保留） |
| 备注 | Phaser.js 完整迁移 → 至少6周，移入长期规划 |

---

### P1-1: 用户登录（邀请码+密码方案C）

**PM：** 这个我们拖太久了。老板定了方案C——邀请码+密码登录，未来接微信。现在的用户体验是 localStorage 生成一个 random userId，换设备数据全丢。收藏、历史、存档全没。这是核心竞争力问题：用户为什么要在我们的 App 里投入时间？他们需要"这是我的账号"的归属感。

**Dev：** 技术上我不反对，登录系统在 Flask 里很简单：一个 `users` 表加 username/password_hash/invite_code 三个字段，`/api/login` `/api/register` 两个接口，前端一个登录弹窗。核心工作量在：邀请码的生成和管理。谁生成？手动在数据库里插？还是做一个简单的管理页面？

**PM：** 第一期手动管理。我们一共也就几百个用户，运营同学在后台数据库里插邀请码就行。不需要管理页面。

**Dev：** 那还有个问题：登录后，用户现有的 localStorage 数据怎么迁移？如果用户已经玩了2小时葫芦侠行，有5个存档——一登录，存档要 merge 到服务器。merge 逻辑你想清楚了吗？

**PM：** 简单策略：注册时检测 localStorage 有没有存档，有的话自动上传到服务器端 `/api/simulator/save` 接口。之后服务器端为准。冲突不做合并且，提示用户选择保留本地还是服务器。

**Dev：** 可以。那大概：后端 `users` 表 + 登录/注册 API + session/cookie 管理 = 2天；前端登录弹窗 + localStorage 迁移 + 所有 API 加 `user_id` 鉴权 = 2天。总共4天，但我必须在每个现有 API 上加鉴权，这个测试覆盖面要大。

**PM：** 我觉得值。做了登录之后，收藏和历史才有真正的持久性。而且有了 user_id，我们后续的家长周报、学习数据统计才能做。

**Dev：** 同意。但我有一个建议：密码不要存明文，用 bcrypt hash。Flask 有 `werkzeug.security`，不需要额外依赖。

| 结论 | ✅ **通过** |
|---|---|
| 工作量 | **4人天** |
| 风险 | 🟢 低 |
| 依赖 | 无 |

---

### P1-2: 交互剧情章节选择器

**PM：** 这个需求非常明确：用户通关第八章某个结局后，回到剧本广场，每个已通关的章节可以自由重玩。比如我想重玩第四章的"论道大会"那段，不需要从头开始。这是互动小说类产品的标配——你看《隐形守护者》有章节选择，《Late Shift》有。

**Dev：** 技术上不复杂：首先需要一个"通关标记"——用户到达过哪些节点。我们在 localStorage 或服务器端记录一个 `reached_nodes: []` 数组。然后前端渲染章节选择器：8个章节卡片，已到达过的章节可点击，点击后直接 `vnState.currentNode = 章节入口节点ID`。问题是：用户的 stats（shuli/xiayi/xinzhi）怎么办？直接用当时的存档值？还是给默认值？

**PM：** 给"当时的存档值"。用户第一次通关时我们自动存一个"章节快照"（stats + favorability）。重玩时用快照。如果用户多次通关同一章，保留最近一次的快照。

**Dev：** 那存档表要扩展了。现在5个手动槽位之外，再加一个"系统自动快照"机制。这个改动量不大，但存储逻辑需要仔细设计：每个章节一个快照，8章 = 8条记录。

**PM：** 这个改动会影响现有存档面板吗？

**Dev：** 不影响，系统快照不显示在用户手动存档面板里。它只是一个"读取时用"的隐藏数据。

| 结论 | ✅ **通过** |
|---|---|
| 工作量 | **3人天**（Dev 2天快照机制 + 1天UI） |
| 风险 | 🟢 低 |

---

### P1-3: 知识卡片扩充 + 周更机制

**PM：** 目前只有8张知识卡片。8张。用户点"知识"tab，翻三下就到底了。"知识"是我们四大核心模块之一，8张卡片完全撑不起来。我主张用 AI 生成初稿 + 人工审核，每周3张，一个月到20张。周更需要建一个运营流程。

**Dev：** 内容生产我不反对，但我有几点要确认。第一，AI 出稿用的是 DeepSeek API 对吧？那这个生成是一次性脚本还是做成后台功能？

**PM：** 一次性脚本。每周跑一次，生成3张，人工改，然后插入 `knowledge_cards` 表。

**Dev：** 那第二点：现在的知识卡片渲染有没有问题？8张卡片的时候没问题，到了50张、100张的时候，前端是一次性加载所有卡片吗？

**PM：** 让我想想……现在应该是全量加载。

**Dev：** 对，`/api/knowledge` 不分页。到100张卡片的时候每次请求都要加载100条，每条卡片都有长文本内容。这要做分页。而且卡片的去重和质量控制——AI 生成的内容可能和已有的重复，也可能有事实错误。人工审核需要时间，运营同学懂不懂数学？

**PM：** 运营同学是数学专业出身，审核没问题。分页我们第一期不做，50张以内全量加载性能 OK。到100张再做分页。

**Dev：** 行。那我只需要写一个 `generate_knowledge.py` 脚本，调用 DeepSeek 批量生成，输出 JSON，人工审核后导入。前端暂不改。

**PM：** 等一下，我觉得周更应该做成自动化的——不是每次手动跑脚本。能不能在 Flask 里加一个定时任务？每周一自动生成3张草稿，状态为 `draft`，运营同学在后台审核通过后上线？

**Dev：** 定时任务需要 APScheduler 或者 celery。Flask 本身不支持。你确定要为了一个每周3张的内容生产引入新的依赖和调度框架？我觉得过度设计了。

**PM：** 好吧，手动脚本先跑着。

| 结论 | ✅ **通过（MVP用脚本）** |
|---|---|
| 工作量 | **3人天**（Dev 2天脚本 + PM 1天prompt优化） |
| 风险 | 🟢 低（纯内容生产，无架构变更） |
| 后续 | 卡片超过50张时前端加分页（另估1天） |

---

### P1-4: 视频数据真实化（54条占位→真实链接）

**PM：** 现在 seed_videos.json 里的54条视频，大部分是 YouTube/Bilibili 的占位 ID——点进去 404 或者根本不存在。这个必须改。我需要运营同学配合，从 B 站/YouTube 找真实的、高质量的数学科普视频，每个视频给真实 URL + 封面图 + 时长。

**Dev：** 这个完全不是开发工作。你让我改什么代码？数据替换而已。你给新的 seed_videos.json，我导入。一个 `DELETE FROM videos` + 重新 `load_seed_videos()`，5分钟。

**PM：** 我就是确认一下工作量，确实很小。但我想问：现在是每次重新导入都会 DELETE 全部对吧？如果将来用户在视频上有行为数据（收藏了某条视频），重新导入不会丢吗？

**Dev：** 好问题。现在的逻辑是 `INSERT OR REPLACE`，基于 `bvid` 或 `video_id` 唯一键。所以如果新数据的 ID 和旧数据不同，旧收藏就悬空了。解决办法：真实化的时候保持 video_id 不动，只替换 url、cover、duration 字段。需要我加一个 upsert 逻辑。

**PM：** 好，那就这样。

| 结论 | ✅ **通过** |
|---|---|
| 工作量 | Dev **0.5人天**（upsert逻辑），运营 **2人天**（54条视频筛选+校对） |
| 风险 | 🟢 低 |
| 备注 | 纯运营驱动，PM 负责对接 |

---

### P1-5: 工具箱 — 概率模拟器

**PM：** 这个是我最兴奋的 feature 之一。三个交互实验：蒙提霍尔三门问题、生日悖论、骰子实验。每个实验都是纯前端 Canvas 动画 + 跑1000次模拟显示概率收敛。用户玩三门问题，自己选一扇门，系统展示"换门vs不换门"的概率差异。这是知识模块里最出彩的内容——"动手做数学"。

**Dev：** 我先说我喜欢的：这三个实验确实适合用前端做，逻辑不复杂，每个实验核心代码不超过200行。Canvas 动画也不难。但我担心的是——你把这5个实验放在哪个模块？

**PM：** "知识"模块的子tab——现在只有"精选"和"话题"，加一个"工具箱"。

**Dev：** 那前端 Tab 切换逻辑要改。另外这三个实验的交互设计你有原型吗？蒙提霍尔——选门→主持人开一扇羊→你决定换不换→结果展示。这个交互流程要用 Canvas 还是 DOM？

**PM：** 我觉得混合最好：门用 Canvas 画（有开关门动画），按钮和文字用 DOM。生日悖论更简单，一个输入框 + Canvas 散点图。骰子实验用 Canvas 画骰子。

**Dev：** 可以。但我给你一个现实时间估计：三个实验，每个需要 Canvas 绘制 + 动画 + 概率计算 + 移动端适配。每个实验至少1.5天。总计4.5天，加上"工具箱"子tab的前端改造，**5人天**。不算多但也不少。

**PM：** 可以接受。但我还想加两个实验——贝叶斯更新可视化和随机游走。

**Dev：** 先做这三个，上线看用户反馈。如果数据好再扩。

| 结论 | ✅ **通过** |
|---|---|
| 工作量 | **5人天** |
| 风险 | 🟡 中（Canvas 动画移动端性能需验证） |
| 范围 | 先做3个，后续根据数据决定是否扩 |

---

### P2-1: PWA + 小程序壳

**PM：** PWA 可以让用户在 iOS/Android 上"添加到主屏幕"，离线也能用。小程序壳是老板提的方向——微信小程序用户量大。

**Dev：** PWA 技术上很简单：一个 `manifest.json` + 一个 `service-worker.js`，半天搞定。但 PWA 的离线体验需要你把所有静态资源（CSS/JS/图片/立绘/JSON）缓存——你现在立绘图片多大？

**PM：** 8个角色立绘 + 4个场景背景，大概……我没算过。

**Dev：** 如果超过10MB，iOS Safari 的 Service Worker 缓存就超限了。而且 PWA 在 iOS 上的体验远不如 Android——没有推送通知、没有后台同步。小程序壳完全是另一套技术栈——要么用 Taro 重写前端，要么做 WebView 套壳。无论哪种都是大工程。

**PM：** PWA 先做了，半天值得。小程序壳……我们先放放？

**Dev：** 同意。

| 结论 | ⚠️ PWA **有条件通过**（仅 manifest + SW，不做离线全量缓存）；小程序壳 **⏸ 延后** |
|---|---|
| 工作量 | PWA 0.5人天；小程序壳 ∞ |
| 风险 | PWA 🟢 低；小程序壳 🔴 高 |

---

### P2-2: 家长模式 + 周报

**PM：** 家长模式：在"我的"页面设置一个家长密码，进入后可以看到用户的学习数据——看了多少视频、答了多少题、知识卡片阅读量。周报每周自动生成一份摘要推送。

**Dev：** 先说家长模式——你说的"学习数据"我们现在根本没有。视频播放没有记录时长，知识卡片没有"已读"标记，工具箱的实验也没有统计。你要我先埋点，再做数据汇总，再做家长面板。埋点改所有模块，2天；数据汇总 API，1天；周报生成，1天。总共4天。而且周报"推送"——推送到哪？我们没有 WebSocket，没有邮件系统，没有公众号模板消息。你只能在 App 内做一个"周报信箱"。

**PM：** App 内周报信箱可以。但你说的对——数据基础太薄了。那我换个思路：第一期只做数据埋点，不展示。让行为日志记录更完整。第二期再做面板。

**Dev：** 这个我支持。埋点做好，后续家长面板、周报都能基于这些数据。但目前我们连用户登录都没做，埋点都是匿名数据，家长绑定不了孩子。

**PM：** 所以这个依赖 P1-1。

| 结论 | ⏸ **延后至登录完成后** |
|---|---|
| 工作量 | 预估4人天（分两期：埋点2天 + 面板2天） |
| 风险 | 🟡 中 |
| 依赖 | P1-1 登录 |

---

### P2-3: 好感度可视化面板

**PM：** 现在葫芦侠行有好感度系统（欧阳侠、Eddie侠、厚朴侠等8个角色），但用户完全看不到当前好感度数值——只能在节点选择时凭感觉。我想在"数学人生"页加一个好感度面板，用进度条或心形图标展示。

**Dev：** 技术上极简单：`vnState.favorability` 已经在全局状态里了，渲染8个进度条就是30行代码。但你确定要暴露数值？一旦用户看到"欧阳侠好感度 45/100"，沉浸感就被打破了。现在的设计是让用户凭感觉选对话，更接近真实社交。你加一个数字面板，用户就会"刷好感度"。

**PM：** …你说得有道理。那我退一步：不做数字面板，而是做"关系描述"。比如好感度 0-20 显示"萍水相逢"，20-40 显示"略有交情"，40-60 显示"惺惺相惜"，60-80 显示"生死之交"，80+ 显示"莫逆于心"。用文字而不是数字。

**Dev：** 这个好。而且文字描述可以随剧情进展动态变化，比数字更有情感。工作量很小：一个关系描述映射表 + 5行渲染代码。

| 结论 | ✅ **通过（文字关系描述版）** |
|---|---|
| 工作量 | **0.5人天** |
| 风险 | 🟢 低 |

---

### P2-4: 双语支持（i18n）

**PM：** 中英文切换。我们的内容——视频标题、知识卡片、剧情文本——都只有中文。但如果将来要出海或者给国际学校用，双语是刚需。

**Dev：** i18n 是架构级改动。前端所有硬编码的中文字符串都要抽出来变成 key-value 映射；后端 API 返回内容要加语言参数；最头疼的是剧情文本——93个节点，每个节点的叙事文本都要翻译。这怎么可能在 P2 阶段做？这不是技术问题，是翻译资源问题。

**PM：** 你说得对。那我们先不做双语，但代码层面预留 i18n 的可能性——前端字符串能不能从现在开始用变量引用而不是硬编码？

**Dev：** 可以。我可以定义一个 `I18N` 对象，现在里面只有 `zh`，未来加 `en`。新代码用 `I18N['key']` 取值。但历史代码全部重构不现实——只对新功能做。

| 结论 | ⏸ **延后（代码预留机制即可）** |
|---|---|
| 工作量 | 代码预留 1人天；完整双语 20+人天（含翻译） |
| 风险 | 🔴 高（翻译资源 + 全量重构） |

---

### P2-5: AI 助教多轮对话记忆

**PM：** 现在 AI 对话每次都是独立的——用户问"什么是导数"，AI 回答了；然后问"它和积分有什么关系"，AI 没有上文。DeepSeek API 支持多轮对话对吧？

**Dev：** 支持。API 层面传 `messages` 数组就行——`[{role: "user", content: "..."}, {role: "assistant", content: "..."}]`。前端维护一个对话历史数组，每次请求把整个 history 传给 API。改动量：后端 `/api/chat` 接口改一下接收 `history` 参数，前端维护 `chatHistory` 数组 + 渲染。1天。

**Dev（自己接话）：** 但是有一个隐性问题——token 消耗。每轮对话带全量 history，token 累积很快。如果用户聊了10轮，每轮回答500字，那就是约3000 token 的 history，加上新问题，请求成本翻3-5倍。DeepSeek 虽然便宜（¥1/百万token），但量大了也要注意。

**PM：** 做 token 截断——只保留最近5轮对话。超出就丢弃最早的历史。

**Dev：** 可以。还有一个体验问题：长对话历史会让 AI 回答越来越偏向历史语境，偏离当前问题。5轮是一个合理截断。

| 结论 | ✅ **通过** |
|---|---|
| 工作量 | **1人天** |
| 风险 | 🟢 低 |
| 备注 | 限制历史5轮，控制 token 成本 |

---

## 最终决策汇总表

| 编号 | 需求 | 结论 | 优先级 | 工作量（人天） | 风险 |
|------|------|------|--------|:--------:|:----:|
| P0-1 | 模拟器数据填充（120节点） | ⚠️ 有条件通过 | P0 | 7 | 🟡 中 |
| P0-2 | 葫芦侠行立绘+背景 | ✅ 已上线 | P0 | — | — |
| P0-3 | 存档面板+结局画廊 | ✅ 已上线 | P0 | — | — |
| — | 多剧本体系（MVP） | ⚠️ 有条件通过 | P0 | 4 | 🟡 中 |
| — | 葫芦侠行2.0（CSS低配） | ⚠️ 有条件通过 | P0 | 10 | 🟡 中 |
| P1-1 | 用户登录 | ✅ 通过 | P1 | 4 | 🟢 低 |
| P1-2 | 章节选择器 | ✅ 通过 | P1 | 3 | 🟢 低 |
| P1-3 | 知识卡片扩充+周更 | ✅ 通过 | P1 | 3 | 🟢 低 |
| P1-4 | 视频真实化 | ✅ 通过 | P1 | 0.5 + 运营2天 | 🟢 低 |
| P1-5 | 工具箱（概率模拟器） | ✅ 通过 | P1 | 5 | 🟡 中 |
| P2-1 | PWA | ⚠️ 通过（缩减） | P2 | 0.5 | 🟢 低 |
| P2-1b | 小程序壳 | ⏸ 延后 | — | ∞ | 🔴 高 |
| P2-2 | 家长模式+周报 | ⏸ 延后 | — | 4 | 🟡 中 |
| P2-3 | 好感度可视化 | ✅ 通过 | P2 | 0.5 | 🟢 低 |
| P2-4 | 双语支持 | ⏸ 延后 | — | 20+ | 🔴 高 |
| P2-5 | AI 多轮记忆 | ✅ 通过 | P2 | 1 | 🟢 低 |

---

## 建议排期（按迭代划分）

### 迭代1（第1-2周）：基础体验闭环
- P1-1 用户登录（4天）
- P1-2 章节选择器（3天）
- P1-4 视频真实化（0.5天 + 运营并行）
- P2-3 好感度文字描述（0.5天）
- P2-5 AI多轮记忆（1天）
- **合计：Dev 9人天（≈2周）**

### 迭代2（第3-4周）：内容厚度 + 知识模块
- P1-3 知识卡片扩充（3天）
- P1-5 工具箱概率模拟器（5天）
- P2-1 PWA manifest + SW（0.5天）
- **合计：Dev 8.5人天（≈2周）**

### 迭代3（第5-6周）：剧情体验升级
- P0-1 模拟器数据填充（7天，PM在第4周前交付草稿）
- 多剧本体系 MVP（4天）
- **合计：Dev 11人天（≈2.5周）**

### 迭代4（第7-8周）：视觉升级
- 葫芦侠行2.0 CSS低配版（10天）
- **合计：Dev 10人天（≈2周）**

### 后续（无固定排期）
- 家长模式+周报（依赖登录完成 + 数据埋点）
- 双语支持（仅代码预留）
- 小程序壳（需单独技术评审）
- Phaser.js 完整迁移（作为 V3 独立规划）

---

## 需要老板拍板的开放问题

1. **模拟器填充是 P0 还是 P1？** PM 和 Dev 一致认为120节点是内容工作而非产品创新，建议降为 P1 但仍排在合理优先级。如果老板坚持 P0，需在迭代1/2插队。

2. **用户登录之后，要不要做"账号找回"？** 方案C是邀请码+密码，没有邮箱/手机绑定。如果用户忘记密码，目前没有找回机制。老板是否接受"联系运营手工重置"？

3. **多剧本"状态继承"要不要做？** Dev 建议本期只做解锁+跳转，状态继承留到 V2。这会带来用户期望落差。如果老板认为继承是刚需，工作量需翻倍至8人天。

4. **小程序壳的方向确认。** 如果老板短期内要推微信小程序，前端架构可能需要提前往 Taro/uni-app 方向规划，不能继续在原生 JS 上堆功能。这会改变整个迭代计划。

5. **预算确认：DeepSeek API 的 token 成本。** AI 多轮记忆上线后，每次对话的 token 消耗量将增加数倍。需确认月度预算上限。

---

## 一句话执行摘要

> **本次评审共通过12项（含5项有条件通过）、延后3项、驳回0项；核心结论是用登录+章节选择器"闭环体验"，用模拟器填充+低配星露谷"囤厚度"，小程序壳和双语作为长期战略暂不启动——2个月内可交付4个迭代，总工作量约38.5人天。**

---

*会议记录：PM & Dev 联合纪要 | 下次评审：迭代1完成后（≈第3周）*
