2026年5月26日 2 分钟阅读

当 AI Agent 调用危险工具时:用开源的 Enforra 实现精准管控

tinyash 0 条评论

AI 编码 Agent 的强大之处在于它们能调用各种工具——读写文件、执行命令、调用 API、操作数据库。但等等——你确定你的 Agent 不会因为一句误读的 prompt,就跑去执行 rm -rf / 或者给所有用户发退款邮件吗?

现实中,很多团队对 Agent 的控制全靠系统提示词(System Prompt)。但正如 Enforra 项目所说:System prompts are not a security boundary。prompt 可以被覆盖、被注入、被遗忘,真正需要的是在工具调用执行前的硬性控制层。

Enforra 是什么

Enforra 是一个开源的 Action Governance SDK,专门用于 AI Agent 工具调用的审批控制。它在你自己的工具回调函数执行之前介入,返回四种决策之一:

  • allow — 允许执行
  • block — 直接阻止
  • require_approval — 需要人工审批
  • log_only — 允许但记录详细日志

关键的特性是:Enforra 纯本地运行,不做任何网络调用,不收集遥测数据,不会替你去执行工具。你拥有全部控制权。

快速上手

Enforra 是基于 Node.js(20+)的 SDK,安装非常简单:

npm install @enforra/sdk-node

然后在代码中初始化客户端并包裹你的工具调用:

import { createEnforraClient } from "@enforra/sdk-node";

const enforra = await createEnforraClient({
  policyPath: "./policies/starter/support-agent.yaml",
  auditPath: ".enforra/audit.jsonl",
});

const result = await enforra.enforceToolCall({
  agent: "coding-agent",
  tool: "terminal.run",
  args: { command: "npm install express" },
  context: { environment: "development" },
  execute: async () => {
    // 只有 allow 或 log_only 时才会执行到这里
    return { exitCode: 0, output: "installed" };
  },
});

console.log(result.decision); // "require_approval"

编写安全策略

策略用 YAML 文件定义,支持丰富的匹配条件和运算操作。来看几个实际场景。

场景 1:阻止读取 .env 文件

AI Agent 不应该能随意读取包含密钥的环境变量文件:

version: 1
defaults:
  decision: block
policies:
  - id: block-env-file-access
    match:
      tool: filesystem.read
    conditions:
      - field: args.path
        operator: contains
        value: ".env"
    decision: block

场景 2:npm install 需要审批

安装依赖是一个高风险操作——你不想 Agent 未经确认就安装一个有已知漏洞的包:

  - id: approve-package-install
    match:
      tool: terminal.run
    conditions:
      - field: args.command
        operator: contains
        value: "npm install"
    decision: require_approval

场景 3:大额退款直接阻止

在客服场景中,限定 Agent 的退款额度:

  - id: block-large-refunds
    match:
      tool: stripe.refund
    conditions:
      - field: args.amount
        operator: gt
        value: 500
    decision: block

支持的操作符包括:eqneqgtgteltltecontainsnot_contains。条件可以组合使用 allany 逻辑,策略也可以设置 priority 来控制评估顺序。

Observe Mode:先观察再执行

对于已有 Agent 工作流的团队,直接在新环境上设置 block 策略可能过于激进。Enforra 提供了观察模式:

version: 1
mode: observe
defaults:
  decision: block
policies:
  - id: block-large-refunds
    match:
      tool: stripe.refund
    conditions:
      - field: args.amount
        operator: gt
        value: 500
    decision: block

在观察模式下,所有工具调用仍然正常执行,但审计日志会记录「应该被阻止的决策」和「实际执行的决策」。这样你可以在生产环境里安全地验证策略的正确性,确认没有误伤后再切换到强制执行模式。

用 CLI 初始化并测试策略

Enforra 还提供了 CLI 工具,帮助你从零开始搭建策略体系:

npx @enforra/cli init   # 创建 starter 策略和测试用例
npx @enforra/cli test   # 在本地验证策略决策

策略测试可以在 CI 中运行,防止策略回归导致意外的工具调用放行或阻止。

和其他方案的对比

  • System Prompt:最脆弱——prompt 可以被覆盖、被注入,没有硬性约束
  • 模型防火墙:在输入输出层面过滤,但无法感知工具调用的上下文和参数语义
  • MCP 代理:在 MCP 协议层面拦截,但仅限于 MCP 生态的工具
  • Enforra:直接在工具回调执行前拦截,与框架无关,支持任意自定义逻辑

Enforra 的定位最接近「应用层策略引擎」——不关心 Agent 用哪种框架(Claude Code、OpenAI、LangChain 都可以),只关心工具调用即将发生时的参数和环境上下文。

生产实践建议

  1. 先用观察模式上线:在生产环境跑 24 小时,收集所有工具调用的审计日志
  2. 从高风险工具开始:优先给 terminal.run、文件写入、数据库操作、支付接口设置策略
  3. 设置合理的默认行为defaults: block 是推荐的安全基线,白名单放行
  4. 审计日志定期检查audit.jsonl 包含每次决策的完整记录,可以用于合规审计
  5. 在 CI 中测试策略:防止政策变更意外放行危险操作

总结

Enforra 解决了 AI Agent 工具调用中的一个关键缺口:在工具执行前加一道可控的安全闸门。它的设计非常务实——纯本地运行、不依赖外部服务、配置灵活、支持观察模式渐进式上线。对于在生产环境中使用 AI Agent 的团队来说,这几乎是必备的基础设施。

项目的 GitHub 仓库包含了完整的文档、示例和 CLI 工具,完全开源(Apache-2.0),非常值得一试。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。