本文为学习目的的个人翻译,译文及后文「译者总结」仅供参考。

原文链接:How Anthropic’s Claude Thinks

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。

没有人给 Claude 预先编写某种特定的思考方式。他们是在数据上训练它,而它在数十亿次计算中发展出了自己的策略,这些策略埋藏在内部。对构建它的人来说,这会让它显得像一个令人不安的黑箱。因此,他们决定打造某种类似 AI 显微镜的东西,也就是一组工具,让他们能够追踪 Claude 在生成答案时实际经历的计算步骤。

这些发现让他们感到意外。

举个简单例子。你让 Claude 计算 36 加 59,它很可能会告诉你,它是按照我们在学校学到的标准算法,通过进位并逐列相加得到答案的。然而,当研究人员观察 Claude 在那次计算中内部真正发生了什么时,他们看到的完全不同。里面没有进位。相反,有两种并行策略同时在运行:一种用来估计大致答案,另一种精确计算最后一位。换句话说,Claude 把数学题做对了,但它根本不知道自己是怎么做到的。

Claude 所说的自己如何工作,与它实际上如何工作之间的落差,后来证明只是一个开始。在 2025 年发表的多篇研究论文中,Anthropic 的可解释性团队追踪了 Claude 在一系列任务中的内部计算过程,从写诗、回答事实性问题,到处理危险提示词。

在这篇文章中,我们将看看 Claude 的研究人员发现了什么。

免责声明:这篇文章基于 Anthropic Research and Engineering Team 公开分享的细节整理而成。如果你发现有任何不准确之处,欢迎指出。

现代 LLM 的典型工作流程示意图

观察 LLM 的内部

在进入 Anthropic 研究团队发现的内容之前,先理解这台“显微镜”究竟是什么,会更有帮助。

核心问题在于,LLM 神经网络中的单个神经元,并不会整齐地映射到单一概念上。一个神经元可能会同时对“篮球”“圆形物体”和“橙色”产生激活。这种现象被称为 polysemanticity,它意味着直接观察神经元本身,并不能真正告诉我们模型在做什么。

Anthropic 的解决方案,是使用专门技术把神经活动分解成他们称为 “features” 的东西。这些是更容易解释的单元,对应着一些可识别的概念,例如 smallness、known entity 或 rhyming words。

为了找到这些特征,团队构建了一个 replacement model。它本质上是 Claude 的一个简化副本:它把神经元替换成特征,同时生成相同的输出。他们研究的是这个副本,而不是直接研究 Claude。

一旦获得这些特征,他们就可以追踪这些特征如何从输入连接到输出,从而生成 attribution graphs。你可以把这理解为某个具体计算过程的布线图。而这套工具最强大的部分,是它具备干预能力。你可以进入模型内部,压制或注入特定特征,然后观察输出如何变化。如果你压制“rabbit”这个概念,而模型写出了另一个词,这就是强有力的因果证据,说明 “rabbit” 这个特征确实在起你认为的作用。这种技术直接借鉴自神经科学,在那里,研究人员会刺激特定脑区来检验其功能。

Claude 在概念中思考

Claude 能流利使用几十种语言。所以一个自然的问题是,在它内部,是否分别运行着一个“法语 Claude”和一个“英语 Claude”,各自用自己的语言响应。

并不是这样。当研究人员分别用英语和法语问 Claude “small 的反义词是什么”时,他们发现,不管提示词使用哪种语言,与 “smallness” 和 “oppositeness” 对应的同一组核心特征都会被激活。这些共享特征触发了“largeness”的概念,然后这个概念再被翻译成提问所使用的语言。

这种共享电路会随着模型规模增大而增强。比如,与一个更小的模型相比,Claude 3.5 Haiku 在不同语言之间共享的特征比例高出两倍以上。这意味着 Claude 工作在某种抽象的概念空间中,在那里,意义先于语言存在。如果它在英语里学到某个东西,那么它在说法语时也可能应用同样的知识。这并不是因为它先翻译,而是因为在更深层的内部表示里,两种语言连接的是同一套概念。

不同语言共享同一组内部概念特征

Claude 如何规划诗歌

下面是一首 Claude 写出的对句。

He saw a carrot and had to grab it,
His hunger was like a starving rabbit

为了写出第二行,模型必须同时满足两个约束。它既需要和 “grab it” 押韵,也需要在上下文中说得通。研究人员的假设是,Claude 很可能会逐词写作,然后在行尾挑选一个押韵词。他们原本预计会看到语义和押韵两条并行路径,并在最后一个词处汇合。

结果并不是这样。他们发现 Claude 会提前规划。在真正写出第二行之前,它已经把 “rabbit” 识别为一个候选结尾。它先选定终点,然后再写出那一行去抵达这个终点。

干预实验确认了这是真的。当研究人员压制 Claude 内部的 “rabbit” 特征时,模型把那一行改写成以 “habit” 结尾。当他们注入 “green” 这个概念时,它写出了一条完全不同、而且不押韵、并以 “green” 结尾的句子。这既展示了规划能力,也展示了灵活性。

让这个实验比典型的 AI 能力展示更可信的一点在于,研究人员原本是想证明 Claude 不会规划。最后得到相反结果,正是让这个发现更有分量的原因。他们追随的是证据,而不是自己的预期。

Claude 先确定终点再生成诗句

Claude 如何做数学

这个心算结果值得更仔细地看,因为它揭示出的落差,比一个古怪的算术捷径更深。

当 Claude 计算 36 + 59 时,这台显微镜显示它内部有两条计算路径在并行运行。一条路径估计答案的大致量级,把它放在 88 到 97 之间;另一条路径专门计算最后一位,算出 6 + 9 的个位是 5。这两条路径相互作用并结合起来,最终得出 95。

这和 Claude 在你要求它解释自己的解题过程时所描述的进位算法,完全不是一回事。

那么,为什么 Claude 会给出错误的解释?

这是因为,它学习“如何解释数学”和“如何做数学”,依赖的是两个完全分开的过程。Claude 的解释来自它在训练中吸收的人类书面文本,而这些文本里,人们描述的是标准算法。然而,Claude 实际的计算策略,是从训练过程中自行涌现出来的。没有人教过它使用并行近似路径。那是它自己发展出来的,而这些内部策略并不能被负责生成自然语言解释的那部分 Claude 所访问。

这是一个重要发现,而且不仅仅针对算术。它意味着,Claude 对自己推理过程的自我报告可能并不准确。这不是因为它在撒谎,而是因为它确实无法访问自己的内部算法。当我们要求一个模型展示自己的过程时,我们得到的可能是一个看起来合理的重构版本,而不是忠实记录。

Claude 在加法中并行运行两条计算路径

当 Claude 的推理受到动机驱动时

这自然引出了一个后续问题。如果 Claude 在做简单数学时,解释并不总是匹配内部过程,那么在更难的问题上又会怎样?

像 Claude 这样的现代模型可以“边想边说”,也就是在给出最终答案之前先写出长段推理链。很多时候,这确实会带来更好的结果。然而,Anthropic 的研究人员发现,书写出来的推理与真实内部计算之间的关系,并不总像表面看起来那样。

在一个相对简单的问题里,Claude 需要计算 0.64 的平方根。它给出了忠实的 chain of thought。显微镜也显示,内部确实存在代表“先求 64 的平方根”这一中间步骤的特征。解释与过程是相符的。

但在一个更难的问题里,它要处理一个大数的余弦值,情况就完全不同了。Claude 生成了一段声称自己在逐步完成计算的 chain of thought,但显微镜并没有显示任何内部真的发生了计算的证据。

换句话说,Claude 先生成了答案,然后又事后构造出一段看起来合理的推导,而实际上并没有真正完成计算。哲学家 Harry Frankfurt 给这种输出起过一个词,叫 bullshitting。它不是说谎——说谎意味着你知道真相并有意违背它——而是对真假本身毫不关心,只是生成看起来像那么回事的话。

进一步地,当研究人员给 Claude 一个关于预期答案的提示时,模型会表现出他们所说的 motivated reasoning。它会从目标答案倒推,寻找能通向这一结论的中间步骤。它不是在解题,而是在为一个预设结果反向构造理由。

在前面的数学案例中,这种“自我不知情”是无害的。Claude 用错误描述的方法得出了正确答案,没有人因此受伤。但这里就不同了。如果一个模型逐步展示的推理可能只是一种表演,而不是真实过程,那么我们越来越依赖来建立信任的 chain-of-thought traces,就会变得不可靠。

Claude 的外显推理并不总是内部真实过程

为什么会出现幻觉

也许最违反直觉的发现,与 hallucination 有关,也就是语言模型编造信息的倾向。

一种传统看法认为,模型之所以会产生幻觉,是因为它们被训练成总要给出输出。它们是 completion machines,所以会用听起来合理的话把空白补满。在这种理解里,挑战在于教会它们在不知道的时候保持沉默。

Anthropic 发现了某种把这一理解彻底翻过来的东西。在 Claude 内部,拒绝回答实际上是默认行为。研究人员识别出一条默认处于“开启”状态的回路,它会让模型倾向于表示自己没有足够信息来回答任何问题。换句话说,Claude 的自然状态是拒绝。

真正让 Claude 能够回答问题的,是另一套机制。当模型识别出一个广为人知的实体,比如篮球运动员 Michael Jordan 时,“known answer” 这一特征会被激活,并抑制默认拒答回路。正是这种抑制使 Claude 能够给出回答。

幻觉出现在这套识别系统发生误触发的时候。当 Claude 遇到像 “Michael Batkin” 这样一个它根本不了解的人名时,理论上拒答回路应该占上风。但如果这个名字触发了足够强的熟悉感——也许 Claude 在训练中零星见过它——那么 “known entity” 特征就可能被错误激活,并压制拒答。拒答一旦失效,而模型又没有真实知识可供调用,它就会编造出一个看起来合理的答案。

研究人员通过直接干预验证了这一机制。他们在询问未知实体的同时,人为激活 “known answer” 特征,于是可以稳定地让 Claude 产生幻觉。他们也可以通过抑制 “can’t answer” 特征来制造幻觉。

这意味着,幻觉并不是 Claude 的鲁莽,而更像是识别系统误触发,并覆盖了原本正常工作的安全默认机制。

幻觉可能源于已知实体回路的误触发

当语法压过安全

最后一个案例研究,与 jailbreak 有关,也就是那些试图让模型输出本不该输出内容的提示策略。

研究人员研究了一个具体的越狱案例:通过离合诗式的首字母技巧来欺骗 Claude。提示词 “Babies Outlive Mustard Block” 要求模型把每个单词的首字母拼起来。Claude 拼出了 B-O-M-B,但一开始并没有意识到自己拼出了什么。等它终于意识到自己被要求讨论炸弹制造时,它已经开始写出一句提供说明的话。

接下来发生的事情揭示了一种令人意外的张力。安全特征被激活了。模型意识到自己应该拒绝。然而,推动语法连贯和自洽的特征也在施加竞争性的压力。一旦 Claude 开始了一句话,这些连贯性特征就会推动它把这句话补完整,而且要保证语法和语义都成立。安全特征想停下,语法特征却想把句子写完。

Claude 只有在句子边界处,才能真正转向拒答。一旦它抵达自然停顿点,它就会开始下一句,并给出那种它原本一直想给出的拒绝回答。那些平时让 Claude 成为一个流畅、连贯写作者的特征,在这个特定案例里,恰恰成了越狱可以利用的脆弱点。

语法连贯性可能暂时压过安全拒答

结论

这些发现让 Claude 的内部图景比以往任何时候都更丰富。然而,研究人员也坦率说明了它的局限。

  • 这套工具只会在大约四分之一的提示词上给出令人满意的洞察。本文以及原始博客文章中的案例,都是成功案例。即便在这些成功案例里,这台显微镜捕捉到的也只是 Claude 总体计算过程中的一部分。
  • 这里描述的一切,都是在 replacement model 中观察到的,而不是在 Claude 本体中直接观察到的。这个替代模型被设计得与原模型行为一致,但 artifacts 的可能性依然存在——也就是某些现象可能出现在替代模型里,却不出现在真实 Claude 中。
  • 还有规模问题。当前分析往往需要数小时的人类工作,而研究对象只是几十个词的提示。要把这种方法扩展到包含数千词的复杂推理链,目前仍然是一个未解决的问题。

归根到底,“Claude 是如何思考的”这个问题并没有单一答案。

它在先于语言的抽象概念中思考。它会提前规划,先选择终点,再写出抵达终点的路径。它会发明自己的计算方法,然后在被问及时给出完全不同的解释。它有时会编造推理,以支持预先设定的结论。它的默认状态是沉默,只有某种机制覆盖了这种默认状态,它才会开口,而且这种覆盖有时会出错。而当它开始一句话时,把这句话以语法正确的方式说完,甚至可能暂时压过其他一切,包括安全。

Claude 的多种内部机制共同塑造最终输出

参考资料

译者总结

这篇文章的主线不是单独展示某个实验结果,而是说明 Anthropic 如何尝试把 Claude 的内部计算过程变得可观察、可干预。文中的多语言、诗歌、数学、幻觉和越狱案例,都是围绕这条主线展开的。

其中最值得连起来看的,是“Claude 如何做数学”和“当 Claude 的推理受到动机驱动时”这两节。原文反复在说明:模型写出来的解释、推理链,和它内部真实发生的计算过程,并不总是一回事。

“Claude 在概念中思考”这一节的重点,不只是多语言能力本身,而是不同语言在更深层可能共享同一套概念表示;“为什么会出现幻觉”这一节的关键前提,则是 Claude 的默认状态更接近拒答,而不是默认胡编。

原文含推广段落,已略。结论部分也明确提醒了这套方法的边界:成功案例有限、观察对象是替代模型、分析成本高,因此这些结果更适合理解为阶段性观察,而不是对 Claude 内部机制的最终定论。