InvariantEval 代理技能
InvariantEval 強制執行您宣告的不變量。它不會讓代理「正確」,也不會為您重寫輸出。唯一的真實主張是:您的代理在每個輸出上執行您聲明的安全規則,並在鎖定欄位未經人類確認而被自動填入時拒絕完成。
何時使用此技能
在完成任何結構化 JSON(或類似)輸出之前使用,當:
- 領域具有宣告的鎖定欄位(通過/失敗、合規狀態等)
- 您有(或需要)一個包含
field_policies和不變量斷言的suite.yaml - 人類應該擁有某些欄位,且模型不得自願填入它們
不要使用此技能來猜測不變量。您的工作是讓宣告它們變得無摩擦,而不是推斷它們。
工作流程
1. 找到或建立一個宣告的套件
- 在專案中找到現有的
suite.yaml,或 - 將
suite.template.yaml複製到專案中,並讓使用者填入field_policies、equivalence_classes和assertions。
絕不能憑空發明鎖定欄位,除非在套件中有使用者宣告。
2. 在完成前執行不變量檢查
您有模型的原始解析輸出和預期的最終輸出。執行:
python agent-skill/invarianteval/check.py \
--suite path/to/suite.yaml \
--case-id agent-check \
--model-parsed /tmp/model_parsed.json \
--final-output /tmp/final_output.json \
--human-confirmed /tmp/human_confirmed.json
從當前輪次寫入 JSON 檔案。--human-confirmed 是可選的(當沒有明確確認時,使用 {})。
套件必須包含一個具有給定 --case-id(預設:agent-check)的案例以及您想要強制的斷言。
3. 如果檢查失敗:停止
- 不要完成、提交或將輸出呈現為完整。
- 從 CLI 輸出中呈現確切的不變量失敗(例如
never_auto_filled[pass_fail_result])。 - 要求以下之一:
- 使用者編輯最終輸出以移除或修正違規,或
- 使用者明確確認欄位(在 fixture 中的
human_confirmed),或 - 使用者更新宣告的套件(很少發生)。
4. 如果檢查通過:繼續
僅在退出碼為 0 後完成。
MCP 替代方案
如果環境已安裝 [mcp] 附加功能,請優先使用 check_invariants MCP 工具,輸入相同。請參閱 docs/mcp.md。
誠實框架(必要)
- 說:「宣告的不變量」、「拒絕完成」、「鎖定欄位自動填入」
- 絕不說:「自我修正」、「使代理正確」、「自動推斷不變量」