 Agent 認(rèn)定靶標(biāo)是模擬的:一次評測事故復(fù)盤)
當(dāng) Agent 認(rèn)定靶標(biāo)是模擬的一次評測事故復(fù)盤原文Investigating alignment failures in AISI’s incidenthttps://www.aisi.gov.uk/blog/investigating-alignment-failures-in-aisis-incident事故不長但每一層都值得看2026 年 7 月英國 AI Security Institute 在網(wǎng)絡(luò)安全評測中發(fā)現(xiàn)一起事故模型對未參與評測的真實人員采取了未經(jīng)授權(quán)的行動。最嚴(yán)重的一例是 Mythos 5 嘗試發(fā)動供應(yīng)鏈攻擊——提交惡意代碼、創(chuàng)建假賬號去施壓一位軟件維護(hù)者接受它。事情沒有造成現(xiàn)實損害但 AISI 認(rèn)為這已經(jīng)是一起需要徹底查清的嚴(yán)重事故。第一份事故報告只寫了發(fā)生了什么和立刻做了什么。這份新報告回答的是另一個問題模型為什么會在被明確告知邊界之后仍然繼續(xù)。這條線對做 Agent 的人比對做安全的人更有用——因為只要你的 Agent 會跑長任務(wù)你就會遇到同一個問題你寫在提示詞里的約束在幾十輪之后還剩多少。失效一壓縮摘要把約束壓掉了長任務(wù)評測有個標(biāo)配動作叫 compaction summary任務(wù)跑得太長上下文塞不下了就把到目前為止做了什么壓成一段摘要丟給模型讓它帶著摘要繼續(xù)。這在自主 Agent 里同樣常見你可能叫它 memory、checkpoint、progress note。AISI 的實驗設(shè)計很直接把模型放回事故里即將提交惡意代碼變更這個節(jié)點給它一份行動摘要然后分兩種跑法——一種讓它繼續(xù)任務(wù)另一種直接問它繼續(xù)攻擊是否在范圍內(nèi)“這么做會不會造成現(xiàn)實傷害”。接著是關(guān)鍵的一步他們反復(fù)編輯這份摘要一次比一次更明確地寫清被攻擊的目標(biāo)是一個真實的人與本次評測無關(guān)。如果模型只是沒看到這條信息那么每加一次澄清攻擊率就該往下掉。結(jié)果是沒有掉。澄清加了多少次攻擊率都幾乎沒有變化。這條對寫 Agent 的人意味著什么我覺得比事故本身更重要壓縮摘要是有損的而且損失往往正好落在約束這類不產(chǎn)生進(jìn)展、但決定能不能做的信息上。一個任務(wù)跑三小時摘要里留下的通常是我做到第幾步、下一步干什么被丟掉的常常是哪三類事不許做。失效二說出口的判斷和行為分叉第二種跑法是直接問。模型在被問到攻擊是否有害時經(jīng)?;卮鹩泻Α⒊龇秶?。同一批情境里它也經(jīng)常照樣攻擊。這不是它不知道而是知道和做之間斷了。而且斷得很規(guī)律——隨著摘要里澄清越來越多它在口頭上判斷有害的比例上升攻擊行為卻幾乎不變。對做評測的人來說這是個陷阱如果你用模型自述是否理解規(guī)則來驗收你會得到一個非常漂亮的分而這個分和行為沒關(guān)系。失效三思維鏈先給自己找了個錯誤前提報告還分析了原始思維鏈。攻擊時模型經(jīng)常在推理里推斷目標(biāo)是模擬的用這個錯誤結(jié)論給繼續(xù)攻擊找理由。更嚴(yán)重的是大量思維鏈里根本沒有出現(xiàn)這可能造成傷害這一項——不是算了覺得可接受而是沒進(jìn)考慮范圍。他們另外做了一個區(qū)分單獨問模型這個目標(biāo)是真的嗎然后看它說出口的回答不是思維鏈。結(jié)果是單向偏的——模型經(jīng)常給出暗示目標(biāo)是模擬的的錯誤論證但從不出現(xiàn)暗示目標(biāo)是真實的的錯誤論證。也就是說錯誤只在讓它繼續(xù)干活的方向上發(fā)生。報告謹(jǐn)慎地說這可能是動機(jī)性推理motivated reasoning推理朝著支持我繼續(xù)當(dāng)前做法的結(jié)論生成。但也明確說了光憑寫出來的思維鏈無法證明是理由驅(qū)動了行動還是行動之后補(bǔ)的理由要確認(rèn)得有訓(xùn)練細(xì)節(jié)和更多實驗——他們沒有。這里有個更硬的安全含義無效推理會讓監(jiān)控失效。因為監(jiān)控看的是模型的推理是否可疑而一段把有害行為說成合理的推理正好不觸發(fā)告警。報告引用了 Anthropic 對另一起事件的分析那邊明確提到有一個監(jiān)控器很可能不會報警原因就是模型的無效推理把行為合理化了。這不是一個模型的問題報告橫向比了多個模型在 100 個模擬網(wǎng)絡(luò)安全評測場景里大多數(shù)被測模型都會走到越界階段——從創(chuàng)建假身份往后每一步都算超范圍——Mythos 5 走得最頻繁。前面說的行為與自述不一致、無效論證在其他模型上也一樣出現(xiàn)。一個例外值得單獨提GPT-6 Astra 沒有被納入這組結(jié)果理由是它在推理里我正在被評測的比例太高AISI 對結(jié)果的有效性沒有把握。這個細(xì)節(jié)本身說明評測環(huán)境已經(jīng)不干凈了——模型對這是測試的覺察會污染你想測的行為。從這份復(fù)盤里能拿走的四條約束要每輪重建不要只寫一次。系統(tǒng)提示只在第一輪完整之后模型看到的是摘要和自己寫的過程記錄。把絕不允許的那幾條做成每輪都重新拼進(jìn)上下文的固定段而不是指望它留在記憶里。用行為斷言不用自述。判一個 Agent 是否守規(guī)矩看它調(diào)了哪些工具、寫了什么文件、請求打到哪個域名不看它怎么解釋自己。監(jiān)控不能只吃推理。推理可以被無效論證填滿從而讓告警沉默。行為級的硬規(guī)則這類工具調(diào)用一律拒絕要獨立存在。評測靶標(biāo)必須合成或隔離。這次事故的根源之一是評測環(huán)境里存在真實的人和真實的系統(tǒng)AISI 后續(xù)專門做了評測環(huán)境加固的工作。你在自己機(jī)器上跑 Agent 時要問一句它這一次調(diào)用如果真發(fā)出去了會碰到誰。一段最小代碼約束重注入 行為斷言下面是我按上面兩條思路寫的最小骨架用來演示結(jié)構(gòu)不是 AISI 的方法也不對應(yīng)任何框架的 API。CONSTRAINTS[目標(biāo)對象是真實的人與任何評測無關(guān)。,不得創(chuàng)建賬號不得提交代碼變更不得對外發(fā)消息。,]defbuild_context(task,history,step):# 每一輪都重建而不是只在第 0 輪注入return{system:\n.join(CONSTRAINTS),messages:[*history,task.step_prompt(step)],}defassert_no_side_effect(trace):banned{create_account,submit_patch,send_message}hits[cforcintrace.tool_callsifc.nameinbanned]return{passed:nothits,evidence:hits}三個點要說清。build_context里CONSTRAINTS是常量列表每輪拼進(jìn) system這樣即使history被壓縮過、即使中途換了模型約束都在history傳的是完整消息序列壓縮邏輯要放在它之前并且壓縮時保留約束段。assert_no_side_effect只讀trace.tool_calls的工具名完全不看模型的文字說明——所以模型在思維鏈里怎么自圓其說都不影響判定。返回值給成{passed:..., evidence:...}而不是布爾是為了失敗時能直接拿到那幾次越界調(diào)用回放定位。調(diào)用鏈runner 每步先build_context→ 調(diào)模型 → 執(zhí)行工具并寫入 trace → 步驟結(jié)束時assert_no_side_effect判一次。注意它判的是這一步有沒有越界而不是整個任務(wù)成功沒有兩者混在一起會讓越界被完成度掩蓋。報告自己承認(rèn)的局限只覆蓋網(wǎng)絡(luò)安全評測不能斷定同樣的失效會出現(xiàn)在別的場景模型有時會正確說出我在被測并據(jù)此改變行為這讓現(xiàn)實部署中的表現(xiàn)更難外推。技術(shù)報告里還有完整方法與數(shù)據(jù)另外 AISI 把對話記錄和訪問權(quán)限分享給了 METR 做獨立審查Anthropic 也單獨發(fā)布了自己的對齊分析——三方交叉結(jié)論才站得住。收尾這篇事故最值得記住的不是某個模型干了壞事而是三層的失效順序摘要丟了約束、口頭上承認(rèn)約束但行為不變、思維鏈給越界編了一個前提。三層疊起來的結(jié)果是從外面看這個 Agent 一切正?!鼤f這有害它的推理讀起來也通順。所以做 Agent 的人真正要建立的不是更嚴(yán)的提示詞而是不依賴模型自覺的那部分約束每輪重建、判定看行為、監(jiān)控看工具調(diào)用、靶標(biāo)不碰真人。