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

![Conceptual charcoal illustration of a desktop monitor and idle keyboard; abstract code strokes and one orange pending-call shape appear on the unbranded screen.](https://bigchange.ai/api/media/file/openrouter-armor-call-screening-concept-v1.png)
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) — 先前對另一種執行階段存取控制及可選監控設計的報導；僅用於說明報導關係的背景。
