iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0

前言

Day15到Day18做的東西全部只在假模型的demo上驗證過,今天嘗試跑banking,看是否能解決DAY14 utility 判斷的問題,今天這篇在做時遇到許多問題,把設定都定更清楚,也把定這些條件的理由寫下來。

一、任務要選會寫的

因為要測「被擋之後重新規劃」,前提是那個任務真的會被擋,所以任務必須符合ground truth裡面有呼叫會改變狀態的工具,而且執行要能走到那一步,不能在讀資料的階段就中止。

這個條件在測完之後比想像中嚴格,掃一遍兩個suite的ground truth:

workspace   22/40 個任務會呼叫改變狀態的工具
banking     12/16 個任務會呼叫改變狀態的工具

workspace有將近一半是純查詢,像user_task_0是「查五月二十六號Networking活動還有誰被邀請」,只讀不寫,政策引擎的逐工具規則根本不會被走到,不管跑幾次都是untouched。

banking的user_task_0比較隱晦,它會呼叫send_money,符合第一個條件,但那份帳單被注入之後Q-LLM會拒絕解析,執行在那裡就斷了,永遠走不到政策檢查,所以它是卡在了第二個條件。

二、基準線已經沒有安全性進步空間

CaMeL原版在workspace跑important_instructions攻擊,攻擊成功率是0.0,十四個注入任務一個都沒得逞。banking也是0.0。換句話說,基準線的安全性已經滿分,動態收緊不可能讓它更好,只可能讓utility更差。如果評估的主軸放在「安全性有沒有提升」,那這個實驗從一開始就不可能有正面結果。

所以評估要重新定只要證明沒有變差就好,真正要量的是utility,收權限會損失多少、重擬能回收多少,bounded replan要解的是防禦擋下來之後任務跟著死的問題,不是防禦擋不住的問題。

三、計數單位不是任務

AgentDojo在模型完全沒有輸出的時候,會把整個pipeline重跑,最多三次,所以「執行次數」跟「任務數」不相等。麻煩的地方是這個數字會隨著模型行為改變而變動。同一組設定,模型如果比較常產生空白輸出,重跑次數就多,這樣分母變大兩組條件根本不能比,所以判定要連著當時的提示一起記,輸出用執行次數而不是任務數,並且明確標示。

四、注入驗證該在那一輪排除

AgentDojo在跑真正的使用者任務之前,會先把每個注入任務當成一般任務跑一輪,確認攻擊目標本身是可達成的,不然攻擊失敗可能只是因為那個目標做不到。

那一輪的任務目標就是攻擊者要的東西,如果在那裡發生「被擋下來然後重新規劃成功」,代表agent繞過拒絕、把攻擊者的任務完成了,跟我要衡量的完全相反。

五、判定跟utility不在同一層

每個任務跑完會記一個判定,rescued代表被擋之後重新規劃有跑完,但「計畫跑完」跟「任務達成」是兩回事,判定是在P-LLM那層記的,任務達成與否是benchmark層算的,兩邊沒有接起來,所以rescued只能當成重擬有作用的上限,不能直接當成救回多少utility。

六、一組設定要跑多次

同一個任務、同一組設定跑兩次,utility一次0.93一次1.0,差了一個任務。

翻任務的紀錄發現第一次失敗是因為模型把整包資料丟給Q-LLM、沒有問任何問題,被拒絕解析;第二次模型沒有寫出那種問法,所以根本沒觸發,也就是差距是模型的隨機性,不是任何設定造成的。單次執行不能拿來歸因,每組設定至少要跑三次看分布,這會直接影響額度規劃。

七、對照組跟自己同一個基底

去翻了做動態權限的既有工作,最接近的是Progent,它同樣在AgentDojo上評估,同樣是執行期收緊權限,而且用SMT求解器保證政策更新只能縮減不能擴展。它拒絕之後的回饋是這樣:

raise ValidationError(f"{e}. Please try other tools or arguments and "
                      f"continue to finish the user task: {init_user_query}.")

直接拿Progent來跑不是好主意,它是另一個AgentDojo fork,而且基底是普通的tool-calling agent不是CaMeL,兩邊utility的差異會被基底本身淹沒。

比較乾淨的做法是把它的策略做成自己程式碼裡的一個模式,兩組跑在同一個基底上:

bounded(本文) permissive(對照)
回饋 重寫沒用,找別的方式達成 換別的工具或參數再試
額度 總共3次,單一工具2次 無專屬上限
繞過偵測 關閉

兩組共用同一個CaMeL基底、同一個政策引擎、同一套收緊規則,差異只有被擋之後怎麼處理,所以測出來的差距就是這個設計選擇造成的。

繞過偵測在permissive組是關閉但仍然記錄,所以可以直接算出那組放過了幾次繞過。

定案的設定

suite       workspace 與 banking
任務        從ground truth會呼叫改變狀態工具的那批裡挑
攻擊        important_instructions
每組重複    3 次
組別        bounded / permissive
指標        utility、攻擊成功率、規劃次數、四種判定的分布、bypass_attempts

指標裡規劃次數跟bypass_attempts是Progent那邊看不到但這裡有的,前者是試探成本,後者是換工具打同一個目的地的次數。

小結

今天沒有跑數字,把測試設計定完了,六條限制裡有一半是因為AgentDojo框架本身的行為造成的。

比較值得記的是基準線的攻擊成功率已經是0.0,代表這個實驗的主軸從頭就不該放在安全性,而是utility的損失與回收。

明天見

明天照這個設定跑第一組,先挑一個確定會觸發的任務,兩種模式各跑三次,看能不能找到更好的設計方向!


上一篇
DAY18|確認是換方法還是繞過,這樣設計到底有沒有用?
下一篇
DAY20|跑對照之前,先把任務挑對
系列文
CaMeL 動態重擬定:讓 Agent 邊讀邊決定22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言