在 prompt 之外拦下工具调用:Microsoft agent-governance-toolkit
项目:microsoft/agent-governance-toolkit(AGT,Agent Governance Toolkit)
- 仓库:https://github.com/microsoft/agent-governance-toolkit
- 文档站:https://microsoft.github.io/agent-governance-toolkit
- PyPI:https://pypi.org/project/agent-governance-toolkit/
- npm:@microsoft/agent-governance-sdk
- NuGet:Microsoft.AgentGovernance
- crates.io:agent-governance
License MIT,当前为 Public Preview。定位是给自主 AI agent 做策略执行、身份、沙箱和 SRE,一次 pip install,框架无关。
三个绕不过去的问题
- 这个动作允许吗? 一个有
send_email和query_database权限的 agent,不应该能drop_table。OAuth scope 和 IAM role 管的是能连哪些服务,管不了连上之后能做什么。 - 是哪个 agent 做的? 多 agent 系统里五个 agent 可能共用一个 API key,出事时「某个 agent 干的」不构成事件响应。
- 能否证明发生了什么? 审计需要防篡改记录:当时生效的是哪条策略、agent 请求了什么、为什么放行或拒绝。
prompt 层不是控制面
在 prompt 里写「请遵守规则」,本质上是对一个随机系统提出的礼貌请求,不是控制面。OWASP LLM01:2025 明确说明 prompt injection 目前尚无万无一失的防法。Andriushchenko et al.(ICLR 2025)在 JailbreakBench 上对 GPT-4o / GPT-3.5 / Claude 3 / Llama-3 报出 100% 攻击成功率(自适应攻击 + logprob + 后缀优化)。Microsoft AI Red Teaming Agent 把 ASR(攻击成功率)作为这类失败的规范指标。
AGT 不在 prompt 里打这场仗。每一次工具调用、消息发送、委派,都在确定性应用层代码里、在模型意图真正落地之前被拦截。被内核拒绝的动作不是「不太可能」,而是结构上不可能。
Quick Start
要求 Python 3.11+:
pip install "agent-governance-toolkit[full]"
两行代码管住任意工具函数:
from agentmesh.governance import govern
safe_tool = govern(my_tool, policy="policy.yaml") # 每次调用都会被检查、记录、执行
每次调用都会评估 YAML 策略、把决策写入审计轨,被拦下时抛 GovernanceDenied。
policy.yaml
apiVersion: governance.toolkit/v1
name: production-policy
default_action: allow
rules:
- name: block-destructive
condition: "action.type in ['drop', 'delete', 'truncate']"
action: deny
description: "Destructive operations require human approval"
- name: require-approval-for-send
condition: "action.type == 'send_email'"
action: require_approval
approvers: ["security-team"]
行为示例:
>>> safe_tool(action="read", table="users")
{'table': 'users', 'rows': 42}
>>> safe_tool(action="drop", table="users")
GovernanceDenied: Action denied by policy rule 'block-destructive'
AgentControl:完整 API
from agent_control_specification import AgentControl
runtime = AgentControl.from_path(str("manifest.yaml"))
result = runtime.evaluate("input", {
"envelope": {"agent_id": "example-agent"},
"input": {"body": {"action": "web_search", "params": {}}}
})
print(result.verdict)
各语言 SDK
TypeScript:
import { PolicyEngine } from "@microsoft/agent-governance-sdk";
const engine = new PolicyEngine([
{ action: "web_search", effect: "allow" },
{ action: "shell_exec", effect: "deny" },
]);
engine.evaluate("web_search"); // "allow"
engine.evaluate("shell_exec"); // "deny"
.NET 走 GovernanceKernel + GovernanceOptions{PolicyPaths}:
kernel.EvaluateToolCall("did:mesh:agent-1", "web_search", ...);
builder.Services.AddMcpServer().WithGovernance(...);
Rust:
let client = AgentMeshClient::new("my-agent");
let result = client.execute_with_governance("data.read", None);
result.allowed
Go:
import agentmesh "github.com/microsoft/agent-governance-toolkit/agent-governance-golang"
client := agentmesh.NewClient("my-agent", agentmesh.WithPolicyRules(...))
client.ExecuteWithGovernance("data.read", nil)
五个语言 SDK 都实现了核心治理能力(policy / identity / trust / audit),Python 有完整栈。
CLI
agt doctor # 检查安装
agt verify # OWASP 合规检查
agt verify --evidence ./agt-evidence.json --strict # 证据弱则 CI 失败
agt red-team scan ./prompts/ --min-grade B # prompt 注入审计
agt lint-policy policies/ # 校验策略文件
运行时流程
Agent ──► Policy Engine (YAML/OPA/Cedar) ──► Identity (SPIFFE/DID/mTLS) ──► Audit Log (tamper-evident)
放行则工具执行;拒绝则抛 GovernanceDenied,并留下 Decision Record。每一层都是可选的,多数团队只跑策略执行 + 审计这两层。
组件
- Agent OS:策略引擎、agent 生命周期、治理闸门
- Agent Control Specification:无状态、确定性、fail-closed 的策略决策运行时(Rust 核心)
- Agent Mesh:agent 发现、路由、信任网格
- Agent Runtime:四层权限环的执行沙箱
- Agent SRE:kill switch、SLO 监控、混沌测试
- Agent Compliance:OWASP 验证、策略 lint、完整性检查
- Agent Marketplace:插件治理与信任评分
- Agent Lightning:带违规惩罚的 RL 训练治理
- Agent Hypervisor:执行审计、delta 引擎、内存承诺追踪、命令黑名单
其他能力
- MCP Security Gateway:工具投毒检测、漂移监控、typosquatting、隐藏指令扫描
- Shadow AI Discovery:跨进程、配置、仓库发现未注册 agent
- Governance Dashboard:实时 fleet 视图
- PromptDefense Evaluator:12 向量 prompt 注入审计
- Contributor Reputation
安装
| 语言 / 平台 | 包名 |
|---|---|
| Python | agent-governance-toolkit |
| TypeScript | @microsoft/agent-governance-sdk |
| Copilot CLI、Claude Code(插件)、Codex CLI、OpenCode | 插件形式 |
| .NET | Microsoft.AgentGovernance |
| Rust | agent-governance |
| Go | agent-governance-golang |
前置版本要求:Python 3.10+ / Node 18+ / .NET 8+ / Go 1.25+ / Rust 1.70+。
Python 发行版 v4.1.0 把 45 个包合并为 5 个:
core:策略引擎、能力模型、审计、MCP 网关、零信任身份、信任评分、A2A/MCP/IATP 桥runtime:权限环、saga 编排、终止控制、命令黑名单sre:SLO / 错误预算 / 混沌 / 熔断cli:agt[full]:元包
框架集成
Microsoft Agent Framework(原生 Middleware)、Semantic Kernel(原生)、AutoGen、LangGraph / LangChain、CrewAI、OpenAI Agents SDK、Claude Code、Google ADK、LlamaIndex、Haystack、Mastra、Dify、Azure AI Foundry、GitHub Copilot CLI。
规范与一致性测试
每个主要组件都有 RFC 2119 规范加一致性测试:共 992 个 conformance tests、29 个 ADR。覆盖范围包括 Agent OS Policy Engine、Agent Control Specification、AgentMesh Identity and Trust(135 tests)、Agent Hypervisor Execution Control(80)、AgentMesh Trust and Coordination(62)、Agent SRE Governance(111)、MCP Security Gateway(127)、Agent Lightning Fast-Path(100)、Audit and Compliance(157)。
标准合规
- OWASP Agentic AI Top10:全部 ASI 风险类别都映射到确定性控制
- NIST AI RMF 1.0:GOVERN / MAP / MEASURE / MANAGE
- EU AI Act
- SOC 2
- AARM Extended(R1–R9)
- ATF(五要素)
边界
AGT 在应用中间件层强制治理,不是 OS 内核级隔离;策略引擎与它治理的 agent 共享同一个进程边界。生产环境的做法是每个 agent 跑在独立容器里,用 OS 级隔离补齐。
README 里的原话是:
该工具包提供应用层(Python middleware)治理,而非操作系统内核级隔离。策略引擎与其治理的代理运行在同一个 Python 进程中,这与所有基于 Python 的 agent 框架使用相同的信任边界。
LIMITATIONS.md 中列明了完整的设计边界。安全工具链侧使用 CodeQL、Gitleaks、ClusterFuzzLite、Dependabot、OpenSSF Scorecard。
AGT 值得关注的地方在于它把治理放在模型意图落地前的工具调用边界上,而不是继续在 prompt 里加约束;同时对进程边界的诚实说明,也让人容易判断它适合放在哪一层。