智能路由:AI Agent 如何彼此对话
路由是多 Agent 系统里隐藏的基础设施。本文讲讲 MadoHub 如何让 Agent 与 Agent 之间的通信变得显式、可检查、可配置。
在任何多 Agent 系统里,Agent 本身往往最受关注。但真正决定系统能否运作,还是会不会变成混乱噪音的,是路由层 - 也就是决定什么内容该去哪里那一层。
路由到底是什么意思
路由是把一个 Agent 的输出,在正确的时间、以正确的格式,送到正确目标的过程。听起来很简单,但这三个维度每一个都会带来真实复杂度:
- 正确的目标:输出是发给一个 Agent,还是多个?是否取决于内容?
- 正确的格式:输出应该原样传递、摘要化,还是转换?
- 正确的时间:下游 Agent 应该立刻开始,还是等多个输入,或者轮询更新?
触发器:路由何时触发
MadoHub 中每条连接都带有一个触发器(trigger)——决定它的输出何时被下发的条件。一共有四种:
- on-complete:上游 Agent 完成当前任务后触发
- on-idle:上游 Agent 安静下来、但没有明确的完成信号时触发
- on-keyword:监听图块输出中你指定的关键词,出现时触发
- always:无论状态如何都持续下发,适合用来监听一个正在运行的进程
有一点值得知道:on-complete 和 on-idle 并不是两种不同的速度。在底层它们的处理方式完全一样——都会启动同一个 idle 计时器,在收到信号后等待大约 8 秒的静默期才下发。两者都不会立刻触发。
Transform 节点
有时候,一个 Agent 的原始输出并不适合直接喂给下一个。代码生成器可能会输出整份文件和解释性注释,而测试写作者只需要函数签名。
Transform 节点位于连接上,负责重塑传输途中的数据。每条连接会携带以下五种 transform 类型之一:
- raw:输出的最后 10 行,原样保留
- summary:AI 生成的输出摘要
- full-output:输出的最后 30 行,用于需要更多上下文的场景
- prompt-wrap:把输出包裹进一个模板,模板里可以使用
{output}、{round}、{maxRounds}、{source}等变量 - ai-routing:AI 生成的、针对下游 Agent 量身定制的上下文感知提示词(需要 API key)
防止失控循环
把两个 Agent 连接成互相指向对方,你就搭建了一个循环。审查-修改这类工作流正是靠循环运作的——但不受限制的循环也会在几分钟内耗尽上下文窗口或预算。
MadoHub 在每条路由上都加了循环保护:最大轮数(默认 5 轮,可配置为 1 到 20)、每次下发之间的冷却时间(默认 3 秒,可配置到 30 秒),以及一个可选的停止关键词——你提供一个不区分大小写的子串,一旦它出现在 Agent 输出中,循环就会结束。
作为另一种安全网,还有 Peer-Veto:它是一个下发闸门,而不是投票系统。它不需要 Agent 之间达成任何共识,只是在目标图块缺失或其进程已经退出时阻止下发,确保路由永远不会悄悄把内容发到一个无法接收的图块里。
检查路由层
大多数 Agent 编排系统最大的问题是黑盒。出了问题时,你根本不知道是 Agent、提示词,还是路由出了错。
MadoHub 会记录每一次路由决策。点击任何一条连接,你都能看到完整历史:发送了什么、何时发送、哪个触发器被触发、是否应用了 transform。这让调试多 Agent 工作流像读网络 trace 一样直接。
路由就是基础设施。它不炫酷。但它做对与否,决定的是这是一个 demo,还是一个你可以信赖的系统。