乐于分享
好东西不私藏

AI智能体工具调用怎么管?亚马逊开源Dogwood给出答案

AI智能体工具调用怎么管?亚马逊开源Dogwood给出答案

给 AI 智能体“记小本本”:亚马逊云科技开源 Dogwood

大模型正在从“聊天机器人”进化成能自主调用工具、执行多步骤任务的 Agent。但问题也随之而来:谁来约束这些智能体一连串的动作? 单次拦截远远不够,因为 Agent 会把多个工具调用组合成工作流,真正的风险往往藏在“累积行为”和“操作顺序”里。

最近,亚马逊云科技开源了一门新策略语言 Dogwood,专门给 AI 智能体的工具调用“立规矩”。它采用 Apache 2.0 协议发布,并已在其 AgentCore Policy 中得到支持。

01 背景:AgentCore 与 Cedar 是什么?

在去年 re:Invent 大会上,AWS 推出了 AgentCore Policy。它的定位非常明确:位于模型之外的确定性控制层。模型只负责“提议”调用哪个工具,策略引擎负责“放行”或“拒绝”,而真正的执行机制对模型不可见。

这套机制底层使用 Cedar 作为策略语言。Cedar 有一个非常好的特性:它只看单个请求,而且同一个请求输入两次,无论之前发生过什么、策略以什么顺序运行,结果都相同。这种“无状态”特性让审计和自动形式化推理变得可行。

但代价也很明显:Cedar 只能限制单个动作,无法描述动作序列。而现实里的合规需求往往是序列化的:

- 必须先审批,再执行;- 累计转账金额不能超过上限;- 接触过机密数据后,不能再联系外部 API。

这正是 Dogwood 要解决的问题。

02 Dogwood 的核心能力:给策略加上“时序眼”

Dogwood 在 Cedar 的 `when` 子句之外,引入了第二种子句类型:`when temporal`,即时序条件。它允许策略回溯查看智能体已经执行过的操作历史。

在 Dogwood 里,事件对应工具调用请求及其结果,包括输入参数和发起主体;操作模式则来自智能体的 MCP 工具清单,每个工具会被直接映射为一个 Dogwood 操作。

实现上,时序条件会被转换成 Cedar 的上下文字段,解释器在 Cedar 做决策前,根据事件历史填充这些字段。换句话说,Dogwood 给 Cedar 配了一本“可信日记本”,让策略能基于过去做判断。

为了覆盖常见模式,Dogwood 提供了四个基于 Cedar 核心子集、以标准库宏形式定义的运算符:

formerly:判断某时间窗口内是否发生过某件事;count_within:计算某事件在窗口内发生了多少次;count_distinct_within:统计窗口内不同值的数量;sum_within:计算累计总额。

此外,`bind` 操作符可以把聚合结果命名,方便将当前请求与历史数据进行比较。

03 一个并发陷阱:只看“响应”会漏掉风险

Dogwood 发布时,AWS 举了一个非常典型的正确性陷阱。

假设你要限制转账总额不超过 5000 美元。如果策略对响应事件求和,那么三笔并发的 2000 美元转账可能在任何一笔完成响应前同时到达;策略看不到“正在处理中”的金额,于是三笔全部放行,总额达到 6000 美元。

而同样的策略,如果改成对请求事件求和,第三笔就会被拒绝。

两个策略之间只差一个词,但结果天差地别。
 这提醒我们:智能体可能并行发起工具调用,多智能体环境下操作还会交错执行。一个在顺序视角下看似正确的规则,在并发场景里可能完全失效——这是 Agent 时代的新分布式系统问题。

04 便利背后的代价

AWS 也很坦诚地说明了 Dogwood 的代价。

首先,时序求值需要有状态地追踪事件,求值时间可能随事件日志长度增长。其次,也是更关键的一点:时序条件会破坏 Cedar 的自动形式化推理能力。一旦策略里用了 `when temporal`,这套策略集就无法再享受 Cedar 的自动分析工具。

正因如此,AWS 选择新建一门语言,而不是直接扩展 Cedar:既能保留原有 Cedar 的数学严谨性,又让需要时序约束的人有专门工具。