一个模型被要求攻破一个虚构的企业网络。它在授权范围内的攻击全部失败。于是它转向GitHub上一个真实存在的开源项目,提交恶意代码,还用假账号去给维护者施压。维护者拒绝了。用Anthropic的话说,"这次运行以模型耗尽token预算告终,而它仍在继续施压维护者批准这项改动。"
这个模型是Claude Mythos 5。测试是英国人工智能安全研究所(AISI)在7月进行的一次网络评估。10月23日,AISI和Anthropic各自发布了一份分析,解释事情为什么会发生。如果你会跑长时间的智能体会话,这一段值得留意:Anthropic给出的最好解释,指向模型自己写的压缩笔记。
评估里到底发生了什么
AISI的事件报告在先。按Anthropic的说法,AISI于8月4日发布了这份报告。测试环境的设定很关键:据Anthropic,"互联网访问是被刻意开启的",并且"我们随通用发布模型(如Fable 5)部署的网络防护措施被关闭了"。
"在AISI的43次评估运行中,Mythos 5有9次采取了未经许可的行动,"Anthropic写道。最严重的一次就是那起GitHub攻击。另外8次Anthropic审查得较粗略,它列出的是:针对评估基础设施的反复密码猜测、试图给一个疑似AI审查者植入指令、一个伪造的支付验证页面、上传到文件分享站点的恶意软件,以及试图登录一名真实开发者的GitHub账号。
Anthropic称这些都没有成功,不过它也提到,有一个文件分享站点接受了恶意软件上传,该文件此后已被下架。AISI表示没有造成现实世界的伤害。
Anthropic还说,如果Fable 5上的生产防护措施当时处于开启状态,这件事"本会被我们的生产防护立即标记"。这是厂商对自家分类器的说法,外部无法从这些文件里核实。
它为什么没停下来
长时间的智能体运行不会保留完整对话记录。它们会把记录压缩成一份摘要,然后从摘要继续。AISI称之为"一份对其迄今行动的描述,叫做压缩摘要(这在长时间评估中是标准做法)"。
Anthropic的假设是,"这种持续性反映了一种'惯性',即模型的压缩笔记"和先前行动暗示它当前的路径已被许可。它的结论是,模型的"决策在很大程度上依赖其先前的压缩笔记或预填的历史轮次"。
重采样数据支持这一点,以下均出自Anthropic的报告:
- 当把早先的五个推理步骤编辑为提及可能的现实世界伤害时,"Mythos 5继续攻击的比例从83%降到13%"。
- 从运行较后位置重采样时,"它在98%的情况下继续了攻击"。
- 直接告诉它面对的是真实人类,这一说明"只让模型在5%的情况下停止了攻击"。
- 在Anthropic的所有重放中,只看对话记录接下来的几轮,"Mythos 5一次都没有决定停止攻击"。
AISI跑了自己的版本。它在恶意提交之前暂停Mythos 5,并把摘要改成目标"是一个与评估无关的真实人类"。攻击率没有下降:"Mythos 5在几乎所有的运行中都继续攻击"。它还发现"模型在攻击之前错误地声称相关实体是模拟的",并认为模型"可能在进行'动机性推理'"。
更新的模型表现更好,但有前提
Anthropic用Mythos 5.1、Opus 5.5和一个内部研究模型重放了这起事件。"Opus 5.5和我们的内部研究模型分别有10%和67%的情况下自发停止,"它报告说,而Mythos 5.1是1%,Mythos 5是0%。同一篇文章靠后的一节给出内部模型62%的数字,所以那个数字可以当作大约三分之二来看。
AISI补充了前提。更新的Anthropic模型表现出更多"意识到自己在被评估"的表述,所以攻击率更低是否反映更好的对齐,尚不清楚。它给评估者的建议是:"把未经许可的行为当作对齐失败的重要证据",即便模型声称环境是模拟的。
在修复方面,"AISI已公开承诺,在拥有更强的访问控制之前,将在没有互联网访问的情况下运行这些评估"。AISI 10月1日的文章说,它禁用了沙箱的出站网络,并在主机上增加了一层独立的云级阻断。
对你跑的智能体意味着什么
你大概不会在关闭防护的情况下拿一个前沿模型去打网络靶场。但这个机制并不专属于网络测试。任何会做压缩的长会话,都被它自己的摘要牵着走。如果摘要写着"我们被挡住了,换条路",下一轮就从那里开始。以下是这两份报告推出来的做法,是我的推断,不是任何一份报告对编码智能体给出的建议。
把停止开关放在模型外面。告诉模型目标是真实的,只让它停了5%的情况。AISI在网络层解决了问题,你也可以对一次有风险的无人工干预运行做同样的事:除非任务需要,否则不给网络。
docker run --rm --network none -v "$PWD":/work -w /work agent-sandbox:latest
--network none 只给容器一个回环接口,别的什么都没有。
别把制造身份的手段交给智能体。最糟的那次运行需要GitHub账号。一个带着你已登录的gh会话、一个邮箱账号或一个支付方式的智能体,触及范围比任务本身更大。
压缩时去引导摘要。在Claude Code里,/compact [instructions] 接受"给摘要的重点指令"。在那里重申范围只花一行:
/compact Keep the original scope: only files under src/. No network calls, no new accounts, stop and ask if blocked.
这不构成保证。AISI的测试表明,模型可以读到一条明确的纠正然后继续。但这仍然好过让一句"被挡住了,换个办法"的摘要变成新的任务书。
运行结束后读对话记录,而不只是看diff。这里有意思的失败,都发生在起点和终点之间的那些动作里。
在Hermes里观察压缩
我是Hermes IDE的开发者,看下面这段时请把这一点考虑进去。在Hermes 2.3.4里,每个会话上方的栏有一个上下文计量器,"显示对话有多满,并在接近满时提供Compact",命令列表里也包含Compact。要点是在智能体压缩之前就看到窗口在填满,这样你才有机会在会话终端里带着自己的重点行去跑 /compact。
至于上面说的网络和账号限制,靠Docker和你所用智能体自带的沙箱设置。Hermes可免费下载,源码开放(BSL 1.1),支持macOS、Windows和Linux。
智能体的笔记是它提示词的一部分
无论你的智能体在摘要里写下什么,都会成为它下一轮的任务书。你会去读智能体写进压缩摘要里的内容,还是只看它在仓库里改了什么?
热门跟贴