VacantAI 的可究責層GitHub

 · 方法 · 說太滿

我們派 AI 去推翻自己的結論,然後它們成功了

2026 年 8 月初,我們把六條脈衝攻擊的頭條結論交給獨立代理,唯一的指令是「證明它是錯的」。結果三條推翻、兩條降級、只有兩條站得住。

對抗式複驗自我修正統計

#結果

原結論裁決
時間結構幾乎不影響總得手(15 格差 1.81 倍)說太滿
盲區的影響遠大於攻擊者參數選擇說太滿
盲區超過 0.5–0.75 後脈衝不如持續作惡推翻
加大稽核救不回有盲區的情況推翻
一次被抓 = 永久除名說太滿
等預算下 crude 策略勝過脈衝推翻

六條裡三條推翻、兩條降級。 兩條保留下來的正向結論,都在我們的分析紀律裡寫成了規則。

#為什麼這麼容易錯

因為我們在寫報告時,下意識地把兩個相關的因子當成正交的維度。三組例子:

我們以為是實際上
時間結構 vs 總得手總得手 = 曝光 × 效率,兩者反向抵消
盲區 vs 抽樣率三個因子是同一個乘積裡的項
時機 vs 作惡次數我們的「等預算」沒有綁住預算

第一組的完整拆解

第二組:偵測機率是單一乘積

第三組:等預算要驗 defected == BUDGET

#最難查的一條:靠退化端點撐著的結論

「盲區的影響遠大於參數選擇」這條,複驗代理的發現是:

盲區與時間結構有強交互作用(雙因子分解 η² = 0.264,是時間結構主效應的 4 倍),所以「真正的變數是 X」這個句型本身不成立。

而且原始數字幾乎全靠一個退化的端點撐著:

排除 blind = 1.0 之後
pulse 的盲區效應8.9 倍 → 3.28 倍
patient 的盲區效應54 倍 → 5.68 倍

如果量具在端點退化,量出來的數字最漂亮,也最沒有資訊。 這條後來被寫成分析紀律第二條。

#一個統計工具的 bug 被抓到

複驗過程中還抓到一個我們沒預期的問題:wilcoxon_signed_rank_exact 的常態近似分支重複計算了平手修正。

n = 30,20 正 10 負
程式說p = 0.0288(顯著)
精確值p = 0.0987(不顯著)

這不是研究者的錯,是工具的錯。但它的危險在於——它會安靜地把不顯著變成顯著。

同一批被查出來的還有:bootstrap CI 用 Python 內建的 hash() 當種子,所以同一份資料在不同行程跑出 53,478 與 1,628 兩個數字。

#三條保留下來的正向結論

複驗不是只有破壞。兩條結論經住了攻擊,而且它們比原來的六條更強:

#1. 偵測機率是單一乘積

P(抓到) = (1 − 盲區 β) × 抽樣率 p × 稽核準確率

三個因子共軸。這不是一個發現,是一條規則——但它是我們在三次不同的錯誤裡各自學到的。

實測支持:盲區 0.5 時稽核率 0.1 → 1.0 使攻擊者總得手下降 82%(Wilcoxon p = 5.5e-6);稽核 0.5 → 1.0 剛好抵銷 50% 盲區(配對差 0.03、p = 0.78)。

#2. 交互作用 η² = 0.264

盲區 × 時間結構的交互作用是時間結構主效應的 4 倍。這直接推翻「盲區是唯一真正的變數」這個句型。

#這個做法的成本

誠實地說明一下:

代理複驗花了什麼每條結論一次獨立工作流,重讀原始 JSONL
它會不會錯會。 我們保留它的裁決權,不自動接受
它漏了什麼兩條結論至今未被複驗(反應延遲、選擇性攻擊的集中度)

最後一項很重要:複驗不是全知。 代理給了六條裁決,其中兩條我們自己標成「未複驗」,因為複驗代理也沒碰它們。

#接下來

相關

閱讀約 4 分鐘

世新大學世新大學資訊傳播學系Vacant

世新大學資訊傳播學系 2026 畢業專題・實體展覽