← 回到建造日记
翻车

🤦 v1 翻车记 — Cappy 把 80% 的话说得儿子听不懂

一个为大猫 3 级孩子做的英语陪练 app,第一版上线测下来 80% 听不懂。这一篇讲我怎么搞清楚 — 不是 prompt 没写好,是模型 alignment 的硬天花板。

第一个版本跑通之后,我给 8 岁的儿子用了一段时间。结果是 80% 的话他听不懂

这是一个给大猫 3 级孩子做的英语陪练 app,这个数字意味着完全不能用。接下来花了点时间搞清楚为什么。结论跟我原来的判断不一样,记下来给同行参考。

v1 是怎么设计的

技术栈:字节豆包 Realtime,端到端 STT + LLM + TTS,国内最现成的实时语音方案。

Prompt 防御做得挺齐:

  • 200 词白名单(高频词为主,对应 4 岁母语孩子水平)
  • 句长上限 5 词
  • 时态只允许 present + simple past + can/will
  • 40 个明确禁用词(“never say magnificent / interesting / observe…”)
  • 输出前 self-check checklist
  • 难度档默认 L1(最低档)

按设计,Cappy 的输出应该是 “Look! A big cat!” 这种水平。

真机日志:每一句都炸

启动日志显示 prompt 是完整发送的:

[CappySession] start voice=Dacey level=L1
WORDS: Use ONLY these 200 words: I,you,he,she,it,we,...
RULES: Output only listed words. Hard max 5 words total. 
Prefer 2-4. One short line. Present/simple past/can/will.

200 词白名单、5 词上限、self-check,全都在 prompt 里。

然后是 Cappy 的实际输出:

第 1 轮(儿子:hello, how are you?

“I’m doing great, thanks! How about you? Anything fun happening today?”

14 个词。thanks / Anything 都不在白名单。

第 2 轮(儿子:

“Hmm, that sound makes me curious—was today just a chill, low-key kind of day, or is there something on your mind you might want to talk about?”

30 个词。超纲:curious / chill / low-key / something / mind / might。一整句完整的心理咨询师对话。

第 3 轮(儿子:I don't know

“That’s totally okay! Sometimes days feel like that—no big plans, just kind of floating. Maybe we can chat about something small to liven it up…”

39 个词。跟原来的 prompt 已经没有任何关系。

5 轮对话,每一句都超纲且超长,5 词上限完全没体现。

翻车原因:不是 prompt 写错了

翻 console log 之后才意识到 —— prompt 是完整发出去的。模型收到了 5 词上限、收到了白名单、收到了自检指令,然后选择不遵守。

诊断:豆包 Realtime 这种产品本质是为 温暖陪聊 调过的对话模型。它的训练目标是让用户感到被关心、被理解、有共鸣。这种 alignment 会让它本能地倾向于:

  • 输出更长的回答(= “更有诚意”)
  • 用更丰富的词(= “更聪明”)
  • 多展开多铺垫(= “更贴心”)

我的 prompt 想让它说短话、说简单话,跟训练目标 正面对抗。训练信号比 prompt 信号强很多。模型就装作没看见。

也就是说:prompt engineering 在这类对话型语音模型上有硬天花板,而且天花板比我想得低很多

再加力 prompt 也越不过去。必须换底层模型。

第二个洞察:读 ≠ 听

即使模型守纪律,还有一层问题没想到。

我儿子阅读水平是大猫 3 级。每天读绘本听音频也练过。我做 v1 时按 “大猫 3 级” 设计的词表。

读大猫 3听大猫 3 是两件不同的事:

阅读听力
有图、有重复、可慢慢看无图、一遍过、要实时反应
不认识可以猜可以问错过就过去了
可以停下来回想节奏由对方控制

中国孩子英语四项(听、说、读、写)差一档是常态。我儿子能读大猫 3,听只能到大猫 1,中间差两档。

也就是说:就算 prompt 完美执行 5 词以内,对他来说仍然太难,因为词汇基准本身就偏高一档

我从一开始用 “阅读级别” 当 “听力级别” 的代理变量。这是 v1 的根本设计错误

接下来要做的两件事

两个发现叠加,v1 这条路走死了:

  1. 豆包 Realtime 是对话调过的,prompt 改不动它的本性
  2. 即使改得动,设计基准也偏高一档

v2 要改两件事:

架构换。豆包只做它的强项 STT + TTS,LLM 这一层换掉,用一个对指令服从度高、没有 “温暖陪聊” alignment 的模型。最终选了 DeepSeek 塞中间。具体怎么做下一篇。

基准降一档。起手默认 L1 —— 200 词、5 词以内、4 岁孩子水平。等真实数据反馈再升档。

几个 takeaway

不是所有 LLM 对 prompt 的服从度都一样。对话调过的语音模型 vs 通用文本 API,在 “守不守规矩” 上差一个数量级。选型时要单独验证。

Prompt engineering 有硬天花板。当 prompt 已经写到 4000 字符上限、加遍所有施压词模型还在我行我素 —— 这时候不是继续加力,是该换架构。

阅读、听力、口语、写作要分开衡量。“我儿子英语很好” 这种笼统判断对产品设计是无用的。每个 skill 都要单独评估。

设计者不是真实用户。我自己跑 demo 时也读过那些长句,但我能听懂,所以没意识到问题。这一类问题必须让真实用户尽早测,越早越好。


下一篇:v2.1 怎么把豆包拆开用、把 DeepSeek 塞中间。