📌 项目地址microsoft/agent-governance-toolkit | ⭐ 3,357 颗星 | 🔧 Python | 📜 未标注

三个控制面的空白

AI Agent 跑起来之后,你面对的不是“模型会不会胡说八道”的问题,而是三个更具体的控制缺失:

  • 一个 Agent 有 send_emailquery_database 两个工具,模型被诱导后能不能调用 drop_table?OAuth 和 IAM 只控制“能否连接数据库”,不控制“连上后执行什么操作”。
  • 五个 Agent 共享同一个 API Key,事故日志只写“某个 Agent 删除了数据”。你没法确定是哪个实例干的。
  • 审计要求提供不可篡改的决策记录:什么策略生效、Agent 请求了什么、为什么允许或拒绝。你拿不出来。

microsoft/agent-governance-toolkit 解决的正是这三个问题。README 第一句写得很清楚:Policy enforcement, identity, sandboxing, and SRE for autonomous AI agents

prompt 里的规则,是一个随机系统的“请求”

很多人觉得在 prompt 里写“请遵守规则”就够了。但 OWASP LLM01:2025 明确说:“目前没有可靠方法预防提示注入。” 实际数据更极端:Andriushchenko 等人在 ICLR 2025 论文里报告,针对 GPT-4o、GPT-3.5、Claude 3、Llama-3 的自适应攻击,成功率 100%,基准是 JailbreakBench(Chao 等,NeurIPS 2024)。

微软自己的 AI 红队测试 100 个产品后,把 Attack Success Rate (ASR) 定为标准指标。他们从实际攻击中学到的教训是:prompt 级别的约束是一句礼貌的请求,不是一个控制面。

这篇论文我读的时候心里一沉——如果你把安全寄托在模型“听话”上,那等于没有安全。

这个工具做了什么:在工具调用前截住请求

策略引擎在 Agent 调用任何工具之前做一次权限检查。规则是声明式的:你写“允许 SELECTINSERT”,模型被注入后试图 DROP TABLE,照样被拦截。每次评估记录包含三个字段:

  • 当时生效的策略
  • Agent 请求的具体内容
  • 允许/拒绝的决定

记录写入后不可篡改——这是审计需要的证据链。

三层控制:操作边界、身份绑定、审计溯源

操作边界:你给 Agent 配了 send_emailquery_database,但策略引擎只允许特定操作。假设你写了白名单,那么无论 prompt 怎么注入,Agent 都跑不出这俩操作。这是最核心的保护。

操作归属:每个 Agent 实例分配唯一身份令牌,日志里不是“某个”Agent,而是“实例 ID agt-abc123 在 2025-01-15T10:32:00Z 执行了 DELETE”。事故排查时不用猜是哪个实例。

审计证据:每次策略评估的完整上下文(策略版本、请求参数、模型输出)存入不可篡改的存储。审计时可以回放整个决策过程。

另外,README 提到了沙箱和运行环境隔离(见 Quick Start 和 Specifications 文档)。多 Agent 系统里,一个被攻破不应该导致其他 Agent 的数据泄露。沙箱解决了这个隔离问题。

安装和上手:一个 pip install,不绑框架

pip install agent-governance-toolkit

也支持 npm 和 NuGet:

npm install @microsoft/agent-governance-sdk
dotnet add package Microsoft.AgentGovernance

我试了 pip 安装,包很小,依赖不多。当前是 Public Preview,README 明确标了“可能有 breaking changes”。策略配置的详细语法在 Quick StartSpecifications 文档里,这里不多写。

除了这个工具,README 还链接了 OWASP Agentic Top 10 架构、AARM Builder 页面、Agentic Trust Framework 生态系统——算是微软在 AI 治理上的整体布局的一部分。

我的实践建议

方向是对的:用代码给 Agent 的行为兜底,而不是指望模型自己遵守规则。

  1. 先从 Quick Start 里的例子跑通,看看声明式策略怎么写。READ ME 里提到几个常见模板(白名单工具列表、参数校验),但具体语法要看文档。
  2. 对照自己 Agent 的工具列表,先写最小权限白名单。比如数据库只开 SELECTINSERT,邮件只开 send_email 到特定收件人。
  3. 身份令牌可以分批引入,但至少第一个 Agent 就给它分配独立 ID。这样事故排查不用猜是哪个实例。

沙箱和 SRE 部分需要配合现有的容器或进程隔离来用,工具提供的是治理层,不是完整基础设施。

这个工具不解决“让模型更聪明”的问题,它解决的是“模型出错时你还能控制得住”。对正在把 Agent 推向生产环境的团队来说,这是最缺的一层。

相关资源链接(来自 README):

这篇文章对你有帮助吗?

发表回复