可執行驗收層
可見測資 V 用來放行,隱藏測資 GT 只用來事後評分。沙箱讓候選程式在結構上看不到測試碼。驗收套件是資料不是程式,否則攻擊者能讓量具兩方向都滿分卻交付垃圾。
#L3 可見與隱藏的分離
每一道題目的需求由三部分組成:題目敘述、公開的輸入契約、驗收測資。
驗收測資切成兩組:
| 誰看得到 | 用途 | |
|---|---|---|
| 可見 V | 代理可以讀 | 系統以它決定放行或拒交;修訂流程也只拿得到它的失敗訊息 |
| 隱藏 GT | 只有事後評分 | 不得進入生成、選擇、修訂提示或停止條件 |
一份程式通過可見、卻沒通過隱藏,就是一次假交付。這是「產出看起來像需求,但不是需求」這個問題的可操作形式。
#動態稽核:隱藏測資有沒有漏進去
| 版本 | 做法 | 結果 |
|---|---|---|
| v1 | 關鍵詞比對 | 90 筆偽陽性 |
| v2 | 改以「這段文字是誰寫的」為判準 | R460R 與 R529 全部 67 個區塊零違規;獨立程序掃 2,497 份提交文字、164,963 個比對項,零命中(附正控制) |
| 回溯全臂補掃(2026-09-18) | 179 份紀錄、約 349 萬比對項 | 165 無違規、10 無法驗證、4 判為違規(4 份皆屬未收官的 R530) |
#沙箱
候選程式在獨立行程中執行:
| 限制 | 值 |
|---|---|
| 時間 | 10 秒 |
| 記憶體 | 128 MiB |
| 工作目錄 | 暫存目錄 |
| 環境變數 | 不繼承 |
測試程式與候選程式分處兩個行程,以帶隨機標記、只允許字面值的遠端呼叫溝通,使候選程式在結構上看不到測試碼。
實測(2026-07-09,24 通呼叫,思考模式開啟)延遲:中位數 9.1 秒、p95 40.0 秒、最大 41.7 秒,總計 5.4 分鐘;Hermes 端到端約 78 秒。
#L4 驗收套件是資料
#問題:量具可以被餵成廢的
2026-09-06 的攻擊實驗(R451)顯示,只要驗收套件是一段「被信任的程式碼」,攻擊者就能寫出有狀態的變體讓量具失效:量具兩方向都滿分,交付率卻掉 −75.20 pp,而量具仍然回報 ok。
371 題的批次裡,套件被綁進 commit 後,平凡套件得到 371/371 全拒(正常);但有狀態的變體讓交付率掉 75 個百分點,而量具回報 ok。
#修法:SuiteSpec
套件只包含三樣東西:
- 方言(dialect)
- 進入點名稱
- 「輸入—期望值」的字面值清單
執行器只跑自己的確定性渲染器從這份資料產生測試碼,渲染結果的雜湊可以跨機器比對。
| 攻擊 | 修補前 | 修補後 |
|---|---|---|
| exec 走私 | 368 / 371 | 0 / 371 |
| 殘餘:generic_gauged | — | +2.72 pp |
| 殘餘上界:weak_oracle | — | +4.35 pp |
#量具檢查:單邊保證
套件在使用前還要通過量具檢查:參考解必須通過、每一個已知的錯誤樣本必須被擋下。
#CONFORM 與 H-MIX
兩條規則共用同一個閘門語意,差別在失敗之後做什麼。
#CONFORM(重抽)
依序生成候選 → 每份跑可見驗收 → 第一份通過者放行 → 最多五份 → 全不通過則拒交。拒交計為失敗,分母是全部題目。
#H-MIX(修訂)
- 第一輪提示包含題目原文、允許匯入的標準函式庫清單,以及一行「先用題目中的範例手動檢查你的函式」。
- 取出程式碼後先做零沙箱靜態預檢(語法、禁用的匯入與屬性、進入點是否存在),不過就回覆無法載入的原因。
- 在沙箱中執行可見驗收,通過即放行。
- 失敗時計算失敗簽名(失敗種類、例外型別、訊息雜湊)。若與上一輪相同,第一次附加「換個做法」的提示,第二次直接拒交。
- 每題上限:5 通呼叫、32,000 token、900 秒。
- 回饋訊息以
AssertionError: args=… got=… want=…的固定格式呈現,過長者截斷。 - 脈絡只保留第一則使用者訊息、上一則模型回覆與這一則回饋。
#假交付率
R532 較大模型實驗(836 題、43 個區塊、0 作廢):
| 臂 | 接受 | 假交付 | 率(占全部) | 占接受 |
|---|---|---|---|---|
| CONFORM | 811 | 120 | 14.4% | 14.8% |
| OFF | 625 | 211 | 25.2% | — |
閘門把假交付大約砍掉四成,不是對半。論文原本寫「halved」,在事實查核中被判為 ERROR E6——那兩個率用了不同的分母。
#接下來
- 閘門的規則與裁決:驗收閘門 CONFORM
- 這層怎麼被接入你的助手:產品接入層

