穿透控制面:你写进 CLAUDE.md 的每一行,最后变成了模型内部的什么

上一篇找齐了 Agent 的控制面,这一篇把 X 光打进去:指令、示例、人格设定、测试反馈,穿过 tokenizer 之后分别控制了 Transformer 内部的哪个机制?结合 induction heads、task vectors、persona vectors 三条机制学证据链,得到一个统一答案——上下文控制的从来不是模型会什么,而是在一座冻结的能力库上做"寻址":选择并组合已有的回路。

上一篇把 Agent 的控制面找齐了:说明书(CLAUDE.md、skills)、笼子(权限、hooks)、激励(测试、CI)。但那篇停在了模型的皮肤外面。这篇回答一个更深的问题:这些旋钮拧下去,穿过 tokenizer 之后,到底改变了模型内部的什么?“模型读了指令然后遵守”是童话式的描述——模型内部没有一个”规则存储区”,也没有一个”遵守模块”。X 光打进去,看到的是三种完全不同的机制。而三条线索最后会合并成同一个答案。

入口只有一个:一切控制先变成 token

穿透之前先看清入口。把 Agent 的控制面全部倒进漏斗里过一遍:

  • CLAUDE.md、AGENTS.md、skills → 开机注入的 token;
  • 测试输出、编译报错、权限拒绝的提示 → 工具结果 token;
  • 你敲的每一句话 → token。

软控制和生态控制殊途同归:进入模型的只有一种东西——排成一列的 token。唯一的例外是硬控制(hooks、沙箱),它根本不进模型,直接拦在工具调用上——上一篇说它是驾驶舱里唯一确定性的部分,现在可以补上原因了:它的确定性恰恰来自”不穿过模型”。凡是穿过模型的控制,都要经历下面这段概率性的旅程。

于是问题化简为一个:一段 token,究竟控制了 Transformer 内部的什么?

进入模型后,每个 token 变成一个向量,逐层流过网络。你已经在 QKV 投影KV cache 两篇里拆过这套机械:每个 token 在每一层留下一对 Key/Value 向量,此后生成的每一个新 token,都会用自己的 Query 去”查询”前面所有 token 留下的 KV。这个物理图景是全篇的地基,值得用一句话钉死:

你写进上下文的指令,在模型内部不是”被存储的规则”,而是”被反复回看的参照物”——一段躺在 KV cache 里、等着被后续每个 token 的注意力查询的向量。

(一个旁证你其实已经写过:vLLM 的前缀缓存之所以能把 system prompt 的 KV 缓存下来跨请求复用,正因为”指令”物理上就是一段确定的 KV 向量——它是数据,不是逻辑。)

第一层穿透:指令控制的是注意力的竞争

“参照物”这个定位,立刻解释了软控制最恼人的性质:为什么指令会失灵

规则引擎里的规则要么执行要么报错;而 KV cache 里的指令要发挥作用,必须赢下一场持续的竞争——每生成一个 token,注意力的总预算是有限的(softmax 之后所有权重加起来是 1,masked softmax 那篇拆过),你的那行”不要修改测试文件”要和上下文里几万个 token 抢这份预算:刚贴进来的报错信息、大段的源代码、二十轮之前的对话。Liu et al. (2023) 那个著名的 “Lost in the Middle” 实验测得很直白:模型对上下文的有效注意力呈 U 形——开头和结尾强,中间凹陷;关键信息埋在长上下文中部时,性能显著下滑。

所以那些看起来像玄学的 prompt 技巧,穿透之后全是注意力力学:

  • 重要指令放开头或结尾 → 把参照物挪到 U 形曲线的高处;
  • 加粗、大写、重复 → 提高被注意力检索命中的显著性;
  • 上下文越长指令越容易被忘 → 竞争者变多,预算被摊薄;
  • CLAUDE.md 该短 → 每多一条低价值指令,都在稀释高价值指令的中签率。

这也给”指令失灵怎么办”画出了机制学的分界线:失灵不是模型”不听话”,是你的参照物输掉了注意力拍卖。你可以继续加价(重复、强调),但拍卖终究是概率性的——这就是为什么上一篇说,说明书管不住的事要换成笼子(hook),因为笼子不参加拍卖。

第二层穿透:示例控制的是”任务向量”的装配

指令是让模型”读”,示例(few-shot、skill 里的范例)走的是另一条更奇妙的通路。

机制学在这里有一条相当扎实的证据链。第一环是 Anthropic 的 Olsson et al. (2022):Transformer 在训练早期会突然长出一类叫 induction heads(归纳头)的注意力头,专门做一个动作——“上文出现过 A→B,现在又看到 A,就把 B 抄过来”。这个看似简单的匹配-复制回路,被证明和上下文内学习能力(in-context learning,模型不更新权重、只看上下文示例就学会新任务的现象)同时涌现、强相关:它就是”模型会模仿你给的例子”的机械基础。

第二环更深。Hendel et al. (2023) 和 Todd et al. (2024) 各自独立发现:给模型看几个示例(比如五对”法语→英语”翻译),这些示例在中间层会被压缩成一个向量——所谓 task vector(任务向量)。这个向量有多实在?实在到可以做外科手术验证:把它从这个会话的激活里”摘”出来,移植到另一个没有任何示例的会话里,模型就直接开始做翻译。示例本身可以扔掉,任务留在了那个向量里。

把这两环连起来,你写 skill 文档时发生的事就清晰了:

你精心挑选的范例,在模型内部被蒸馏成了残差流里的几个方向向量——一个向量就是一个”现在执行这个任务”的开关。(残差流可以粗糙地理解为每个 token 在层间携带的一块”工作内存”。)

这个透视顺便校准了一个实践直觉:为什么示例常常比说明有效?说明要靠注意力反复回看(第一层的拍卖),而好的示例会被压缩成任务向量、直接装配进当前的计算——说明是让模型”记得”,示例是给模型”上膛”。上一篇消化过的 von Oswald “上下文=临时权重更新”,在这里获得了它的具体形态:所谓临时权重,很大程度上就是这些即用即弃的任务向量。

第三层穿透:人格设定控制的是方向上的投影

还剩控制面里最像咒语的部分:“You are a careful senior engineer”。这种话到底动了什么?

先垫一句人话背景:可解释性研究的基本发现是,模型内部表达概念的单位不是某个神经元,而是激活空间里的方向(feature)——“金门大桥”是一个方向,“谄媚”是一个方向,概念比维度多,全都挤在一起(这就是 superposition,挤压存储)。2024 年 Anthropic 把 Claude 里”金门大桥”那个方向的激活强行调大,模型立刻变得三句话不离金门大桥——证明这些方向不只是相关物,是因果旋钮

2025 年的 persona vectors 论文(Chen et al., arXiv 2507.21509)把这条线直接接到了 system prompt 上。他们为”谄媚""捏造""恶意”这类人格特质各提取出一个方向向量,然后测量:当 system prompt 从”劝阻该特质”渐变到”鼓励该特质”,模型激活在对应向量上的投影随之移动——而且这个投影值能提前预测模型接下来会表现出什么人格。反过来沿向量注入激活,模型就直接表现出该特质,因果闭环。

所以”你是一位严谨的工程师”不是修辞、不是礼貌、不是仪式感——

人格设定是在给激活空间里的一组人格方向设置投影值。它字面意义上移动了模型内部的”状态旋钮”,只不过你是隔着 token 这层布在拧。

这也解释了人格设定的脆弱性:投影是被整个上下文共同决定的,几十轮对话、大量代码报错涌进来之后,你开头设置的投影会被稀释漂移——“聊着聊着人设崩了”在机制上和”指令被忘了”是同一件事的两个侧面。

生态控制的穿透:测试环触发的是训练时长出的策略

最后看最深的那层控制面:测试、编译器、CI。红色的测试输出变成 token 进入模型之后,控制了什么?

表面机制和第一层相同:报错 token 成为注意力的新参照物,条件化下一步生成。但真正值得透视的是为什么这一招如此有效——为什么 Claude Code 看到测试失败会执着地反思、重试、修复,而不是耸耸肩继续?

答案在训练侧。R1 那篇拆过:这一代模型都经历过可验证奖励的强化学习(RLVR)——在”行动→验证→奖励”的环境里,反思、自查、错了重来这些行为被奖励刻进了权重。于是推理时的测试环干的事情是:

测试反馈不教模型任何新东西(它是无状态的,会话结束什么都不留);它做的是复刻模型受训环境的形状,让权重里已经长好的”修复策略”回路被持续触发。

这是生态控制的机制学本质:不是控制模型内部的某个具体向量,而是用环境把模型钉在它训练分布中”策略行为最强”的那个区域里。写一套严格的测试,等于在推理时重新搭起了 RL 训练场的布景——模型一进这个布景,就自动进入受训时的角色。而跨会话真正的”学习”沉淀在哪里?在环境里:改好的文件、git 历史、你更新的 CLAUDE.md——七问说”真相在模型外面”,现在可以补一句:记忆和成长也在外面

三条线合并:控制的本质是寻址,不是写入

把三层穿透摆在一起看:

控制面的旋钮穿透进去是什么控制的内部机制
指令(CLAUDE.md 的规则)KV cache 里的参照物注意力的竞争与检索
示例(few-shot、skill 范例)残差流里的任务向量induction heads 的装配
人格(“你是谁”)人格方向上的投影特征空间的状态设置
反馈(测试、报错)复刻训练环境的条件触发权重里已有的策略回路

四行说的是同一句话:上下文对模型内部做的一切,都是”选择与组合”,没有一样是”写入”。注意力选择回看什么,任务向量选择执行什么,人格投影选择成为谁,测试环选择让哪套已训练的策略持续激活。权重是一座冻结的能力库,回路早已铺好;Agent 控制面的全部旋钮,拧到底都是在这座库上做寻址——用自然语言,在一个你看不见的向量空间里,检索并组合已经存在的程序。

这个统一答案把上一篇留下的两个悬念都收了口。其一,“带宽”一栏为什么上下文只配”中”:寻址永远调不出库里没有的东西——prompt 拧不出模型没有的能力,机制上就是这句话。其二,控制面的下一次迁移会去哪:如果隔着 token 拧投影终究是间接的,那么可解释性正在做的事(Golden Gate、persona steering)就是绕过 token、直接寻址——把布掀开,直接去拧那些方向。上一篇说这是”控制面考古”,现在看它更像控制面的下一站。

我的判断

证据强度要分层报。induction heads 是这里面最扎实的:小模型上是完整的回路级证据,大模型上是强相关证据。task vectors 在真实开源 LLM 上有干净的移植实验,但任务偏简单(翻译、反义词),“复杂 skill 也这样压缩”是我的外推,不是论文的结论。persona vectors 用的是 7-8B 的开源模型(Qwen、Llama),且出自 Anthropic——结论方向和 Golden Gate 互相印证,但”前沿闭源模型内部同理”仍是合理推测而非实证。von Oswald 的”上下文=临时权重”上一篇打过折,这里不重复。总体上:每一层穿透都有真实的机制学证据,但把它们拼成”寻址”这个统一叙事,是我的综合,边界处比论文本身更满。

一个反方问题值得接住:如果一切只是寻址,为什么长对话里模型偶尔表现出”学会了这个项目的做事方式”?我的回答:那是任务向量和参照物在会话内的累积效应,看起来像学习,本质仍是更充分的寻址——检验方法很简单,开个新会话,“学会的”东西全部蒸发。凡是新会话还在的,都在环境里(文件、CLAUDE.md),不在模型里。

行动

  1. 用”注意力拍卖”重审你的 CLAUDE.md:数一数有多少条指令。每一条都在稀释其他条的中签率——删掉可以变成 hook 的(改判确定性),删掉从没生效过的(它们一直在输拍卖),把最重要的挪到文件开头。
  2. 把一个屡教不改的说明改写成范例:找一条模型总不遵守的规则,别再加粗它,改成两三个输入→输出的示例放进 skill——让它从”参照物”变成”任务向量”,亲手验证第二层穿透。
  3. 深读一篇源头:Olsson et al. (2022) “In-context Learning and Induction Heads”。它是这条证据链的第一环,也是可解释性文献里少见的、从回路直通行为的完整论证。