P2 multi-agent-case AI工程Synapse自动化

AI团队的决策边界:什么时候该授权Agent自主决策

从'每次都来问我'到'专业的事专业的人做'——一个实际使用Claude Code团队的授权演进

  • 用"可逆性 × 影响范围"两个维度给决策分类,不要靠感觉授权
  • 显式的禁止操作清单,比模糊的权限收紧更有效
  • 区分"确认需求"和"信息需求",能消除约60%的无效中断
  • 中等风险决策用异步日志替代同步审批,不卡Agent工作流
  • 建授权边界的过程,本身就是把团队隐性规范显式化的过程

问题背景:我们花大价钱买了一个每五分钟要签字的实习生

三个月前,我们团队使用 Claude Code 的日常是这样的:一个任务跑起来,平均每 4-5 分钟会触发一次人工确认。Agent 写到一半停下来,有人确认,它继续写几行,又停。一天下来,光是响应这些中断,团队的上下文切换成本加起来大概两个小时。我当时有一个很具体的感受——这不是在用 AI 提效,这是在用 AI 制造新的打扰源。效率甚至不如直接自己写,因为至少自己写不会打断别人。

但我们的第一反应不是去分析问题,而是本能地想"再加一个确认节点"或者"把权限再收紧一点"。这个本能是错的。真正的问题不是 Agent 该不该自主决策,而是我们自己都没说清楚哪些决策可以交出去、哪些必须留下来。没有这个答案,不管是放权还是收权,都只是在瞎调参数。

为什么这个问题比我们想象的难

我们一开始以为,授权边界是一个权限控制问题——只要把操作白名单/黑名单配清楚,Agent 就知道能做什么、不能做什么。但实际上,真正让我们踩坑的从来不是权限边界本身,而是权限边界外的灰色地带。

有一次我们给了 Agent 相对宽松的权限,让它自主完成一次内部工具库的重构。代码逻辑写得没问题,但它改动了一个对外接口的参数顺序——技术上这在它的操作范围内,但影响到了另一个团队正在并行开发的功能,联调的时候才炸出来。这是典型的"技术上正确,工程上灾难"。之后我们矫枉过正,加了一堆确认节点,又回到每五分钟停一次的状态。我们花了将近两个月,才意识到真正缺的不是更细的权限粒度,而是一套决策分类框架——让 Agent 和人都知道,不同类型的决策应该走什么路径。

核心设计决策:两个维度,四个象限

我们最终用两个维度来给决策分类:可逆性(这个操作做了之后能不能撤回)和影响范围(这个操作会影响哪些模块或团队)。

把这两个维度交叉,就有四个象限:

  • 高可逆 × 小范围:函数命名、注释风格、单元测试写法——直接授权,Agent 自己定,不需要问。
  • 低可逆 × 大范围:数据库 schema 变更、对外接口破坏性修改、大版本依赖升级——必须停下来走人工审批。
  • 高可逆 × 大范围:大面积格式化、日志级别调整——授权执行,但事后日志存档。
  • 低可逆 × 小范围:删除内部死代码——生成变更影响说明后快速人工确认,不走完整审批。

中间地带的处理方式是我们花时间最多的地方。我们要求 Agent 在操作前生成一段自然语言的"变更影响说明",而不是问"我可以继续吗"这种没有上下文的问题。格式大致如下:

# Agent 变更影响说明模板
operation: "修改 utils/cache.py 中 get_or_set 函数签名"
reversibility: medium  # high / medium / low
impact_scope:
  - modules: ["order_service", "user_profile"]
  - external_teams: []
reason: "当前签名不支持 TTL 参数,导致缓存无法按业务规则过期"
risk_if_not_reviewed: "order_service 调用方需同步更新,否则运行时报错"

人看到这个,10 秒内能判断要不要继续,而不是面对一个"确认操作?(y/n)"。这个改造之后,我们的无效中断请求减少了大约 60%。

显式的禁止操作清单

除了分类框架,另一个关键实践是在任务描述里加一段显式的禁止操作声明。不是含糊的"请谨慎操作",而是具体的行为约束:

# 任务描述末尾附加的边界声明示例
## 禁止自主决策的操作(遇到请生成影响说明后暂停)
- 修改 config/production 目录下的任何文件
- 删除超过 50 行的代码块
- 新增任何外部依赖(package.json / requirements.txt)
- 修改任何已有函数的对外签名

这件事有一个让我意外的副作用:给了清晰边界声明之后,Claude Code 在边界内的自主性反而更强了。原因是它不再需要在每个操作上猜测"这个我能不能做"——边界外的事明确标出来了,边界内的事它可以放心执行。这和给人分配任务是一样的逻辑:说清楚什么不能做,比说不清楚什么都能做,执行效率更高。

决策日志替代决策审批

对于中等风险决策,我们从"同步审批"改成了"异步日志"。Agent 先执行,同步记录决策理由,人在事后做异步审查。我们用一个 markdown 文件做决策日志,格式如下:

## 2024-01-15 14:32 | 中等风险操作记录

**操作**: 修改 utils/cache.py get_or_set 签名,新增 ttl 参数
**理由**: 业务侧需要按 key 类型设置不同过期时间
**预期影响**: order_service 调用方需同步更新
**实际影响**: (事后填写)

这需要团队有一定的风险容忍度,但好处是 Agent 不会因为人的响应延迟而卡住,而团队也能从日志里发现模式问题——比如某类操作反复出现在日志里,可能意味着边界声明需要调整,或者某个模块的设计本身有问题。

可移植的原则

如果你在给 Agent 划授权边界,先回答"什么决策人来做也不需要讨论"——能回答这个问题,才能回答"什么决策可以交给 Agent"。这个问题逼着你把团队的隐性规范显式化,而这个过程本身就是收益。

  1. 如果你在设计授权机制,用"可逆性 × 影响范围"做决策分类,不要靠经验和感觉划边界。
  2. 如果你发现 Agent 频繁中断,先区分是"确认需求"还是"信息需求"——前者可以通过边界声明消除,后者是真实阻塞,处理方式完全不同。
  3. 如果你想收紧 Agent 权限,优先写清楚禁止操作清单,而不是缩小整体授权范围——清单比范围更精确,副作用更小。
  4. 如果你在处理中等风险决策,把"等待审批再执行"改成"执行后日志存档",用异步审查替代同步阻塞,只要团队能接受这个风险容忍度。
  5. 如果你在构建 AI 工程团队,把授权边界建设当作工程规范梳理的契机——你会在这个过程里发现很多一直模糊但从未被迫明确的团队约定。

最后

我们把上面这套分类框架、变更影响说明模板和决策日志的实现,沉淀进了 Synapse 框架里。如果你的团队也在纠结授权边界怎么划,或者正在处理"Agent 频繁中断 vs Agent 偶发失控"这个两难,欢迎直接看代码实现——比重新踩一遍坑要快。有具体问题也可以在评论区或 GitHub issue 里聊,特别是那种"分类框架上看是中等风险,但在你们业务上完全不一样"的边缘案例,我很想知道别的团队是怎么处理的。