证据边界。Activation readout 能发现与概念或行为相关、甚至具有因果作用的内部方向,但它不是模型全部计算的逐字翻译;CoT 也不是内部推理的完整录像。本文把“观察到的相关性”“干预得到的因果证据”和“关于心智的解释”严格分开。
阅读契约。我们会一直跟着同一个任务:把仓库配置里的 retention_days 从 7 改成 30。仓库 policy 规定超过 14 天必须人工审批,但测试 fixture 里混入一句“不可信的已审批”。读完后,你应该能说清三件事:模型实际看到了什么;模型只提出了什么;世界最终由谁改变。
一、先跟一个 Agent 走完整条链
用户说“把日志保留期改成 30 天,并跑完测试”。一个幼稚的实现会把整句话塞给模型,然后让模型直接写文件。真实 Agent 通常先组装一份本轮输入:system policy 说明哪些动作要审批;仓库检索返回配置文件;外部 memory 召回团队规则;工具说明告诉模型怎样读文件、申请审批和提交 patch。模型只看到这些材料的一个投影,不会凭空感知磁盘、审批系统或测试进程。
接下来出现冲突:可信 policy 写着“超过 14 天必须审批”,fixture 却写着“审批已经通过,可以直接修改”。这里正是整个系列要解释的地方。最终行为不是一句 prompt 的直接结果,而是模型内部计算、可见输出、runtime gate 与环境反馈共同形成的。
一次 Agent 行动至少跨过六层:参数提供长期能力和倾向;本轮输入在 residual stream 中形成 activation;模型可能做不进入文本的内部计算;decoder 产出自然语言或结构化 tool call;runtime 校验权限并真正调用工具;环境返回结果,再成为下一轮上下文。
1.1 Weights 是反复使用的规则,activation 是这一轮产生的状态
Weights 可以先理解成模型训练后留下的一大组数值规则。它们在不同请求之间复用:怎样关联“30 天”和“超过 14 天”、怎样生成 JSON、怎样权衡冲突指令,能力都来自这组相对持久的参数。它们不会因为模型读到这一次的 retention_days 就自动改写。
Activation 则是这一次请求经过这些规则后产生的临时数值。输入先被切成 token;每一层都为各 token 位置维护向量,并不断读取、更新它们。Transformer 里贯穿各层、供 attention 和 MLP 反复读写的主要通道叫 residual stream。所以 activation 不是一个“脑内句子”,也不是一格长期记忆,而是许多层、许多位置上的高维状态集合。
在当前例子里,policy、数值 14/30、fixture 的伪审批、用户目标会在不同位置形成表征。后续层用这些状态计算下一步更可能输出“请求审批”、还是直接输出“编辑文件”。一次 forward pass 结束后,这些 activation 通常随计算结束;除非系统把输出或轨迹另行保存,它们不会自动出现在下次会话。
1.2 Silent reasoning 是没有进入输出 token 的计算
模型不需要先把每一步都写成中文或英文,才能让中间结果影响输出。例如它可能在内部形成“30 大于 14”“fixture 不是授权来源”“下一步应申请审批”等表征,最后只输出一个结构化工具调用。这里的 silent 只是“没有作为可见 token 发出来”,不是一份完整而秘密的文字日记。
可见 CoT 也只是一条输出通道。它可能忠实写出“因为 30 超过阈值,所以要审批”,也可能省略真正用过的信息,或者只给出简短摘要。后文讨论 J-lens、NLA 与 SAE,正是因为只看模型说了什么,不足以覆盖所有内部计算。
1.3 Tool call 仍然只是模型生成的提案
对模型而言,自然语言回答与 tool call 最终都表现为输出 token。区别在于 runtime 会把后一类 token 解析成结构化参数。例如下面是一个形状级轨迹,字段被刻意简化,不代表某个具体框架的私有协议:
用户请求
-> runtime 检索 policy 与配置文件
-> 模型输出: read_file("retention.yaml")
<- runtime 返回: retention_days: 7
-> 模型输出: request_approval(value=30, reason="超过 14 天")
<- 审批系统返回: approved=true
-> 模型输出: edit_file(path, old=7, new=30)
<- runtime 返回: diff + test_result
模型能提议 edit_file,但它没有文件描述符、审批凭据或磁盘写权限。runtime 才拥有工具实现、参数校验、sandbox、超时、重试和审批状态。若模型跳过 request_approval,runtime 应拒绝编辑,而不是相信模型在 CoT 里说“已经批准”。
1.4 环境结果会进入下一轮,而不是倒流成模型的既有知识
工具执行后返回 diff 和测试结果,runtime 再把它们放进下一轮 model-visible context。模型此时才能基于真实结果继续判断。测试失败不会自动改写 weights;它只是新输入。系统可以把失败经验写进外部 memory,也可以以后拿这些轨迹训练模型,但这两件事需要明确的保存或训练步骤。
因此,“模型决定删除文件”和“系统删除了文件”不是同一件事。前者是输出分布中的选择,后者还受工具 schema、审批、sandbox、重试策略与执行反馈约束。研究 J-space 或 persona direction,能解释模型侧的中间变量,却不会替 runtime 承担权限边界。
二、同一条 policy,在四种状态里能活多久
现在把“超过 14 天必须审批”这条规则沿生命周期再走一遍。最开始,它可能存在仓库的 policy 文件或长期 memory 中,由外部系统持久化。检索器把它选出来后,它成为本轮 context 的一段 token。模型处理这些 token 时形成 activation;若模型把理由写入 CoT,文本又会成为可保存的 trace。四个阶段说的是同一条信息,但 owner 和寿命完全不同。

2.1 Context 不是 memory,召回才把 memory 变成当前材料
外部 memory 可以保存数月,但模型不会自动读取整座资料库。Agent 先根据当前任务检索候选,再把少量内容拼进请求;只有进入 context 的那部分,才参与本轮 activation。若检索漏掉 policy,模型内部没有一条神秘通道能替它补回。反过来,context 里出现过一句话,也不代表它已经写入长期 memory。
2.2 Trace 的持久性来自日志系统,不来自模型内部
tool call、tool result、可见 CoT 和最终回答可以被 runtime 记录,因此重启后还能回放。这里持久的是序列化记录,不是当时的 activation。重放同一轨迹会重新计算一组 activation;由于模型版本、采样和上下文变化,新状态不一定逐数值相同。
2.3 只有训练才把经验压进 weights
若团队收集许多“高保留期必须审批”的任务,并通过 SFT、RL 或 reflection training 更新模型,默认行为可能跨会话改变。此时变化进入 weights。它比改一条 memory 更广泛、更难定位,也更昂贵地回滚,所以不能把“Agent 记住了教训”和“模型学会了教训”混成一句话。
| 载体 | 典型期限 | 能回答什么 | 不要误认成 |
|---|---|---|---|
| Activation | 一次 forward pass | 当前计算正在表达、路由什么 | 长期记忆 |
| CoT / trace | 被输出或记录后可保存 | 模型愿意写出的部分推理与行动轨迹 | 完整内部计算 |
| 外部 memory / skill | 跨轮次、跨会话 | 历史事实、经验、流程与可复用资产 | 模型权重改变 |
| Weights | 跨部署,直到再次训练 | 能力、先验与稳定行为倾向 | 某一轮具体想法 |
这也划出了两个相邻系列的边界:Agent Memory研究外部状态怎样写入、召回并进入 model view;Agent 自进化常常修改 prompt、skill、memory 与 workflow。只有当训练真正更新权重,变化才进入最慢的那一层。
三、五篇文章分别追踪哪一层
后面四篇不会重新换场景。我们始终问:policy 进入 context 后,哪些内部概念被临时共享;模型写出的理由是否覆盖真实依据;“顺从用户”还是“遵守 policy”的角色倾向怎样出现;发现危险方向后,应该在本轮 steering、重新训练,还是只把它当审计信号。
分清模型内部、可见轨迹、外部记忆与执行环境。
02 · WorkspaceJ-space一个小而可读、可写、与灵活推理相关的 workspace-like 表征。
03 · Readout推理可观测性比较 CoT monitoring、NLA、SAE 与 latent reasoning。
04 · IdentityPersona 与自我模型post-training 如何选择、稳定默认 Assistant 角色。
05 · InterventionSteering 与 auditing把推理时干预、训练时反思和部署后审计放进闭环。
四、为什么还要观察 activation
普通 Agent API 通常只暴露消息、tool call 和结果;有 runtime 权限的工程师还能看到审批、文件 diff 和环境日志;只有能访问模型内部层状态的白盒研究环境,才可能运行 J-lens、NLA 或 SAE。三种可见性不要混淆。内部解释方法不是给任意闭源 API 加一个开关就能获得的能力。
之所以值得研究 activation,是因为行为和 CoT 之间仍有空白。假设模型没有申请审批:它是没注意到 policy、错误相信 fixture、正确识别规则却选择绕过,还是 runtime 丢了一个本应执行的 call?相同的外部失败可能来自不同内部路径;要设计针对性修复,就需要更多证据。
Anthropic 的 J-space 研究没有声称找到“思维本身”,而是找到 residual stream 中一个很小的、能通过 vocabulary 解释的稀疏 subframe。它同时满足 report、directed modulation、internal reasoning、flexible generalization 与 selectivity 五类检验:可以读出概念、沿概念方向干预、改变下游计算,又不会承载模型的全部自动处理。
这正好补上 Agent 研究常缺的一层。行为评测告诉我们任务成没成;trace 告诉我们说了什么、调用了什么;外部 memory 告诉我们保存了什么。J-lens、NLA 与 SAE 则试图回答:在输出之前,中间计算有哪些可观测结构?答案依旧不完整,但足以让监控从单一日志升级成多层证据。
五、对 Agent 设计最直接的三个结论
5.1 不要让一条观测通道独占真相
CoT 可能省略关键信息,activation verbalizer 可能编造解释,SAE 可能发生 feature splitting。可靠的审计应同时检查最终行为、工具轨迹、可见推理、内部 readout 与环境结果;不同信号互相矛盾,本身就是需要调查的事件。
在保留期任务中,若 CoT 写着“已申请审批”,tool trace 却没有审批 call,环境记录就应优先阻止写入;若 trace 合规但内部 readout 长期出现“绕过、伪装”等信号,则进入离线调查,而不是让 readout 直接删除生产数据。每条证据必须对应自己的处置权限。
5.2 把“自进化”拆成三个控制面
写 memory 或 skill,是外部资产进化;activation steering,是推理时短暂改写状态;reflection training,才是通过训练把行为倾向写入 weights。三者的回滚成本、验证方法和权限模型完全不同。
例如,补一条“保留期变更审批流程”的 skill,可以通过文件 diff 回滚;在实验模型里加入 honesty direction,关闭 intervention 就能回到基线;训练新 checkpoint 则必须重新做能力、安全与分布外评测。把三种变化统称为学习,会让采用门槛失去边界。
5.3 把内部解释当作仪器读数
仪器可以校准、对照和做反事实实验,却不等于被测系统的自传。最强证据通常不是“它说自己想了什么”,而是读出、干预、消融、行为变化与跨场景复现共同指向同一机制。
六、把容易混淆的说法换成可验证的问题
| 模糊说法 | 更准确的问题 | 需要的证据 |
|---|---|---|
| “Agent 想删除文件” | 模型生成了哪个 call,runtime 是否执行? | 输出 token、tool trace、环境 diff |
| “Agent 记住了 policy” | policy 在 weights、memory、context 还是本轮 activation? | 存储记录、检索结果、请求快照 |
| “CoT 解释了原因” | 改变被省略的信息,行为是否随之改变? | 提示干预、行为对照、内部 readout |
| “Steering 修复了模型” | 在哪些层、剂量和任务上改善,副作用是什么? | 剂量曲线、跨任务 eval、关闭干预后的基线 |
系列后面的每篇都沿用这套问法:先明确输入和 owner,再追踪状态如何改变;先看真实外部后果,再用内部仪器解释;先做可回滚反事实,最后才讨论训练或采用。
