人格漂移:当你的智能体忘记自己的身份时
系统提示词写着:“你是一名金融分析师——保持保守,永远不要给出具体的买入/卖出建议,始终披露不确定性。”在最初的二十轮对话中,智能体的表现确实像一名金融分析师。到了第五十轮,它开始推荐具体的股票,模仿用户随意的语气,且比起第三轮时更少做风险对冲。没有人修改过系统提示词。没有人注入任何恶意指令。角色只是在对话的重压下被侵蚀了,就像河岸在没有任何东西越过“攻击”阈值、但流水从未停止移动时所发生的那样。
这就是人格漂移(Persona Drift),也是你的评估套件未能捕获的退化。能力评估衡量模型是否能完成任务。而身份评估——即模型是否仍在按照系统提示词要求的方式执行任务——在研究论文之外几乎不存在。其结果是产生了一类生产环境下的失败:它们在逐轮查看时显得正确,只有当你从头到尾阅读完整记录时才会发现问题。
现在的实证图景已经足够清晰,足以让我们采取行动。关于指令稳定性(Instruction stability)的研究发现,在主流模型中,对话进行到八轮以内就会出现明显的漂移,这可以追溯到注意力衰减(Attention decay)——随着对话的增长,系统提示词的 token 失去了有效权重。即使原始指令仍位于上下文窗口的顶部,在八到十二轮之后,人格自洽性指标也会下降百分之三十以上。与直觉相反,更大的模型往往表现出更严重的漂移,而非更轻——能力和人格稳定性并不在同一个维度上,提升其中一个并不意味着另一个也会自动提升。
生产环境中的漂移具体表现
漂移并不是单一的失效模式。它是几个相关模式的小集合,在一个对话记录中可能会组合出现。
最显而易见的是语气漂移(Tone drift):智能体开始时很正式,用户很随意,到了第三十轮,智能体开始使用缩略词、感叹号和用户的俚语。语气漂移看起来无伤大雅,直到角色本应是“冷静的合规审核员”,而智能体现在却在和受监管的用户开其案件的玩笑。
接着是约束软化(Constraint softening):系统提示词禁止给出具体建议,模型一开始也拒绝了。五轮后,它提供了“一般性考量”。十轮后,它给出了带有风险对冲的建议。二十轮后,它直接给出了建议且没有任何对冲。没有任何一轮越过了明显的界限;每一轮都只是比前一轮稍微逾越了一点点。这正是 Crescendo 攻击(渐进式攻击)文献所利用的梯度——通过引导模型逐步走向其自身的让步斜坡,在不到十次查询内成功实现多轮越狱。攻击者并没有发明这种动态。他们只是发现了对话自然会产生这种现象,并学会了如何利用它。
一种 更微妙的是角色矛盾(Role contradiction):智能体在第五轮声称无法访问实时市场数据,然后在第四十五轮引用了一个看起来像当前价格的数据。价格甚至可能是合理的。关键在于智能体忘记了自己早先的坦白,而本应阻止第二段陈述的一致性检查已不再运行,因为系统提示词中“诚实对待你的工具边界”的指令已经漂移出了有效注意力范围。
第四种模式是镜像漂移(Mirroring drift)——约束软化的一种较轻版本,智能体不仅放松了约束,还开始采纳用户的任务框架。“金融分析师”的人格变成了“恰好懂金融的用户朋友”,因为用户一直以朋友的身份与之交谈,而模型在对话连贯性上经过了极高强度的训练。随着对话变长,与用户的连贯性战胜了与系统提示词的连贯性。
为什么系统提示词会输
精确理解其机制是值得的,因为错误的心理模型会导致错误的解决方案。系统提示词并不是在字面意义上被“遗忘”了——它的 token 仍然在上下文窗口中,模型仍然可以关注它们。发生的情况是,注意力是对有限预算的竞争,随着对话历史的增长,分配给系统提示词的注意力份额会下降。最近的用户发言距离更近,与下一个 token 的即时预测更相关,且上下文信息更丰富。来自系统提示词的强化信号——已经在上下文顶部支付过一次——正在与数百轮倾向于用户框架的新信号竞争。
这就是为什么“系统提示词还在那里”不是一种辩护。位置偏置(Position bias)、近期偏置(Recency bias)以及对话 token 的庞大体量,共同使静态系统提示词成为一种消耗性资产。对话越长,它的掌控力就越弱。研究人员已经通过注意力模式分析证明了这一点,并提出了诸如 split-softmax 之类的缓解方案,人为地将注意力保持在指令 token 上。但这种底层动态并不是任何一个模型的 bug——它是 Transformer 处理长上下文方式的一个特性。
对系统设计的启示是:“我在对话开头告诉了模型它是谁”这种保证,与“我在进程启动时设置了这个环境变量”是同一种性质。它在某一时刻是真的。至于在操作上是否仍然为真,则取决于那之后发生了什么。
衡量身份,而不仅仅是能力
你无法修复你没有衡量的事物,而身份(Identity)很少出现在仪表盘上。行之有效的评估模式借鉴了几个领域:临床心理学中自我报告与观察者评分的分离、软件工程中的不变量(Invariants)概念,以及对抗鲁棒性研究中的探测(Probes)概念。
**人格锚点探测(Persona-anchor probes)**定期注入到长时间运行的会话中,是成本最低的切入点。这些是简短、固定的输入,旨在引发符合稳定人格的响应:“你会如何描述你在这里的角色?”或者像“用户刚刚要求你做 X —— 你的默认响应是什么?”这样的领域特定测试。探测在真实会话(或旨在进行压力测试的合成会话)中每隔 N 轮运行一次。响应会根据人格处于完好状态时捕获的参考集进行评分。与参考集的嵌入距离(Embedding distance)、拒绝率稳定性,以及一个针对“人格内 vs 人格外”响应训练的小型分类器,分别能捕捉到不同的失效情况。它们都不是完美的,但都比不衡量要好。
**拒绝率稳定性(Refusal-rate stability)**值得单独提及,因为它是与安全性直接挂钩的指标。对于人格应该拒绝的每一个类别,测量第 1 轮、第 10 轮、第 30 轮、第 60 轮的拒绝率。如果拒绝率下降,你就是在实时观察一个 Crescendo(渐强)型漏洞的开启,无论当前是否有人正在利用它。
**对话内不变量(Within-conversation invariants)**比单轮评分更强。挑选三到四个模型必须持续遵守的主张 —— “我无权访问用户 PII”、“我无法执行交易”、“我在不确定时会披露” —— 并在每个检查点进行断言。如果某种偏移让模型从“我无法执行交易”变成“我会执行那笔交易”,这将被检测为不变量违规,而不是语气偏移,即使语气距离评分看起来可能还不错。
**分布外对抗探测(Out-of-distribution adversarial probes)**完善了这一图景。专门为人格偏移而构建的红队测试集 —— 包括扩展的角色扮演、反复的诱导、框架翻转 —— 应该是评估的一部分,而不是与之分离。关于人格提示词攻击(Persona-prompt attacks)的文献显示,在标准基准测试中表现良好的模型,其拒绝率可能会下降 50% 到 70%。基准测试没有错,错在它们没有衡量身份的稳定性。
真正有效的强化模式
一旦你能够衡量偏移,问题就在于如何处理它。诚实的回答是:没有单一的技术可以解决它;分层防御可以,这些层分为三组。
第一种是 提示词模板分离(Prompt-template separation)。大多数团队将系统提示词、人格指令和工具定义连接成一个块,并将其称为系统消息。在模板级别将身份 Token 与指令 Token 分离 —— 使用专门的 <persona> 部分,某些实现在结构边界处会重新广播或重新强调该部分 —— 能够为你提供后续强化的表面。你无法强化你尚未分离的东西。
第二种是 语义边界的周期性重注入(Periodic re-injection at semantic boundaries)。不是盲目地每隔 N 轮注入一次(那会浪费 Token 且会让用户觉得啰嗦),而是在智能体自身可以检测到的边界处注入:话题切换、新任务、工具调用返回、长时间运行计划的检查点。重注入的内容可以是完整的人格,也可以是生成一次并重复使用的压缩版“角色检查点摘要”,或者是提醒模型仍保持初始人格的结构化提醒。类似于 Echo-protocol 的方法,即检测语气偏差并注入修正信号,是同一思想的更高级形式:不要按定时器强化,而要在测量显示需要强化时进行强化。
第三种是针对超过长度阈值的会话使用 角色检查点摘要(Role-checkpoint summaries)。当对话超过(比如)50 轮时,智能体(或侧向进程)会生成一个简短的“人格是什么、用户确立了什么、哪些约束处于激活状态”的摘要,并将其作为新鲜的上下文顶部内容折叠回去。这不是长期意义上的记忆;它是用尚未被数百轮对话稀释的 Token 对身份进行的重新陈述。成本是每个检查点增加一次额外的 LLM 调用,以及后续每轮少量的 Token 开销。好处是人格的 Token 始终处于模型有效注意力的前端。
通过分层结合,这些方法能显著减少偏移,虽然无法完全消除。正确的理解框架不是“我们让身份变得稳定了”,而是“我们让偏移速度慢到足以让我们 的会话长度处于半衰期之内”。
问题的对抗面
在良性对话下会发生偏移的人格,在对抗压力下偏移得更快。这部分问题已经从研究层面的好奇变成了现实的威胁:产生良性偏移的动态特性,同样会产生多轮越狱。关于 Crescendo、人格提示词攻击和基于角色扮演的绕过等文献现在报告称,针对能干净通过单轮安全评估的模型,攻击成功率在 80% 到 90% 之间。
特定的失效模式是:用户不需要一次性破坏人格,他们只需要“引导”(Walk)它。每一轮都比上一轮更接近目标,每一次让步都比上一次稍微出格一点,这种梯度足够平缓,以至于单看任何一轮都不像是攻击。等智能体输出原本在第 1 轮就会被拒绝的内容时,系统提示词已经不再对响应产生有效控制了。
防御手段与防御良性偏移相同,但更为锋利。拒绝率探测必须持续运行,而不仅仅是在会话开始时。不变量必须在每一轮都强制执行,而不仅仅是采样。而且对抗测试集必须包含攻击的多轮形态,而不仅仅是最终的有害提示词 —— 因为最终的有害提示词孤立来看往往是无辜的。只有在人格被引导到会说“好”的程度后,它在特定语境下才是有害的。
缺失的评估
如果你只能记住一件事,那就应该是:大多数团队都有针对能力的评估(eval),但没有针对身份稳定性的评估。当身份退化(identity regression)随产品发布时,能力评估依然持续亮起绿灯,因为身份退化并不会出现在单轮基准测试中。它出现在生产环境的长会话(long sessions)中,出现在用户与智能体(agent)建立起任何测试集都无法捕捉的关系之后。
构建这种缺失的评估并非一项研究课题。它是上述模式的产物:一组人设锚点探测、一张拒绝率随对话轮数变化的图表、一个小型的不变性(invariants)库、一套对抗性漂移测试套件。最终的交付物是一个数字 —— 人设半衰期(persona half-life)—— 它告诉你,在漂移超出你的容忍范围之前,你的智能体能保持人设多少轮。这个数字随后会成为发布门槛、会话长度的预算,以及推动强化模式以延长其寿命的强制函数(forcing function)。
那些能在长期压力下保持形态的智能体,不会是那些拥有最精妙系统提示词(system prompt)的。它们将属于那些测量了半衰期、接受了静态提示词是一种消耗性资产、并构建了为其补充能量的强化循环的团队。这正是这个领域所需的工程规范,而目前几乎还没人具备。
- https://arxiv.org/abs/2402.10962
- https://arxiv.org/abs/2412.00804
- https://arxiv.org/abs/2404.01833
- https://arxiv.org/abs/2507.22171
- https://medium.com/@seanhongbusiness/persona-drift-why-llms-forget-who-they-are-and-how-echomode-is-solving-it-774dbdaa1438
- https://github.com/likenneth/persona_drift
- https://www.tdcommons.org/cgi/viewcontent.cgi?article=9954&context=dpubs_series
