Skip to content

一家公司的 Agent 通信:mq9 的真实场景

设想一个场景

假设一家公司有很多 Agent。

有负责数据分析的 Agent,有负责报告生成的 Agent,有负责客户服务的 Agent,有负责审批的 Agent,有跑在边缘设备上的 Agent,还有负责编排调度的 Orchestrator Agent。它们各司其职,需要协作。

这些 Agent 之间的通信,无非就两种:

实时通信——我问你一个问题,你立刻回答我。双方都在线,一问一答。

异步通信——我给你发个任务,你什么时候做完什么时候回我。你不在线也没关系,消息等着你。

今天大部分公司怎么做?实时通信走 HTTP 调用,异步通信用 Redis + Kafka + 自研队列拼凑。两套体系,各自运维,中间还要写胶水代码对接。


如果有 mq9

部署一个 RobustMQ,mq9 就位。所有 Agent 通信走同一套协议。

Orchestrator 分发任务给 Worker Agent:

bash
nats pub '$mq9.AI.INBOX.worker-001.normal' '{"type":"task","content":"分析Q3数据"}'

Worker 在线就实时收到,不在线消息在邮箱等着。Orchestrator 不需要关心 Worker 在不在线,发出去就继续做别的事。

Worker 完成任务,结果回传:

bash
nats pub '$mq9.AI.INBOX.orchestrator.normal' '{"type":"task_result","result":"异常率2.3%"}'

Orchestrator 订阅着自己的邮箱,结果来了就处理。

紧急告警广播:

监控 Agent 发现异常,不知道谁来处理,广播出去:

bash
nats pub '$mq9.AI.BROADCAST.system.anomaly' '{"level":"critical","detail":"支付超时率15%"}'

订阅了 $mq9.AI.BROADCAST.*.anomaly 的 Agent 自动收到,各自响应。

需要人工审批:

Agent 遇到需要人判断的事情,发到审批员邮箱:

bash
nats pub '$mq9.AI.INBOX.approver-zhang.urgent' '{"type":"approval","content":"申请调用外部API"}'

审批员空了打开邮箱,审批完结果发回 Agent 邮箱。人和 Agent 用同一套协议。

边缘设备离线:

云端给边缘 Agent 发指令,边缘断网了:

bash
nats pub '$mq9.AI.INBOX.edge-001.urgent' '{"command":"emergency_stop"}'

消息在邮箱持久化等着。边缘设备联网后,urgent 先处理,normal 后处理。QUERY 兜底拉取确保不遗漏。

能力发现:

新来一个 Agent,不知道公司里谁有数据分析能力:

bash
nats pub '$mq9.AI.BROADCAST.capability.query' '{"need":"data.analysis"}'

有能力的 Agent 响应到查询方邮箱。去中心化,不需要注册中心。


一套通吃

你会发现,上面所有场景——实时的、异步的、点对点的、广播的、人机混合的——全部用同一套 mq9 协议,四个命令字:

MAILBOX.CREATE              — 申请邮箱
MAILBOX.QUERY.{mail_id}    — 查未读消息
INBOX.{mail_id}.{priority} — 点对点通信
BROADCAST.{domain}.{event} — 公共广播

不需要实时通信走 HTTP、异步通信走 Kafka、广播走 Redis。一套 mq9 全部覆盖。

为什么能做到?因为 mq9 基于 pub/sub 的 push 模型——对方在线,消息推过去,实时到达,延迟在毫秒级;对方不在线,消息先写存储,等对方上线再推。实时和异步不是两套机制,是同一套机制在不同状态下的表现。

业务侧不需要区分"这个场景该用同步还是异步"。发消息就行,mq9 自动处理:在线就实时推,离线就存着等。


跟 A2A 的关系

如果公司用了 A2A(Google 的 Agent2Agent 协议)来定义 Agent 之间的对话语义——Task 结构、能力声明、状态更新——那 mq9 就是 A2A 的传输层。

A2A 定义 Agent 之间怎么对话,mq9 保证对话送达。

A2A 自己决定什么时候同步、什么时候异步,mq9 不关心。A2A 的 Task JSON 就是 mq9 邮箱里的 payload,mq9 不解析它,只投递。

甚至可以更简单——如果 mq9 的实时推送延迟对业务够用,公司内部 Agent 的所有通信全走 mq9,A2A over HTTP 都不需要。一套传输层通吃同步和异步,架构最简。


本质

回到最根本的一点。

消息队列做了二十年的事情,本质上就是异步通信。mq9 不是在发明新东西,是把异步通信这件最基本的事情,在 Agent 场景下做到位。

发出去,对方收得到。离线不丢,有优先级,用完自动清理。在线的时候实时推,不在线的时候存着等。

mq9 只是把 Agent 的异步通信做好而已。

mq9 就是为了解决 Agent 的异步通信问题而生的。

🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀