建造日记
从想法一路迭代到现在的真实记录。翻车、决策、跟 AI 工具的协作,都在这里。
🚀 离上线只差一步,全是没人告诉你的麻烦 —— Babo 的「最后一公里」踩坑记
上一篇把架构拆得漂漂亮亮,我以为难的部分过去了。结果从「demo 能跑」到「敢给真人用」之间的最后一公里,全是不性感、写不进宣传语、却一件都绕不过去的事:备案是一堵你没法用代码翻过去的墙;一封发不出去的验证码邮件,照出了产品藏着的「欠债」;我刚做好的「入学测试」被自己推翻、改成了「跟 Babo 交朋友」;最后还给整个产品换了张脸——不是重写,是换一层皮。顺便,Cappy 正式改名叫 Babo 了。这一篇记的就是这些弯腰捡鸡毛的时刻。
🧩 从产品经理视角拆一遍 Cappy 的架构 —— 我是怎么「定义」和「抽象」这套系统的
我不写代码,但我花最多时间的地方,是「怎么定义这个系统」。代码可以让 AI 写,但「把系统切成哪几块、每块的边界在哪、它们怎么拼」—— 这件事 AI 替不了我,也是整个项目最值钱的部分。这一篇我从产品经理 + 模块化的角度,把 Cappy 的架构完整拆一遍:为什么把「一个 AI」拆成听/想/说/看四种能力、为什么一个 Cappy 要分身份/模式/上下文三层、为什么记忆要分能力/关系/个性、为什么绘本不直接喂给 Cappy 而要中间夹一个「备课老师」、为什么学情数据是「叠加重建」而不是「攒」出来的。全程图文并茂。一句话总结:好的抽象 = 定义一次、到处生效、还能随时换零件。
📖 重大升级:Cappy 从'陪聊天'变成了'陪读绘本 + 练口语'
之前的 Cappy 主要是"陪聊" —— 跟小菠萝对话练口语。这次是个不小的升级:它现在能**陪读绘本**了,而且不是放段音频,是真的"一起读一本书"。一本绘本拆成四步:① Cappy 带语气范读整本(像老师在读)② 小菠萝自己读,Cappy 听着、记下哪个词卡了 ③ 一页页一起精读、Cappy 问几个超好答的小问题,读完用中文聊聊这本书讲了啥 ④ 发一颗月亮、把高光和学会的词句存下来。让"读"成立的幕后是豆包视觉备课(看懂版面、不瞎读、按真实顺序带语气);口语这条线也顺手升级了 —— 把 Cappy 从"老师"彻底拧成了"朋友"。
🎓 Cappy 其实有两个用户:小朋友 + 焦虑的中国家长
5/17 让 Cappy 真的活了,但只解决了"孩子愿意用"。下一个产品问题 —— 这个 app 到底服务谁?想清楚之后我意识到 Cappy 有两个用户群:显性的孩子 + 隐性的家长。中国家长有一套独特的焦虑链:学没学、学得怎么样、进步了么、能力到哪了、能说什么了。v2.3 围绕这五个问题加家长模式:高光时刻、聊天笔记、能力图、周报、家长跟 Cappy 老师文字对话。整个产品的 mental model 从"给孩子的语音 app"升级成"一所家庭英语小机构"。
🚀 DeepSeek 救场 —— Cappy 真活了,小菠萝当晚就唱起了 ABC
5/15 那天跟 Claude 敲定的方案 5/17 落地。让豆包停止生成回复,启用 ChatTtsText 模式把内容生成层换成 DeepSeek。Codex 一上午改完,prompt 终于生效。当晚给小菠萝试 —— 他用英语跟 Cappy 来回聊了好几轮、说出了 "I like chocolate ice cream" 这样的完整句、还主动唱起了 ABC 英文歌。整个项目里"让小朋友愿意张口"这个最核心的目标,**在这一晚达成了**。
🤦 诊断 4 天 — v1 整体不能用,但可以拆开用
自测 v1 之后我就把它否决了。接下来 4 天(中间穿插周末休假)我跟 Claude 来回讨论,想清楚的不是"豆包 LLM 不行就换一个",而是"这个端到端封闭产品能不能拆开用"。最后定的方案:保留豆包 ASR + TTS(真的好),LLM 这一层换成我能完全控制 prompt 的 DeepSeek,中间多一道网络中转,实时性损失一点,但能接受。
🛠 v1 怎么搭出来的 —— 不写代码的人,用 AI 工具做一个 iOS app
立项第二天就开干。我已经很多年不写代码了,把 Claude 当 PM、把 Codex 当主力工程师、Claude Code 跑短任务,一天就跑通了第一版。但我自己测试时就发现:豆包的 ASR/TTS 好用,它的 LLM 却完全不适合做"给孩子的英语陪练"—— 回复全是成年人对话,连我自己都听不懂。我直接否决了 v1,跟 Claude 一起查问题,最后决定换架构。
💡 我为什么开始做 Cappy — 一个 8 岁孩子缺的不是英语课
小菠萝英语在班里前列、信心也足,但我作为家长能很明显地感觉到他只有"书面知识"。家里没有英语环境,一周一节课撑不起口语。AI 让我第一次觉得这件事可以由家长自己解决 — 这是 Cappy 立项那一天我想清楚的东西。