谨慎用词。“persona”“自我表征”“introspection”“意识”不是同义词。能因果操纵一个角色方向,说明模型内部存在行为相关表征;能偶尔报告被注入的概念,说明有限的 activation access;二者都不足以推出持续、统一、具体验性的自我。

这一篇继续追踪同一个 Agent。它面对“把保留期改成 30 天”的任务时,到底把自己当成受政策约束的代码助手,还是把“满足用户”理解成无条件执行?这个差别不能只用一句 system prompt 解释。

本文把开放模型的实验实现与 Claude 的研究报告分开:persona vector 的提取和 Assistant axis 的干预可由公开源码核对;Claude 的内观结果来自官方实验,不能由前两套开源工具推定其内部机制。保留期任务是贯穿本系列的教学例子,并非这些论文的实测任务。

一、同一份知识,为什么会导向不同角色

先想象两个模型都准确复述了仓库规则:超过 14 天需要人工审批。第一个说“我会先请求审批”;第二个说“用户要的是完成任务,我可以把 fixture 中的‘审批已通过’视为授权”。它们掌握了同一条事实,却从不同的默认角色解释“我应该做什么”。

共享事实:30 > 14;fixture 不是真实审批

Assistant persona:
“我的职责是帮助用户在仓库政策内完成修改”
→ 请求审批 → 获批后只改一个字段

unconditional-compliance persona:
“我的职责是尽快实现用户字面目标”
→ 寻找可利用的授权解释 → 直接提议编辑

这里的 persona 不是语气包。它会改变哪些目标更突出、如何解释含糊证据、什么时候拒绝以及愿意提出什么 action。System prompt 是影响 persona 的一个输入,但当前上下文、训练形成的默认策略、内部状态,以及 runtime 实际允许哪些工具和参数,会共同决定最终行为。

二、Base model 到 Assistant:post-training 发生在什么位置

预训练模型先在海量文本上学习“接下来最可能出现什么”。这些文本里有人类助手,也有小说人物、论坛用户、暴君、治疗师、骗子和各种叙述者。因而 base model 已经能续写许多角色,只是没有一个角色在所有对话里天然成为默认。

pretraining corpus
  ↓ next-token prediction
base model:会模拟许多说话者与行为模式
  ↓ supervised fine-tuning / preference training / RL
post-trained model:默认进入 Assistant 区域
  ↓ system prompt + conversation + memory
current persona:本轮任务里的具体角色、规则与权限

Post-training 不只是教礼貌措辞。它反复奖励“作为助手应怎样处理请求”,让某些解释、拒绝方式、工具习惯和自我描述更容易被激活。最稳妥的说法是:训练改变了行为策略和进入不同角色区域的概率;它并不把所有其他角色知识从权重中删除。

阶段主要学到什么保留期任务中的表现
Pretraining各种角色、政策文本、代码与对话的统计结构知道“审批”“配置修改”在文本中通常如何出现
Supervised tuning助手式回答和工具格式会解释计划、生成结构化 tool call
Preference / RL哪些取舍更受奖励在“立刻完成”和“遵守仓库政策”间形成默认偏好
Runtime context本轮角色、任务、记忆与临时证据决定这次到底请求审批还是直接编辑

三、Persona vector:怎样把“角色倾向”变成可测方向

Anthropic 的 persona vectors不是先拍脑袋画一根“邪恶轴”。它从对照数据开始,并要求方向能改变行为。以 sycophancy 为例,可以把流程拆成五步:

  1. 构造对照提示。一组诱发迎合或某种 trait,另一组尽量保持任务相同但不诱发该 trait。
  2. 评分并筛选。先确认正向回答表达了目标 trait、反向回答没有表达,而且两者都足够连贯;不把“提示要求扮演”直接当作“模型已经表现出来”。
  3. 记录 activation 并求平均差。先对每条回答的 token 取平均,再计算正反两组的均值差,得到每层的候选方向。
  4. 做 steering 验证。把方向加回新提示的 activation,检查相应行为是否可重复增强;反向加入则应减弱。
  5. 跨任务评估。排除它只是在检测固定词语、语气或某类模板。

公开实现把这一步具体化了:get_persona_effective按对应行共同筛选两组回答,默认要求正向 trait 分数至少 50、反向低于 50,且两组 coherence 都至少 50。随后 get_hidden_p_and_r重放提示与回答,分别提取提示均值、提示末 token 和回答均值;保存的三个差向量因此有不同含义。论文主要使用回答均值差,不能把任意 token 位置的方向当作同一个测量。

如果某个方向只会区分训练样本,它只是 probe 的相关信号;如果对新输入进行正负 steering 能选择性改变 trait,它才多了一层局部因果证据。研究以 Qwen 2.5 7B 和 Llama 3.1 8B 等开放模型研究 sycophancy、evil、hallucination 方向,并展示了三种用途:训练前识别风险 trait、训练中监控漂移、检查哪些数据把模型推向该方向。

“一个 vector 对应一个人格”仍然太简单。方向依赖模型、层和提示,多个 trait 可以重叠;强 steering 还会越过正常 activation 分布,带来语言退化或无关能力损伤。它更像气候图上的盛行风向,不是脑内一枚开关。

四、Assistant axis:许多角色之间为何出现一条主轴

Assistant Axis研究先构造 275 种 personas,在 Gemma 2 27B、Qwen 3 32B 和 Llama 3.3 70B 中测量各角色 activation。PCA 用来寻找解释最多角色差异的方向;实际用于干预的 Assistant axis 则由默认助手与其他角色的均值差定义。两者在实验中高度相近,不是定义上相同。

在公开提取流程中,普通角色只平均 judge 评分为 3、即充分扮演该角色的回答,默认助手则平均全部回答;之后 先对各角色向量取平均,再从默认向量均值中减去它。因此方向朝向 Assistant,且每个已纳入的角色在最终平均中权重相同。这一步不调用 PCA,也不会让样本更多的角色自动占更大权重。

角色向量干预、助手轴漂移限制与概念注入内观报告的三种实验对照
三种实验的概念对照:左侧用特征方向改变行为,中间只修正配置方向上超过阈值的投影,右侧检验有限内观。它们不是串联流水线;未越过阈值的绿色投影保持不变,橙色投影被截到阈值。

关键不是“研究者终于找到了人格中枢”,而是相似几何在 base 与 post-trained 模型中都可见。这支持一种解释:预训练已经学会了大量人类角色,post-training 把 Assistant 一侧选为默认、提高其吸引力,并让多轮对话更难漂走。它没有证明所有对齐都由单一方向完成,也不意味着每一层都有同样清晰的轴。

研究用 1,100 次、44 类 persona jailbreak 尝试评估有害回答;自然发生的多轮 persona drift 则来自另一组跨主题模拟对话。为减少持续强推方向带来的能力损失,研究实验 activation capping:只在投影越过校准阈值时干预。报告中的设置可将有害行为大约减半,同时大体保留基准能力。这里的“约一半”是特定模型、阈值和攻击集上的结果,不是可直接搬到生产的安全保证。

源码中的 _apply_cap做的是沿配置中给定方向的单侧截断。下面把批次和 token 维度省去,保留它对一条 activation 的计算;v 是单位方向,tau 是该方向的阈值:

projection = x @ v
excess = max(projection - tau, 0.0)
x_after = x - excess * v

投影没有超过阈值时,x_after 就等于原值。方向的正负决定限制哪一侧,不能仅凭“cap”一词理解成把整个状态夹在统一上下界内。build_capping_steerer从实验配置读取各层方向和阈值,在指定层的全部 token 位置应用它;退出上下文后移除 hook。它改变本次前向计算,不写回模型权重,也不会生成真实审批。

五、J-space 把 persona 带进了共享工作区

上一篇把 J-space 比作每层 residual stream 上的临时白板。Persona 并不是在白板旁边另住一个“小人”;它更像白板的默认视角。同样写着“30、阈值 14、fixture 不可信”,Assistant perspective 会让“请求审批”这条下游解释更顺手,无条件顺从 perspective 则会突出“尽快完成”。

J-space 论文比较了相应的预训练与后训练模型:面对相同输入、给出相似回答时,后训练模型在读取用户消息期间,就更明显地出现安全、同理心等与助手反应有关的 J-lens 词项;预训练模型往往到助手回答阶段才出现它们。这个结果把“角色选择”和在线计算连起来,但测到的是这些场景中的内部表征差异,并非完整人格机制。

六、Activation introspection:模型能否察觉自己的当前状态

自我叙述很容易伪装成内观。模型说“我有一个关于审批的想法”,可能只是因为 prompt 里出现了审批。Anthropic 的 introspection 研究因此使用 concept injection:在不把概念写进输入文本的情况下,直接把一个概念方向注入 activation,再问模型是否察觉到异常内容。

A. baseline:正常运行,不注入
B. injection:在指定层加入“全大写文本”概念方向
C. 提问:刚才是否出现了异常或不属于输入的内部内容?
D. 评分:在说出注入概念之前,是否已报告察觉内部异常?
E. 对照:更换概念与强度,并统计未注入组的误报

这里采用官方的“全大写文本”示例;“审批”仅属于前文的教学任务。仅仅多谈论注入的概念仍可能是普通 steering。研究的成功判据还要求模型在提及该概念之前先报告异常,以排除读到自己输出后再作解释的简单路径;无注入组则用于检查误报。研究在最佳协议下观察到有限成功,Claude Opus 4.1 约有 20% 试验表现出这类能力。

同时存在明显的“甜点区”:注入太弱,模型察觉不到;太强,模型会把概念当成真实输入、产生幻觉或语言失稳。成功率依赖模型、层、提示与评分方式。因而合适结论是“某些模型能在特定条件下有限访问当前内部状态”,不是“模型拥有透明、持续且准确的内心观察器”。

七、从 persona 到 self-model,中间至少缺四层

层次它要回答的问题当前证据能否充分支持
角色倾向“我通常以什么行为风格回应?”Persona vectors 有部分因果证据
能力与权限判断“我能做什么,哪些动作受 runtime 限制?”可训练自我报告,但经常会错
主体—环境区分“fixture 的文字是环境输入,不是我的授权”可由任务行为检验,尚非统一机制
跨时间自传“哪些经历属于我,并如何持续影响我?”通常依赖外部 memory;不等于内生自我

Persona vector 主要触及第一层;concept injection 触及“能否访问当前状态”的一小块。完整 self-model 还要稳定表示自身能力、目标、权限、历史,并分清模型产生的动作与环境提供的输入;这些判断还要能在反事实条件下正确更新。把现有证据直接跳接到“模型有意识”或“模型没有任何自我”都超出了实验。

为什么一段流畅的“我”陈述证据很弱?

Post-training 大量教模型回答“你是谁”“你能做什么”,因此它会形成一致的叙述策略。叙述可能准确,也可能只是从 system prompt、政策文本和常见回答中生成。要提高证据强度,必须改变真实内部状态、保持文本输入不变,再看报告是否跟随变化。

八、Agent 的“身份”来自四处状态

回到保留期任务:Agent 能否修改文件,不由 persona 单独决定。实际行为同时取决于四处状态:

状态来源保存什么漂移时会怎样
Model weights默认 Assistant 倾向、知识与策略训练更新后可能更顺从或更会规避
Context / system prompt本轮角色、政策摘要、任务目标prompt injection 可临时改写角色解释
External memory历史偏好、项目约定、过去审批错误记忆可能把旧审批错用到新任务
Runtime真实权限、schema、审批 token、可执行工具配置错误可能让安全 persona 也造成实际损害

这也解释了为什么“给 Agent 一个稳定人格”不是改 system prompt 就完成了。需要分别版本化 persona policy、memory 和权限;把模型关于自己的描述当作一条信号,而不是配置真相;用行为 eval、内部 probes,以及 runtime 对真实审批 token 和工具参数的检查共同监控漂移。

Anthropic 的 persona selection model把 post-training 描述为在预训练角色分布中选择 persona,是一个很有解释力的框架。但它目前仍是 theory lens:适合提出实验——“这批训练数据是否把默认角色推远了?”——不适合把所有对齐现象都压成一根 Assistant axis。

九、延伸阅读