📌 项目地址:microsoft/agent-governance-toolkit | ⭐ 3,357 颗星 | 🔧 Python | 📜 未标注
三个控制面的空白
AI Agent 跑起来之后,你面对的不是“模型会不会胡说八道”的问题,而是三个更具体的控制缺失:
- 一个 Agent 有
send_email和query_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 调用任何工具之前做一次权限检查。规则是声明式的:你写“允许 SELECT 和 INSERT”,模型被注入后试图 DROP TABLE,照样被拦截。每次评估记录包含三个字段:
- 当时生效的策略
- Agent 请求的具体内容
- 允许/拒绝的决定
记录写入后不可篡改——这是审计需要的证据链。
三层控制:操作边界、身份绑定、审计溯源
操作边界:你给 Agent 配了 send_email 和 query_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 Start 和 Specifications 文档里,这里不多写。
除了这个工具,README 还链接了 OWASP Agentic Top 10 架构、AARM Builder 页面、Agentic Trust Framework 生态系统——算是微软在 AI 治理上的整体布局的一部分。
我的实践建议
方向是对的:用代码给 Agent 的行为兜底,而不是指望模型自己遵守规则。
- 先从 Quick Start 里的例子跑通,看看声明式策略怎么写。READ ME 里提到几个常见模板(白名单工具列表、参数校验),但具体语法要看文档。
- 对照自己 Agent 的工具列表,先写最小权限白名单。比如数据库只开
SELECT和INSERT,邮件只开send_email到特定收件人。 - 身份令牌可以分批引入,但至少第一个 Agent 就给它分配独立 ID。这样事故排查不用猜是哪个实例。
沙箱和 SRE 部分需要配合现有的容器或进程隔离来用,工具提供的是治理层,不是完整基础设施。
这个工具不解决“让模型更聪明”的问题,它解决的是“模型出错时你还能控制得住”。对正在把 Agent 推向生产环境的团队来说,这是最缺的一层。
相关资源链接(来自 README):