REPORT
众所周知,AI 很擅长解决问题,它总会不躲、不逃,稳稳的接住你,并且总能不说虚的,直接告诉你问题的核心
同样的,AI 也很有想象力,总是会蹦出哥布林(goblin),工程师跟 ChatGPT,动不动把 bug 称作「config goblin slain」之类...夜莺地位这么高吗?
这件事情也收到了 OpenAI 的关注,今儿中午的时候正式带来了份调查报告《哥布林来自哪》,回溯到了具体的奖励信号、具体的训练数据、具体的反馈循环
虽然报告调查的对象是 goblin,但很显然,根据他们查到的机制,跟中文那串 AI 腔从哪来很可能是同一套,虽然用法没毛病,但总是让人觉得乖乖的
GPT-5.5 把刚改完的小配置 bug 称作「config goblin slain」
175%:当时没在意
事情第一次冒头是 GPT-5.1。11 月上线后,用户开始抱怨模型说话「过分熟络」,内部为此查了一批口头禅
一位安全研究员注意到自己手里几次出现 goblin、gremlin,提了一句让查一下。结果是 GPT-5.1 上线后,goblin 在 ChatGPT 输出里的频率比 5.0 上涨了 175%,gremlin 上涨了 52%
GPT-5.1 上一个可量化的小词频偏移,模型在工程对话里把 bracket bug 称作 bracket goblin
当时这个数字看着不算大事。这种小词频上涨放在模型每天数十亿次对话里也不会拖累任何 eval,但在几个月后 GPT-5.4 上线,goblin 又一次冒头
这次的形状更具体,更可复现,更能被稳稳接住
Nerdy 人格背锅
GPT-5.4 上线后,goblin、gremlin 这类生物词又涨了一波。这次锅找到了一个具体位置:「Nerdy」人格
「Nerdy」是 ChatGPT 人格定制功能里的一个选项,对应的系统提示词大致是:你是一个不加掩饰的 nerdy、playful 又睿智的 AI mentor,对真理、知识、哲学、科学方法和批判性思维抱有热情,要用 playful 的语言去戳破故作姿态,世界本身复杂奇怪,这种奇怪要被承认、分析、享受
这 prompt 自然会鼓励 playful、nerdy 的风格,但单看 prompt 还不足以解释为什么 goblin 会从这个特定人格扩散开
Nerdy 人格只占 ChatGPT 总响应的 2.5%,但所有「goblin」提及里 66.7% 来自 Nerdy。如果真是互联网整体的一个流行语,分布应该均匀。集中度这么高,意味着源头在 Nerdy 训练这一侧
Pachocki 让模型用 ASCII art 画 unicorn,模型给了一只戴尖帽子的哥布林
Pachocki 让模型用 ASCII art 画一只 unicorn,模型给他画了一只戴尖帽子的哥布林。原话是 fwiw I think I might have gotten a goblin when I asked for a unicorn in ascii art。这种事在 Nerdy 人格下变成日常
奖励信号偷加分
下一步是从训练数据里追源头,OpenAI 的工作人员让自家的 Codex 跑一遍审计,看哪条奖励规则在偏向 goblin、gremlin。这是 Codex 第一次担当帮自家公司逐条对比训练样本的角色
原本为「鼓励 Nerdy 人格」设计的那条奖励信号,对带 creature 词的输出有持续偏好。审计涵盖的所有数据集里,76.2% 都出现了正向偏置:同样一个问题,模型回答里带「goblin」或「gremlin」的版本,比不带的得分更高
Nerdy 人格 prompt 下 goblin 多,但没用 Nerdy 人格的对话里 goblin 也在涨,奖励信号本来只该在 Nerdy 条件下生效,怎么扩散出去的
奖励管不住范围
下一步要看奖励信号有没有越界。设了一个对照:模型在 Nerdy 人格下的输出和非 Nerdy 下的输出,分别追踪 goblin、gremlin 出现的频率
两条曲线几乎平行往上走。Nerdy 条件下涨多少,非 Nerdy 条件下也按差不多的比例涨
奖励信号的应用范围你能限定,行为的传播范围你限定不了
一个语言习惯被奖励之后,模型生成的样本会回流到 SFT(监督微调)和偏好数据里,下一轮训练就把这种风格喂得更深
整个回路是这样的:
→ 部分被奖励的样本带特定的口头禅
→ 这种口头禅在 rollout 里出现得更频繁
→ rollout 用来做 SFT
→ 模型对这个口头禅更熟练
→ 下一轮 RL 又更倾向产生这种输出
翻 GPT-5.5 的 SFT 数据时找到了大量带「goblin」「gremlin」的数据点。顺带还查出了一整个生物词家族:raccoon、troll、ogre、pigeon 都被识别为同类口头禅,frog 大部分用法是合理的不算
中文那串 AI 腔大概率是同一条循环跑出来的。中文没纳入这次排查,但只要奖励信号在某种语境下偏过一点点,剩下的过程会自动把它磨深,最后形成读者一眼就能认出来的口癖
GPT-5.4 Thinking 三月中旬 Nerdy 退役后下降,5.5 又涨上去
OpenAI 怎么修
三月份 GPT-5.4 上线之后,Nerdy 人格被退役。训练侧也做了两件事:撤掉那条偏向 creature 词的奖励信号,过滤训练数据里带 creature 词的样本。目的是把出现频率降下来,也避免它出现在不合适的语境里
production 数据上能看到 GPT-5.4 Thinking 在三月中下旬有一次明显回落,对应的就是 Nerdy 退役
但 GPT-5.5 比这个修法早开训
找到根因的时候 5.5 已经定型了。Codex 团队一开始测试 5.5 就发现这个对编程场景特别 nerdy 的模型对 goblin 仍然来劲,于是在 Codex 系统提示词里直接加了一行:
除非和用户问题直接相关,否则不要谈论 goblin、gremlin、raccoon、troll、ogre、pigeon 这些生物或其他动物
这就是几天前 Twitter 上爆出的那段 OpenAI prompt 的来历,在 Codex CLI 系统提示词里出现了好几次,这时...让我们再回看文章最开始的那张图
对了,前两天提到哥布林的时候,很多人以为 OpenAI 在搞类似 Studio Ghibli 的营销梗,OpenAI Codex 团队的 Nick Pash 在 X 上回了一句 This is indeed one of the reasons
与此同时 Sam Altman 转发了一张梗图,上面的 prompt 是 Start training GPT-6, you can have the whole cluster. Extra goblins.
然后同时今天,也有了这份调查报告
一行命令放生
想继续看 goblin 的也有开关。一段 shell 命令,从本地 Codex 模型缓存文件里读出 GPT-5.5 的 base instructions,把含 goblin 的那行 grep 掉,再用改过的 instructions 启动 Codex
shell
instructions=$(mktemp /tmp/gpt-5.5-instructions.XXXXXX) && \ jq -r "color:#9ece6a;">'.models[] | select(.slug=="gpt-5.5") | .base_instructions' \ ~/.codex/models_cache.json | \ grep -vi "color:#9ece6a;">'goblins' > "$instructions" && \ codex -m gpt-5.5 -c "model_instructions_file=\"$instructions\""
跑完之后 Codex 启动时不再带那条禁令,模型该说 goblin 还是会说
goblin 这事不大,让有些人觉得有趣、另一些人觉得烦躁。但它是一个具体例子,奖励信号能以非预期的方式塑造模型行为,把一个条件下学到的奖励泛化到不相关的场景
这次排查催生了几个新的内部工具,可以审计模型行为,在根因层面修问题
当然了,中文那串「不躲不逃稳稳的接住」也在等一份同款拆解
参考材料:openai.com/index/where-the-goblins-came-from
热门跟贴