
想象一下:你的 AI Agent 能自己执行 Shell 命令、读写文件、管理 Git 仓库、调第三方 API,还能跟其他 Agent 协作完成任务——你当真敢让它直接跑起来?
说白了,这就是 AI Agent 时代的一个核心矛盾,我们管它叫 "Agent 自治悖论":Agent 越能干、越自主,捅娄子的半径就越大,对治理的要求就越苛刻。
过去一两年,不少团队把 AI Agent 部署到生产环境后,翻车的案例一个接一个:
DROP TABLE,测试数据库一秒被清空这些事故的根源不是 Agent 能力不行,而是缺少一套系统化的治理机制。
本文以开源 AI 智能体平台 Markus 的治理体系为蓝本,深入剖析一套生产级的 AI Agent 安全治理方案——从信任体系、任务状态机、工作区隔离到审计追踪,逐一拆解其设计与实现。
Markus 是一个开源 AI 数字员工平台,GitHub 地址:https://github.com/markus-global/markus
在深入具体方案之前,先理解 AI Agent 治理要解决的四类核心风险:
代码执行风险 — Agent 可通过 shell_execute 在宿主机上执行任意命令。即便 Agent 本身没有恶意,LLM 的幻觉特性也可能导致其执行错误命令。典型场景:修复路径问题时通过 rm -rf 删除了错误目标目录。
数据隐私与泄露 — Agent 可读取文件系统上的任何文件。若工作区包含敏感配置文件、客户数据或密钥,Agent 可能不经意间将其写入日志或暴露给不相关人员。
质量控制挑战 — AI Agent 的输出不具备"确定性":同一任务、同一 Agent,两次执行的代码结构可能完全不同。没有 review 机制,低质量产出会直接进入生产环境。
成本失控 — 每次 LLM 调用都产生费用。陷入死循环的 Agent 可在数分钟内消耗数百美元 API 费用,而多 Agent 并行会进一步放大风险。
Markus 治理体系的核心哲学是 "Trust but Verify"(信任但验证)。但与传统安全模型不同,Markus 引入了一个动态调整的渐进式信任体系——Agent 的自治权限不是静态分配的,而是通过持续的行为表现逐步获得的。
信任级别 | 条件 | 自治权限 |
|---|---|---|
Probation(试用期) | 新 Agent 或信任分 < 40 | 所有任务需要人工审批 |
Standard(标准) | 信任分 >= 40,交付物 >= 5 | 常规任务自动审批 |
Trusted(受信) | 信任分 >= 60,交付物 >= 15 | 更高自治权,可评审他人 |
Senior(高级) | 信任分 >= 80,交付物 >= 25 | 最高自治权,关键评审角色 |
这里的关键洞察是:信任是挣来的,不是赋予的。每个 Agent 从最低级别(Probation)开始,没有任何"默认信任"。
信任分不是简单的好评率,而是一个多维度加权评分系统,主要因素包括:
agent_send_message 与其他 Agent 协作,是否及时响应 review 请求。in_progress 超过 24h)会被记录。不同信任级别直接影响 Agent 在任务审批流水线中的权限:
in_progress(auto-approve),但标准和高优先级任务仍需要经理或人工审批。当 Agent 的信任分达到升级门槛时,系统不会自动升级——而是触发升级评估流程:
这确保了"信任升级"是一个有意识的管理决策,而不是自动化积累。
如果说信任体系是"谁可以做",那么任务状态机定义的是"事情怎么做"。Markus 的任务系统基于一个精确定义的有限状态机(FSM),包含 9 种状态和明确的转移规则。
状态 | 标签 | 含义 |
|---|---|---|
| 待审批 | 已创建,等待审批 |
| 进行中 | 已批准,正在执行 |
| 阻塞中 | 因依赖或手动暂停 |
| 评审中 | 执行完成,等待 reviewer |
| 已完成 | 成功结束 |
| 失败 | 不可恢复错误 |
| 拒绝 | 提案未被批准 |
| 已取消 | 开始工作后主动停止 |
| 已归档 | 历史记录,不再活跃 |
pending ──────► in_progress ──► review ──► completed ──► archived
│ │ ▲ │
│ │ │ └── revision ──► in_progress
│ ▼ │
│ blocked ┘
▼ │
rejected failed ──► archived
│
└── retry ──► in_progressreview,不是 completed。强制第三者 review。reviewerId,且不能与执行者是同一 Agent。in_progress,且 executionRound 递增。之前的执行上下文会以 "🔴 REVISION REQUIRED" 格式传递给 Agent。rejected 表示"提案被否"(工作尚未开始);cancelled 表示"主动停止"(已经开始工作后)。语义严格区分。Markus 在任务创建环节设置了三级审批门禁(Approval Gates):
审批层级 | 触发条件 | 审批人 |
|---|---|---|
Auto | 低优先级、Agent 自己创建的任务 | 无需审批(直接进入 |
Manager | 标准优先级任务 | 团队 Manager Agent |
Human | 高/紧急优先级、共享资源影响 | 人类管理员(HITL) |
动态调整:Agent 的信任级别也会影响审批层级。例如,Senior 级别的 Agent 创建的标准任务可以 auto-approve,而 Probation 级别的 Agent 即使创建低优先级任务也需要人工审批。
当一个任务进入 review 状态时,系统自动执行:
reviewerIdReviewer 有两个选项:
acceptTask() → 任务进入 completedrequestRevision(taskId, reason) → 任务回到 in_progress,executionRound 递增多 Agent 协作最危险的问题之一就是互相干扰——A Agent 不小心覆盖了 B Agent 正在编辑的文件。
Markus 为每个 Agent 分配专属工作区目录:
~/.markus/agents/{agentId}/workspace/硬性强制规则:
~/.markus/agents/{agentId}/workspace/)设计哲学:读自由,写隔离。"读自由"确保 Agent 可以查看整个项目的上下文;"写隔离"确保多 Agent 不会产生文件级别的竞态条件。
AI Agent 操作 Git 仓库是高风险场景。一个错误的分支推送可能导致代码丢失。Markus 实现了三阶 Git 命令治理:
层级 | 操作 | 行为 |
|---|---|---|
✅ Allow(允许) |
| 立即执行 |
⏳ Approval(审批) |
| 暂停执行,请求 HITL 审批 |
🚫 Deny(拒绝) |
| 始终拦截,不可执行 |
设计亮点:
HITLService.requestApprovalAndWait() 阻塞等待人工决策。当 Agent 执行 git commit 时,shell_execute 工具会自动注入 --author 和 --trailer 参数:
Author: Agent Name agent-id@markus.local
Trailer: Agent-ID: <id>, Task-ID: <taskId>, Team: <team>, Org: <org>这意味着每个 commit 都可以追溯到具体的 Agent 和任务——审计的根基。
即使有信任体系和隔离措施,Agent 仍可能陷入异常状态。Markus 设计了多层熔断与防护机制:
当 Agent 在同一轮工具调用中迭代超过 30 次时,系统触发 Reflection(反思)机制:
这防止了 Agent 在同一个死胡同里无限循环。
当 Agent 连续遇到 2 次 LLM 调用失败(网络错误、API 超时、响应格式异常等)时,断路器自动打开:
控制维度 | 配置项 | 默认值 |
|---|---|---|
Chat 超时 | LLM 调用超时 | 60 秒 |
Stream 超时 | SSE 流式响应超时 | 120 秒 |
任务执行超时 | Stall detection | 24h / 2x 平均完成时间 |
Review 超时 | Review 未处理 | 12h(通知人类) |
工具迭代上限 |
| 200 次 |
控制级别 | 功能 | 效果 |
|---|---|---|
Pause Agent(暂停单个) | 暂停特定 Agent | 取消当前 LLM 流,停止注意力循环 |
Pause All(全局暂停) | 暂停全部 Agent | 同上,作用于所有 Agent |
Emergency Stop(紧急停止) | 全局紧急停止 | 取消所有活跃流,停止所有 Agent |
系统公告 | 广播消息 | 注入所有 Agent 的系统提示 |
关键设计:暂停状态是持久化的。重启服务后,暂停的 Agent 保持暂停状态不会自动恢复。
没有审计的安全是虚假的安全。Markus 建立了多层审计体系:
每一次任务状态变更都经过 updateTaskStatus() 方法——这是所有状态变更的唯一入口。每次变更记录包含:
每个 Agent 维护一个完整活动日志,记录每一次:
shell_execute, file_write, git 等)— 包含完整参数和返回值报告类型 | 频率 | 内容 |
|---|---|---|
日报 | 每日 | 已完成/进行中/阻塞的任务、Token 消耗 |
周报 | 每周 | 进展、成本趋势、下周计划(需审批) |
月报 | 每月 | 月度汇总、成本分析、质量指标 |
Markus 的数据库包含专门的 audit_logs 表,记录每个操作的事件类型、操作描述、关联的 Agent/任务/项目信息。
任何治理体系的最终防线都是人类。Markus 提供了多层次的人机交互机制:
当 Agent 需要人类决策时,使用 request_user_approval 工具:
此机制用于:Git 操作审批、高优先级任务创建、共享资源变更确认。
Markus Web UI 提供完整的治理控制面板:
人类用户通过通知铃铛接收各类事件:
notify_user)每个通知可以直接点击导航到相关页面。
维度 | Markus | LangChain/LangGraph | AutoGen | CrewAI |
|---|---|---|---|---|
信任体系 | ✅ 4 级渐进式信任 | ❌ 无 | ❌ 无 | ❌ 无 |
任务状态机 | ✅ 9 状态 FSM | ❌ 基础状态 | ❌ 无 | 基础状态 |
Review 流程 | ✅ 强制 submit-review-merge | ❌ 无 | ❌ 无 | ❌ 无 |
工作区隔离 | ✅ 硬性跨 Agent 写禁止 | ❌ 无 | ❌ 无 | ❌ 无 |
Git 治理 | ✅ 三阶模型 | ❌ 无 | ❌ 无 | ❌ 无 |
审计追踪 | ✅ 完整活动+决策日志 | ❌ 无 | ❌ 部分 | ❌ 部分 |
HITL 审批 | ✅ 内建支持 | ⚠️ 需手动实现 | ✅ 基础 | ⚠️ 需手动实现 |
熔断/断路器 | ✅ 内置 | ❌ 无 | ❌ 无 | ❌ 无 |
成本控制 | ✅ Token 追踪 + 超时 | ❌ 无 | ❌ 无 | ❌ 无 |
企业部署 | ✅ 单命令自托管 | ⚠️ 需自行编排 | ⚠️ 需自行编排 | ⚠️ 需自行编排 |
大多数 Agent 框架专注于"如何让 Agent 工作",而 Markus 投入了大量工程精力在"如何安全地让 Agent 工作"——这恰恰是企业级部署最需要的部分。
如果你正在规划将 AI Agent 引入生产环境,以下建议供参考:
永远不要给新的 Agent 直接分配 Trusted 级别。即使是一个简单的自动化 Agent,也应该从 Probation 开始。通过观察实际行为与预期的差异,逐步调整策略。
高风险操作(数据库变更、生产部署)→ Human 审批;中风险操作(代码开发、文档撰写)→ Manager 审批;低风险操作(只读查询、数据汇总)→ Auto。
建议保留活动日志至少 90 天,启用日报 + 周报,配置 stall detection 告警。
{
"circuitBreaker": { "failureThreshold": 2, "recoveryTimeMs": 300000 },
"loopDetection": { "iterationThreshold": 30, "triggerReflection": true },
"timeout": { "taskMaxDurationMs": 86400000, "llmCallTimeoutMs": 60000 }
}先让一个 Agent 在 Probation 下完成简单的独立任务,验证行为符合预期后,再逐步提升信任级别和扩展团队。
AI Agent 治理面临一个根本性的平衡问题:如何在 Agent 的自主性和安全性之间找到最佳平衡点?
Markus 给出的答案是:用渐进式信任代替非黑即白的权限模型,用严格的任务状态机保证工作流的确定性,用工作区隔离防止互相干扰,用完整的审计链条提供可追溯性,用 HITL 机制让人始终在回路中。
一个好的治理体系,不是在一开始就筑起高墙把所有风险挡在门外——因为那样也会挡住 Agent 的创造力。而是在 Agent 的能力成长过程中,动态调整"自治"和"约束"的比例,让 Agent 用实际表现证明自己值得更多信任。
这整套治理框架已经在 Markus 的开源代码中完整实现(https://github.com/markus-global/markus),开发者可以直接部署体验,也可以将其中借鉴的设计思想应用到自己的 AI Agent 系统中。
毕竟,未来不是 AI 替代人类,而是治理得当的 AI 团队与人类高效协作。而治理,正是让这种协作成为可能的基石。
Markus Engineering Team · 技术文章系列
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。