# 数学脑(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周)*