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 元编排框架使用 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.