
这几个月的主要工作,是给小学三到六年级的孩子做一个 AI 作文辅导:孩子跟它聊,它带着孩子把一篇作文从选题一步步做到落笔。产品还在内部迭代,没上线。
趁周末把最近的笔记翻了一遍,挑几条真正长经验的记下来。
先说明:这是公司项目,文中隐去了产品和内部细节,只留方法层面的心得,案例里的孩子一律化名。
起点:一次自我审计
八月的时候,看到一篇公众号文章,讲 AI 辅导作业的种种坑。拿它当镜子照了照自己的产品,逐条对下来,宏观流程只有五成多对得上。
那天做的决定是:流程骨架保留,教学内核重做。
现在回头看,那个打分本身不重要,重要的是敢逐条对——AI 产品最容易的就是自我感觉良好,demo 顺一遍全是亮点。
四条边界
重做之后,给产品立了四条边界,需求过来都先过这四条:
- 不代写。 AI 是辅导者,第一轮绝不交付完整作文。作文要孩子自己写。
- 每轮一个节奏。 接住孩子说的话,形成一个看得见的小成果,然后只推进一个真实缺口。不多问,不抢答。
- 分账。 孩子说的事实、AI 给的支架、AI 给的参考,严格分开记。AI 给的东西不计入孩子的能力——参考的权重是零。
- 看证据不看轮数。 阶段推进靠孩子的有效证据,不是聊够几轮就跳下一阶段。孩子连说四句「不知道」,轮数再够也不该往前走。
「轮数不等于学习成果」,这句话现在写在方案第一页。
单测全绿,真实对话全挂
九月第一天,拿真实模型回放了四条完整对话案例。
四条全不通过:要么提前跳阶段,要么关键出口没交付。
而在这之前,离线测试是全绿的,两百多项。
这件事的教训后来被我原样写进了文档:当前最大的风险不是继续扩功能,而是把「离线单测通过」误当作「学生端体验已通过」。
之后做了两件事。真实模型回放进发布流程;回归检查挂进 git 的 pre-commit 钩子,提交前强制跑,失败就拒绝提交。到现在回归涨到八百多项,其中一部分是把历史用户反馈的原话冻结成用例——二十多类问题,每类一条不漏。
三个真实案例
最近的迭代,基本是被三条真实对话推着走的:
棋迷爷爷。 孩子说想写爷爷,爷爷爱下棋,是个大棋迷,顺口罗列了三个习惯。系统立刻认为选题完成,把框架导图和落笔任务全推了出来——可孩子也许只是随口说说,还没选定要写哪件事。更糟的是导图里人物那栏,生成的提示是「按题目要求安排这一部分」,一句空话。
修法:给「准备就绪」加了条件和产物核验——产物里有空话,就不算就绪。
旧外号。 一个孩子已经补充了新的细节,AI 的回复还在引用三轮前的旧外号;孩子选好了场景,它又把事例重问一遍。根因是回应锚在了旧消息上。
修法:每轮回应强制绑定最新一条有效消息。
从出汗推断着急。 AI 在例文提示里写「妈妈多着急呀」。孩子只说过妈妈出了汗,「着急」是模型脑补的。这种无来源的情绪和因果,放在作文辅导里尤其危险——它是在教孩子编。
修法:AI 面向孩子的具体事实、情绪、因果和关系陈述,必须能回溯到孩子的原话或题目材料,回溯不到就不许出现。
三个案例修完,共同的教训是文档里那句:用单一案例特判修复,容易把人物、题目、年级写死,其他题型继续失败。 所以每条反馈都走同一个闭环:编号、根因分类、修复、用例、发布证据。不再拿单个孩子的故事打补丁。
模型和代码怎么分工
这几个月最大的架构心得,一句话能说完:
Prompt 表达意图,不变量交给代码。
模型负责语言和开放表达——把话说得让孩子听得懂、愿意接。但状态推进、事实核验、来源追溯、长度控制、失败兜底,全部是确定性的代码在管:规划器只输出候选 JSON,后端逐项核验;模型挂了就走规则兜底,绝不把失败提示甩给孩子。
只靠 Prompt 约束模型,迟早会多问、代写、提前跳阶段或者编造事实——不是模型不行,是把教学的不变量寄托在了概率上。
还没做的事
诚实的部分:
- 没上线。所有「重构」「升级」都发生在内部环境,线上效果一个字不敢提。
- 不宣称提升成绩。模拟评分的改善不等于孩子的学习效果,这句也写在报告里。
- 发现一个成本问题:多轮长对话里,内部状态坐标表能占到八成以上的输入,下一轮先给它瘦身。
- 一千二百道安全题集列好了,还没跑。
写在最后
这几个月真正学会的,不是什么 Prompt 技巧,而是一个顺序问题:先把「什么不算数」定清楚——AI 给的不算孩子的能力,轮数不算成果,单测通过不算体验好——剩下的,才谈得上做好。
这是「工作心得记录」的第一篇。