Concilium — 跨模型對抗審查
第二個不同的模型以對抗方式審查你(或使用者)的主張。不同的模型世系意味著不同的盲點——這就是價值所在。審查者提出主張,呼叫端會話進行批准。絕不讓任何一方的信心取代證據。
專為從 Claude Code 編排而設計——Opus 5 和 Fable 5 都是第一級的批准席位(經由盲測結果預測基準評量,達到席位平價;任何 Claude 模型都能驅動這個循環,但批准者應為兩者之一)。GPT 側(sol/terra/5.5 經由 codex)執行獨立的探查和機械執行——而這個跨家族席位是承載性的:它確實能捕捉到同家族席位共同忽略的錯誤。
先決條件(每個環境檢查一次)
-
codex login status→ 必須顯示「已透過 ChatGPT 登入」(訂閱 OAuth——不需要 API 金鑰,且訂閱不能用作 API 金鑰;請勿嘗試代理/路由器橋接)。 -
發現可用模型:
codex debug models或~/.codex/models_cache.json。如果某個模型報錯「requires a newer version of Codex」,請執行codex update然後重試。 -
在新環境中第一次使用前,先執行校準引導程序(references/setup.md),然後再信任裁決:進行一個已知真理的推理測試,然後一個簡單的真實任務,然後(可選)進行一次頭對頭比較來選擇分層模型。
-
Kimi 席位——實驗性且須主動選擇;從來不是預設輪的一部分。 僅在使用者明確要求第三家族時才加入。兩個傳輸方式,各自有對應的包裝腳本:
- Kimi Desktop(Windows)。
scripts/concilium-review-kimi.ps1驅動應用程式內建的 daimon runner,在其自己的 Electron 環境中執行。需要已安裝桌面應用程式並登入。 - Kimi Code CLI(Linux/macOS/Windows)。
scripts/concilium-review-kimi.sh驅動跨平台、MIT 授權的 CLI——無頭模式kimi -p加上裝置碼 OAuth,因此適合容器或一次性虛擬機器(範例:references/isolated-guest-vmware.md)。⚠ 列印模式在構造上會自動批准每個工具呼叫,因此那裡的隔離是前提條件,而非預防措施。⚠ 永遠傳遞--model:CLI 的內建預設值比旗艦模型舊了一代,而且輸出中沒有任何東西會標示其名稱。
已校準但比 codex 更不穩定,且隔離能力較弱:路徑、模型、沙箱以及相關注意事項都在 references/setup.md 和陷阱 #18–21 中。
- Kimi Desktop(Windows)。
分層矩陣(預設值為當前世代模型——可依安裝環境覆蓋)
| 層級 | 預設值 | 努力程度 | 用途 |
|---|---|---|---|
| 研究 | 旗艦級(例如 gpt-5.6-sol) | max | 開放審查輪次,對抗性驗證 |
| 機械 | 前一代旗艦級(例如 gpt-5.5) | medium | 用一次探測驗證已知主張 |
| 執行者 | 廉價層級(例如 gpt-5.6-terra) | low | 執行並回報:執行腳本,監控匯入作業 |
研究層級的包裝腳本在每個席位上預設為 max。不同領域的「努力程度」詞彙不同,值得確切了解:codex 接受 none · minimal · low · medium · high · xhigh · max(經實測——API 會拒絕其他值並列舉該列舉),kimi 席位接受 low · high · max。
努力程度不能取代第二家族——這已經過實測,並有對照組。 同一個席位(gpt-5.6-sol)在同一個 14 項預測封包上執行六次,分別以 low/medium/high/xhigh/max 以及一次相同努力的複製:相同努力的兩次執行涵蓋了 14 項中的 10 項,而跨努力程度的配對平均為 8.9,且從未超越;完整六次執行的整體也僅達到 10/14,與兩次執行的雜訊底線相同,也與一個 codex+kimi 配對相等。準確度並非隨努力程度單調遞增(high 9,max 9,xhigh 7,medium 7,low 7),而執行時間卻成長了 8 倍(21 秒 → 166 秒)。四項被每次執行、每個努力程度都遺漏——而跨家族席位得到了其中兩項。改變努力程度會重新取樣相同的盲點;不同的世系才能移動它們。 如果你想要涵蓋率,就增加一個家族,而非計算量。-Mechanical 是刻意降低的選項,並保持在 medium。
執行者任務不是審查——跳過包裝腳本,直接呼叫 codex:
codex exec -m <便宜模型> -c model_reasoning_effort=low [-s read-only unless it writes] "<任務>" < /dev/null
在直接的非互動式呼叫中,永遠關閉 stdin(bash 使用 < /dev/null;PowerShell 使用 $null | codex …)——開放的 non-TTY stdin 會讓 codex 在「正在讀取來自 stdin 的額外輸入...」訊息上永久阻塞,而孤立進程會在父 shell 逾時後繼續存活(陷阱 #10;包裝腳本不受影響——它們透過 stdin 來進行管道傳輸)。
執行審查
使用內建的包裝腳本。它們會從 references/contract.md 載入共享的審查合約(單一事實來源——偽造探測、替代解釋、注意事項、裁決提案、結構化/編碼規則;在那裡編輯合約,絕不要在腳本中編輯),並添加來源戳記。兩個包裝腳本功能相同;依平台選擇:
Linux / macOS (bash):
- 主張:
scripts/concilium-review.sh claim "<主張>" - 差異:
scripts/concilium-review.sh diff [base-branch] - 透過環境變數設定:
MODEL,EFFORT,MECHANICAL=1(機械層級),REPO_DIR,PROJECT_RULES(規則檔案路徑)。 - 克隆後首次使用:
chmod +x scripts/concilium-review.sh。
Windows (PowerShell 5.1+):
- 主張:
powershell -ExecutionPolicy Bypass -File scripts/concilium-review.ps1 -Claim "<主張>" [-Mechanical] [-RepoDir <路徑>] [-ProjectRules <檔案>] - 差異:
... -Diff [-Base <分支>]——審查-RepoDir的工作目錄差異。
Kimi 第三家族席位——實驗性,須主動選擇。 不是預設輪的一部分;僅在使用者要求第三家族時加入。兩個包裝腳本,使用相同合約和相同的五個區塊:
concilium-review-kimi.sh(跨平台 CLI,透過環境變數設定——MODEL 必須指定)和 concilium-review-kimi.ps1(Windows 桌面執行器)。
桌面包裝腳本接受相同的 -Claim/-Diff/-RepoDir/-ProjectRules/-PriorRounds 參數表面,加上 -Model(預設 k3-agent),-Effort(low|high|max)和 -RawPrompt(不含合約,用於校準探測)。兩個席位特有的差異,均已實測:CLAUDE.md 自動橋接在此預設關閉——注入會可靠地以原始 Connection error. 終止執行,因此透過 -AutoRules 選擇加入;請改用 -ProjectRules <檔案> 為審查者提供上下文。另外,絕不信任其結束代碼——它在該失敗時仍會回傳 0,因此請檢查五個區塊。多行提示必須透過此包裝腳本傳遞;直接從 bash 執行 kimi-daimon --prompt 會導致其 argv 被破壞(陷阱 #18–19)。
此席位沒有沙箱——請提供一個可拋棄的複本。 -SandboxFrom <目錄> 會將目錄樹複製到一個一次性目錄(排除 .git、虛擬環境以及類似機密檔案),在該處執行代理程式,列印其建立/修改/刪除的內容,並刪除該複本(除非指定 -KeepSandbox)。預設使用此選項。清楚了解它能買到什麼:workDir 不是邊界——一個在外的 canary 檔案曾透過絕對路徑被讀取並原樣回傳(陷阱 #20)——因此這是爆炸半徑控制和稽核軌跡,而非隔離。如果機器上的資料不得傳送給提供者,請在作業系統層級隔離(具有 ACL 的獨立帳戶,或一個 VM)。
對於盲測輪,相同多孔性帶來的風險是污染而非損害:遊蕩到真實目錄樹的代理程式可能找到答案,而該輪會默默不再是盲測。加入 -WatchPaths <a,b,c>——它會快照 NTFS 最後存取時間,記錄必須保持未讀狀態的項目(真實儲存庫、結果日誌、答案金鑰),並報告執行期間任何被讀取的項目。已針對雙向的已知逃逸進行驗證;在信任它之前,請閱讀陷阱 #21,包括為什麼基於列舉的相同檢查版本在一個已證明逃逸的執行中會回報「乾淨」。
操作規則(每個都是經實測的失敗——原因在 references/pitfalls.md):
- 在背景執行,並從第一次呼叫起設定完整的約 10 分鐘逾時。 真實審查在高努力程度下需要 5–15 分鐘以上;前景逾時會在中途終止它們。
- 偏好新會話而非恢復逾時的會話。 長時間恢復的鏈結會遇到上下文壓縮——審查者早期的仔細閱讀會在最終的、決定性步驟之前被有損摘要取代。
- 絕不裸恢復。
codex exec resume會默默將模型和沙箱重設為使用者的 config.toml 預設值。如果你必須恢復(或想在中途切換模型),請重新固定所有項目:codex exec resume -m <模型> -c sandbox_mode="read-only" -c model_reasoning_effort=<層級> <session-id> -旗標必須放在位置 session id 之前。關鍵在於sandbox_mode——-c sandbox=...會被默默忽略,且 resume 沒有-s旗標。跨模型恢復會保留上下文。 - 審查者是一個完整的代理程式,不是聊天機器人——唯讀沙箱會阻擋檔案寫入,但不會阻擋讀取命令或資料庫 SELECT 指令。它審查的所有內容都會傳送到第二個模型的提供者。
- 即時監控進度,不要盲目等待——並且監控正確的串流。 合約(規則 9)要求審查者在工作中發出
STATUS:單行,而 codex 會逐步寫出——但串流是分開的(經過實體驗證):使用1> out 2> err時,最終的五個區塊會落在 stdout,而串流轉錄(標題、STATUS 行、工具呼叫)會送到 stderr。將 tail/monitor 指向 stderr 以查看進度 + 失敗特徵;讀取 stdout 以取得裁決。注意:PowerShell1>/2>重新導向會寫入 UTF-16——在進行 grep 之前,請相應解碼(或透過強制轉換為 UTF-8 的步驟重新導向)。 - 盲測輪需要結構性隔離,而非一條指令。 當該輪必須未受污染時(盲測評估、根據請求範本進行的框架關鍵盲優先傳遞),請在乾淨的目錄中執行審查者,並關閉自動規則橋接(
-NoAutoRules/NO_AUTO_RULES=1):一個攜帶專案上下文並被指示「僅從封包回答」的模型,經實測仍然會使用該上下文(陷阱 #16–17)。
批准協議(呼叫端會話的職責)
審查者回傳五個區塊:PROBE / ALT / CAVEAT / VERDICT-PROPOSAL / PHASE-LOG。
在轉傳或採取行動之前:
- 閱讀實際的探測(查詢/命令),而不僅僅是散文摘要。
- 極端結果是觸發線索:首次嘗試即為 0% 或 100% 通常表示錯誤的聯結鍵、錯誤的範圍或錯誤的資料表——而非發現。在接受前,自行驗證探測的承載步驟。
- 對不同意見進行範圍檢查:兩個探測可能在不同範圍內都事實正確(一個資料表 vs 整個資料庫,一個來源 vs 所有來源)。在比較數字之前,先命名範圍。
- 區分被駁斥 / 過時 / 不完整。 「今天的數字不同」並不表示主張在撰寫時錯誤——在聲稱「被駁斥」之前,請檢查歷史記錄/時間戳。
- 自行指定最終裁決標籤:
[V-code](已驗證,對比來源,引用 file:line)/[V-db](唯讀查詢,引用該查詢)/[V-probe](可重新執行的腳本)/[C](未驗證)/[X](被駁斥——指出取代它的內容)。提案是輸入,而非答案。 - 根據世系衡量協議。 同家族確認(Claude 批准者同意 Claude 編排者)是弱證據——同世系的批准者經實測會共享錯誤答案,甚至獨立產生完全相同的錯誤推論。跨家族確認或駁斥的權重超過任何同世系投票的數量;絕不要透過跨越共享世系的批准者之多數來解決爭議。第三家族(Moonshot)可作為實驗性的選擇加入席位;除非是獨立的,否則第三個席位買不到任何東西——因此請依家族而非人數來衡量——並請注意,一致的評審團可能僅表示該項目很簡單(setup.md)。
Concilium 迴圈(迭代輪次)
單次審查通常足夠。但當審查者的探測有缺口,或者你(編排者)基於可辯護的理由不同意提案時,一次交流不算 concilium——審議委員會需要審議。迴圈會持續運行審查輪次,直到裁決收斂或爭議被證明為真正存在。此迴圈由你(呼叫的 Claude 會話)編排——它是一種協議,而非一個腳本(批准步驟是你的判斷;沒有任何東西可以自動化它)。
每輪:
- 執行審查(包裝腳本)→ 取得五個區塊 → 依照上述協議批准。
- 決定該輪的結果並採取行動:
| 結果 | 條件 | 行動 |
|---|---|---|
| 收斂 | 你驗證了探測的承載步驟且它成立 | STOP——發出最終標籤。 |
| 爭議 | 探測有缺口、錯誤範圍,或者你有具體的、有證據支持的異議 | 將本輪的 PROBE 連同你的異議寫入一個輪次檔案;使用指向該檔案的 -PriorRounds/PRIOR_ROUNDS 執行下一輪。 |
| 乾涸 | 一輪沒有添加新的可驗證證據——審查者重申,或在 CAVEAT 中表示沒有新路徑 | STOP——以 [C]/[POLICY] 將未解決的問題上報給擁有者。這是抗振盪防護。 |
| 上限 | 已達輪次限制(預設 3)但未收斂 | STOP——呈現當前狀態並上報;真正的爭議是一種發現,而非失敗。 |
設計規則(它們直接源自陷阱):
- 每輪使用新的會話——絕不要使用恢復鏈結。 迴圈正是陷阱 #3 所警告的「長鏈結」;透過
-PriorRounds檔案攜帶上下文,而非codex exec resume。每輪從乾淨狀態開始,且只看到已嘗試內容的簡潔摘要。 - 每一輪都必須添加一條新的證據路徑。 合約(規則 8)在審查者側強制執行此點;你在你的側強制執行——只有當異議有證據支持或指向一個具體的、可檢查的缺口時,它才值得進行一輪。「我不信服」不是一輪。
- 批准者保持固定(你 / Fable);隨著爭議範圍縮小,審查者可以降低層級。 第 1 輪使用研究層級;一旦範圍縮小到特定機械...