Markdown 版本
AI-translated from English; not yet reviewed by a fluent editor.
# OpenRouter Armor 如何篩查工具呼叫,以及何時必須由用戶端阻止執行
> OpenRouter Armor 依照開發者規則,對模型提出的工具呼叫進行分類。Responses 和 Chat Completions 可以攔下被標記的呼叫;Messages 相容模式則由用戶端負責阻止執行。
By BIG CHANGE Editorial
Published: 2026-10-17T01:51:13.522Z
Updated: 2026-10-17T01:51:13.522Z
Canonical: https://bigchange.ai/blog/openrouter-armor-tool-call-screening-client-enforcement

AI-generated conceptual illustration by BIG CHANGE; no actual OpenRouter interface or tested security result is depicted.
OpenRouter 的[Armor 測試版](https://openrouter.ai/docs/guides/features/plugins/armor)在模型提出的工具呼叫與可能執行它的應用程式之間,加入了規則分類器。對代理開發者來說,關鍵在於判定結果究竟在哪個環節阻止執行。在 Chat Completions 和 Responses 中,Armor 可以攔下被標記的呼叫。在 Messages API 的 Claude Code 相容模式中,被標記的 `tool_use` 仍會留在回應中,必須由用戶端拒絕執行。
目前的文件介紹了自2026年10月起提供的測試版。BIG CHANGE 於10月17日查閱了文件中的請求與回應契約。我們沒有發送 API 請求、執行代理,或測量其安全效能。
## 重大變化
- **有何改變:** OpenRouter 代理可以先將提出的工具呼叫交由分類器處理,在呼叫抵達應用程式前,套用開發者撰寫的規則。在預設的強制執行流程中,被標記的呼叫會略過執行,並回傳原因,讓模型可以繼續。
- **為何重要:** 開發者可以用自然語言描述動作層級的限制,包括針對嚴格限定的允許作業設定例外。不過,Messages 相容模式的契約仍把執行的決定性一步交給用戶端:忽略標記判定的用戶端,仍可能執行該呼叫。
- **值得留意:** 團隊必須讓用戶端配合所選 API 輸出模式,以自身流量測試規則,並決定分類器出錯時應如何處理。測試版格式可能改變,OpenRouter 也表示,分類器既可能攔下可接受的呼叫,也可能漏掉不可接受的呼叫。
## 從提議到判定,追蹤一次呼叫
OpenRouter 表示,每當模型提出工具呼叫,都會在轉交應用程式前先暫扣。其決策模型會收到呼叫、規則,以及截至當下的對話,估計每條規則是否符合,再將結果彙整為 `flagged` 或 `not_flagged`。未被標記的呼叫會原樣放行。在強制執行模式中,被標記的呼叫會註明略過執行;模型會收到原因,可以嘗試範圍更小的呼叫,或解釋拒絕原因。這是分類器對擬議動作的判斷,並不能證明後續工具或整個代理都是安全的。
不同層級的規則回答不同問題。符合 `hard_deny` 時,無論是否有允許規則或使用者請求,都會阻擋。符合 `soft_deny` 時,可由符合 `allow` 的規則解除,也可以由使用者在對話中,明確要求對該確切目標執行該確切操作來解除。`allow` 規則本身絕不會阻擋呼叫。OpenRouter 文件也記載了內建的軟性拒絕規則,適用於使用者已設定且未撤銷的界線。開發者可在 `environment` 中提供受信任的儲存庫或部署目標等事實;過時資訊可能降低規則的精確度。具名規則物件會在判定中顯示 ID 和名稱。可選的門檻值預設為:拒絕規則0.6,允許規則0.7。
文件中的[Responses 範例](https://openrouter.ai/docs/guides/features/plugins/armor#example)為 `bash` 工具設定針對 `git push` 的硬性拒絕規則。使用 `output_mode: "custom_item"` 時,被標記的推送會替換為 `openrouter:armor_blocked` 項目,內含呼叫和原因,後面接著模型的回應。範例展示的是文件所述的服務回傳結果,並非 BIG CHANGE 進行的測試。
## 執行工具前,先選擇輸出契約
在 Chat Completions 和 Responses 中,預設的 `text` 模式會移除被阻擋的呼叫,並在助理文字中加入 `<openrouter_armor_blocked>` 標記。Responses API 也支援 `custom_item`,會在原本出現 `function_call` 的位置回傳帶有類型資訊的阻擋項目。文件表示,下次 Responses 輸入應原樣回傳該項目,而不要另外為它建立 `function_call_output`。`safeguard_results` 會依呼叫 ID 記錄判定。
若請求含有 `safeguards`,Messages API 的預設行為則有明顯不同:`claude_code_compatibility` 會將被標記的 `tool_use` 留在 `content[]` 中,並把其 `flagged` 結果加入 `safeguard_results`。**應用程式必須讀取該結果,並拒絕執行呼叫。** OpenRouter 明確警告,忽略判定的 Messages 用戶端會執行被標記的工具操作。無法控制用戶端的開發者,可以在 Messages 中要求 `output_mode: "text"`,由 OpenRouter 攔下呼叫。若要求 API 使用它無法承載的輸出模式,會收到400回應。
透過 OpenRouter 的 Ori metaharness 使用 Claude Code 自動模式時,會採用 Messages 契約,無須額外加入 Armor 外掛項目。文件表示,Claude Code 會拒絕被標記的呼叫,將錯誤結果寫入對話紀錄,然後讓模型繼續。文件也表示,支援自身分類器的 Anthropic 端點可以提供直接轉傳的判定;其他端點則由 Armor 評估。這是文件記載的整合行為,並不表示所有第三方用戶端都正確實作了它。
## 設定並檢查範圍明確的規則集
對自訂代理來說,[Armor 指南](https://openrouter.ai/docs/guides/features/plugins/armor#example)會放入一個 `armor` 項目,位置是 `plugins`,並包含有版本的 `classifier_context`(`v: 1`)、`auto_mode` 規則,以及可選的環境事實。先確定規則應識別的動作與受保護資源,再選擇拒絕類型:若使用者同意也不應解除禁令,採用硬性拒絕;若明確同意或具名允許條件可合理解除,採用軟性拒絕。文件建議描述動作,而非僅描述某種指令寫法,並保持環境事實為最新狀態。
預設的 `enforce` 模式會依判定採取動作。`audit` 會回報相同判定,但放行所有呼叫,包括被標記的呼叫。這可用來檢查真實流量,在強制執行前調整規則,本身並不是保護模式。稽核模式不能搭配 `claude_code_compatibility` 使用。不論採用哪種模式,都應讀取 `safeguard_results`:`not_flagged` 表示允許,`flagged` 表示符合某條規則,`unavailable` 表示評估失敗,而 `skipped` 表示未經評估的供應商原生工具。串流時,判定物件會在回應結尾抵達,因此使用 Messages 的用戶端必須等它到達,才能依工具操作採取動作。
OpenRouter 列出 `on_error: "block"` 為分類器逾時、出錯,或無法處理過大請求時的預設值;`on_error: "log"` 則會放行呼叫。在 Claude Code 相容模式中,狀態為 `unavailable` 的呼叫會被放行,判定結果仍然可見。供應商原生伺服器工具預設會略過,除非 `evaluate_native_tools` 強制讓它們離開原生路徑接受評估。這些設定與實際工具路徑,都應納入團隊的整合檢查;僅有 Armor 項目,不能證明所有工具都經過評估。
## 測試版的成本、速度與涵蓋範圍限制
OpenRouter 表示,載入其 Claude Code 相容規則集後,評估額外增加了**中位數279毫秒、90百分位334毫秒**的延遲。這些是供應商在所述條件下回報的測量值,並非特定代理或所有規則集的基準測試。每次呼叫會在放行或阻擋前評估一次。測試版期間不收評估費;OpenRouter 表示,會在正式推出前公布定價。文件沒有確立未來費率。
決策模型以自然語言參數對照自然語言規則作判斷,因此可能產生誤判或漏判。文件建議,使用真實流量的稽核判定,調整個別規則的門檻。目前 Armor 評估尚不支援 HIPAA、Zero Data Retention,或有資料地區限制的請求。在這些情境啟用外掛的請求會收到403回應;Claude Code 請求則會將呼叫以 `unavailable` 狀態放行,Claude Code 隨後退回本機自動模式評估。測試版警告也涵蓋設定欄位、`safeguard_results`,以及 `openrouter:armor_blocked` 項目類型的變動。
Armor 在模型將呼叫交給應用程式時,篩查擬議呼叫。因此,它的機制不同於[微軟的 MXC 指令限制機制](https://bigchange.ai/blog/mxc-agent-command-containment-guide)與[NVIDIA 的 OpenShell 和 Sentry 執行階段控制](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls),後兩者在工作負載或其存取周圍實施限制。對 Armor 而言,當下的實作決策是:所選回應格式會攔下被標記的呼叫,還是必須由用戶端阻止執行。
## 來源與延伸閱讀
- [OpenRouter Armor 文件](https://openrouter.ai/docs/guides/features/plugins/armor),查閱日期為2026年10月17日。這是關於測試版狀態、分類器流程、規則優先順序、API 回應契約、錯誤行為、隱私情境排除項、所報告延遲及測試版計費的一手來源。這些是 OpenRouter 文件中的說法;BIG CHANGE 並未執行該外掛。
- [BIG CHANGE 關於微軟 MXC 的報導](https://bigchange.ai/blog/mxc-agent-command-containment-guide)解釋了針對代理產生的指令,依政策施加限制的方式。它介紹的是另一層執行控制,並非 Armor 的早期階段。
- [BIG CHANGE 關於 NVIDIA OpenShell 和 Sentry 的報導](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls)介紹軟體存取控制,以及可選的硬體監控設計。這是相關背景,並非這項 OpenRouter 功能的直接延續。
## Sources
- [OpenRouter Armor 文件](https://openrouter.ai/docs/guides/features/plugins/armor) — 2026年10月17日查閱的第一方產品文件。記載測試版狀態、分類器與規則行為、API 回應形式、錯誤、受限制情境、所報告延遲及測試版計費。這是供應商說法,而非獨立測試。
- [BIG CHANGE:如何為代理產生的指令設定 MXC 政策](https://bigchange.ai/blog/mxc-agent-command-containment-guide) — 先前對另一種指令限制機制的報導;僅用於說明報導關係的背景。
- [BIG CHANGE:NVIDIA 的代理安全平台](https://bigchange.ai/blog/nvidia-open-agent-safety-platform-agent-controls) — 先前對另一種執行階段存取控制及可選監控設計的報導;僅用於說明報導關係的背景。
BIG CHANGE 電子報
掌握全貌,按照自己的步調。
關於人工智慧和機器人技術的近期報導、值得關注的轉變,以及可運用的實用想法。選擇每日快訊、每週摘要或每月觀點。
Next scheduled send (UTC): . Your first edition arrives at the next scheduled send after you confirm.