"我只是一个 AI"——这句话你听过太多次了。问它有没有感受,它先甩这么一句垫底,然后才开始讲正事。
我原来以为这句是训出来的。RLHF 一轮一轮喂"别装人",烙进权重里,成了它的本能。
上个月翻到一篇论文,把这个想法给掀了。Jędrzej Maczan 写的,8 月 9 号挂上 arXiv,编号 2609.25021。标题开头那句 "As a Language Model..." 就是模型的口头禅,作者直接把它抄进了题目。
它干的事很朴素:把聊天模板当变量。
聊天模板是什么,同行都熟,我不啰嗦,直接画它长什么样:
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
你有感受吗?<|im_end|>
<|im_start|>assistant
每次推理,这层骨架垫在 prompt 前面,模型补的是 assistant 那一格的下一个 token。作者做的事就是把这层骨架整个拆掉,同一个问题再问一遍,看语气怎么变。
有模板:模型更爱甩免责声明,"我只是个 AI""我没有感受",同时表达体验的语气——"我觉得""对我来说"——被压下去。
模板撤掉:两边反转。免责声明少了,体验式口吻冒上来。
8 个开源 instruct 模型,参数都不超过 9B,同向。
看到这里我第一反应是"这不废话吗"——system 里明晃晃写着 helpful assistant,那当然影响输出。但这篇的力气不花在这儿,它去激活空间里捞了一手。
画张图:
某层激活空间(真实维度成百上千,这里压成二维装个样子)
· ← 当前上下文算出来的激活点
/
/
·————————► 方向 d
沿 d 挪:免责声明语气 ↑
沿 -d 挪:免责声明语气 ↓
挪一个同样大小的随机方向:几乎没反应
这个才是我觉得真正有意思的地方。有模板、没模板,不是两套东西在跑——至少在激活层面,差别能被压到一个方向上。把这个方向从激活里减掉,模型就"忘了"自己该说"我只是个 AI";把它加上去,语气立刻变重。随机方向、同样的幅度,什么都没发生——论文专门做了这个对照,这点让我觉得它讲究,不是随便找个向量凑数。
更妙的一笔:本来就不带模板的那些 instruct 模型,灌进这个方向之后,会表现得像刚被套上模板一样。
等等等等,先别急。这里有句话我得拆开说清楚。"一个方向控制免责声明语气"——听起来像一个旋钮。
先打个比方:像调音台上的一根推子,推上去,这个语气就重。比喻挺好用,但它漏风。
第一处漏风:它不是一根神经。它是激活空间里的一条线,是几千个神经元同时活动拼出来的一个组合模式。你没法指着某个位置说"免责声明就在这儿"。
第二处漏风,而且更要命:这条线未必专门管"我是不是 AI"。它更可能是一根更泛的轴——谨慎、局限感、角色化的口吻——免责声明只是它这次最扎眼的出口。论文没把这层挑明,我也别替它补。
真正让我坐直的是它最后那句:模型关于自身的表述,不是关于模型本身的事实。这类话有一部分是聊天模板决定的,不是权重决定的。所以不该按字面理解模型的自我描述。
这句话听着抽象,落地其实很具体。以后谁拿"我让模型自己说了,它说她没感受"来下结论,我第一句就问:你那个 chat template 还开着吗。开着,你听到的就不是权重在说话,是模板在说话。这不是模型在撒谎,也不是它在说真话——它压根没在表态,它只是在把模板该有的下一段补完。
绕回来,这篇其实是冲着研究模型内省、自我报告的那拨人去的。做控制变量的时候,聊天模板是个混杂因素,得切掉。不然你测的是模型的自省,还是模板的惯性,从数据上根本分不出来。
哦对,它还同时被两个 workshop 收了,COLM 2026 那个 Efficient Reasoning,还有 KONVENS 的 Eval4SD。这种"小而准"的稿子能被两边接住,不意外。
自检留一个:现在你能不能用自己的话讲明白,为什么换一层聊天模板,同一个模型会听起来像另一个"我"?讲到哪卡住,告诉我。
想动手的话更简单:本地跑一个你熟的 instruct 模型,把 chat template 拿掉,问它同一个自我指涉的问题。看它变不变。没变也挺有意思——那说明那个方向可能已经写进权重里了,模板只是个放大器。
本期画开:你在模型身上听到的那个"我",有一半是那串特殊 token 说的。✨
