「骂 AI 它就变聪明」,能用机制解释的只有一半

「你骂它两句,它就变聪明了。」这个说法在群里传了很久,而且大家都有体感支持------骂完那一轮,回答确实好了。

体感是真的,归因大概错了。

拆开看,你骂的时候通常顺手带进去了一句具体指正。「我问的是苹果公司股价,你给我扯水果」,这半句才是起作用的东西。至于「你真笨」那半句,模型读到的是一串 token,它不会抖三抖。

更麻烦的是纯情绪那一半可能倒扣分。过激辱骂在对齐数据里常跟「用户不满意,模型给短回答或者道歉」这个模式绑在一起,有时候换回来的是拒答或者过度保守。

所以那句话得改一个字:骂在点上有用,而点上那部分跟骂无关。

一、真正起作用的是解空间被你收窄了

具体的指正在语义空间里形成一个高权重标记,逼模型回溯前面的推理路径,定位到出偏差的那一环。「你忽略了第二步的边界条件」这样的话,能让它当轮重新分配注意力。

换个说法更好理解------你在替它缩小可行解空间。具体的纠错信息直接抬高了任务相关那部分 continuation 的概率,采样自然就更集中在你想要的方向上。

所以把「你怎么又错了」换成「第二步的逻辑不对,应该先判断空指针再取值」,它立刻知道边界在哪。同一件事的两种说法,一种给了坐标,一种只给了音量。

顺着这个机制,最省事的做法是把抱怨直接写成验收标准加反例。这比事后纠正更早介入,也不用赌安全侧会不会误判成攻击。

二、「越用越好用」是两套机制叠在一起

这条也有体感支持,也一样容易归错因------它其实是两件事,很多人把它们当成一件。

第一件在当前对话窗口里发生。上下文学习让模型看得见你之前所有的交流,你纠正它,它实时调整。部分模型还会显式存一些关键偏好,比如「我习惯用 TypeScript」,之后的对话自动适配。这一层是当场生效的。

第二件在版本之间发生。你的点赞、点踩、复制、采纳,进厂商的数据池,经过人类反馈强化学习或者 DPO 这类对齐算法,影响下一个版本。典型路径是人类反馈到偏好数据到奖励建模到新模型发布。

对个人来说,第二件是间接的、滞后的、聚合的。你的每一次使用都在为下一代模型投票,但这一代不会当场翻盘。

两层叠在一起就很容易产生因果错觉------当场变好其实来自第一层,而你把它记在了第二层账上。拆开看就清晰了。

三、先复述再写代码,便宜在自回归上

「别一上来就要一整坨代码,先让它用两句话复述改哪里、输入输出是什么、哪些不能动。」这条建议听着像开工前对表的礼节,它的收益其实很硬。

模型的生成是自回归的。前面几个 token 走错分支,后面所有 token 都会沿着错误方向狂奔,而且越写越自洽,越自洽越难看出来。先复述任务,本质上是把走错分支的概率压在最前面那几步。

这一个小动作,能省掉后面大部分「不对不对,我不是这个意思」。结构化的需求还会持续约束后续生成的条件分布,一次对表管很多轮。

同一条道理的另一个用法是要小步。先设计、先写测试、再实现,大改拆成多轮。每一轮的分支都短,走歪了也就歪一小段。

四、写代码的六条

# 动作 怎么做 示例
1 给边界 说清能改什么、不能改什么、用什么版本 只能动这个函数内部,接口签名不改,Python 3.10
2 给例子 一对「输入 → 期望输出」胜过十句吐槽 输入 [1,2,3] 返回 [2,4,6],不要用循环
3 要小步 先设计、先写测试、再实现,大改拆多轮 先写这个函数的测试用例,再实现它
4 先复述 写代码前让它先确认任务边界 你先用两句话复述一下我要你改什么
5 可验证 贴终端报错,让它自己跑检查 这是报错 KeyError: 'user_id',帮我定位
6 固定规则 项目里写清目录和风格,减少重复说明 这个项目用 black 格式化,变量用 snake_case

六条的共同点是都在给约束,一条比一条更早介入。第 6 条最省事,一次写好,每次生效。

五、收个口

急眼不犯法------你拍桌子、骂两句,只要不砸电脑,没人拦着。

但要是真想少返工,更划算的动作是具体指出错在哪、说清想要什么样。纯情绪对模型没作用,对你的血压有作用。

这件事的机制说到底只有一句话------模型对语义和结构约束敏感,对情绪 token 不敏感。高质量的反馈能压低跑题和幻觉的后验概率,而这才是你体感里「它变聪明了」的主要来源。

你可以骂,骂在点上才值回票价。只给约束不带火气的那种,票价更高。