AI Agent 事件总线架构:多智能体实时通信与并发一致性方案
前几篇文章,我把流马(Gliding Horse)的大脑、记忆、技能、知识图谱挨个拆了一遍。今天聊一个你可能没太注意,但缺了它整个系统就瘫痪的东西——事件总线。
打个比方:你身体的各个器官都很牛逼——大脑聪明、心脏有劲、手脚灵活。但如果没有神经系统在中间传递信号,大脑想抬手,信号传不出去,你就是个植物人。
流马的事件总线,就是 AI Agent 的“神经系统”。
一、为什么 Agent 需要“打电话”?
一个复杂的 Agent 系统里,同时跑着 SA(调度器)、PA(计划者)、DA(执行者)、CA(检查者)、AA(决策者)。它们不是孤立的——SA 刚发布了一个任务,PA 必须立刻知道并开始规划;DA 把活干完了,CA 要马上介入检查;CA 发现 Bug,AA 得即刻拍板是修还是回滚。
如果这些 Agent 不能实时通信,整个流程就像没有群聊消息通知的办公室——你只能不停去问“完事儿没?”,效率崩盘。
流马的做法是:所有 Agent 共用一根“电话线”,任何事发生立刻广播,关心这件事的人自动接到通知。这就是事件总线。
二、事件总线怎么做到“只打给该打的人”?
你总不能让 PA 收到“某个文件被删了”这种跟自己无关的消息吧?流马的事件总线用了一个非常巧妙的设计——TypeMask 位图路由。
简单说:每种事件(比如“任务创建”、“计划完成”、“检查不通过”)在系统里都有一个独一无二的二进制编号。Agent 订阅事件时,告诉总线“我关心这几个编号”,总线就会把它的“关心列表”转换成一个位图。当事件发生时,总线只需用AND 运算比一下,O(1) 的时间就知道该发给谁。
举个例子:SA 发出一件“计划完成”事件(二进制编号 00001000)。PA 的订阅是 00001111(关心所有规划相关事件),AND 一下不为零 → 收到。CA 的订阅是 11110000(只关心检查相关事件),AND 一下为零 → 不收。
更贴心的是,事件还有优先级。系统崩了?Critical 优先级,所有 Agent 停下手里的活先处理。正常的任务状态更新?Normal 优先级,排队处理。这就避免了“下班前的日报把紧急的宕机通知冲没了”的荒唐事。
三、多 Agent 同时改记忆,怎么不打架?
你有没有想过,两个 Agent 同时修改同一个数据怎么办?Agent A 把任务状态改成了“完成”,Agent B 同时改成了“失败”——这叫“写冲突”,轻则数据对不上,重则系统崩盘。
流马解决这个问题的手段,说出来你可能不信——它抄了 CPU 的 MESI 缓存一致性协议。
在流马的四层记忆系统里,L2 黑板是多个 Agent 共享的“白板”。每个写在黑板上的数据节点,都带着一个 MESI 状态标记:
- M (Modified):这数据我刚改过,你们手里的版本都过期了
- E (Exclusive):只有我有,而且和 L0 底库一致
- S (Shared):咱们几个都有一份相同的
- I (Invalid):这数据废了,别用了
当 Agent A 修改一个节点时,节点状态变成 M。同时,内存总线立刻向所有其他 Agent 广播一条Invalidate(IRI)信号,告诉它们“你们手里的这份数据已失效”。其他 Agent 下次用到这个 IRI 时,会自动从 L2 或 L0 重新加载最新版本。
这套机制是 CPU 过去 40 年解决多核并发问题的杀手锏,我原样搬到了 AI Agent 的记忆系统里,居然一样好用。多个 Agent 可以放心地并行干活,再也不会出现“你以为完成了但别人还在改”的混乱局面。
四、JSON-LD 语义层:让信号自带“说明书”
光有事件通知还不够。传统的事件系统,传的大多是字符串,接收方还得去猜“这个消息是什么意思”。
流马的事件系统因为建立在 JSON-LD 语义层上,每一条事件消息都带着完整的@context、@id、@type。收到事件的 Agent 不用查字典,就能知道:
- 这是哪个任务下的(
task:sales-q2) - 这是什么类型的事件(
event:PlanCompleted) - 相关的数据在哪里(IRI 引用)
更重要的是,事件可以和图数据库联动。当 SA 收到“CA 发现 PRD 缺少参与者定义”这个事件时,它可以直接沿着事件里附带的 IRI,查出当时的 PRD 节点、缺失的具体字段、甚至历史上类似的质量事件记录。然后决策:是打回重做,还是降级处理。
这就是事件系统 + 知识图谱 + 记忆系统的三位一体。不是孤立地“通知一声”,而是给 Agent 一个完整的、可追溯的、可推理的“情境”。
五、架构收益总结
| 维度 | 传统 Agent 编排 | 流马事件系统 |
|---|---|---|
| 通信效率 | 轮询状态,浪费 Token | 事件广播 + TypeMask O(1) 匹配,实时响应 |
| 并发安全 | 多个 Agent 改同一个数据,可能冲突 | MESI 协议保证全局一致性 |
| 错误处理 | 出错难以溯源,很难自动恢复 | 事件附带完整上下文,可追溯、可自动触发补偿 |
| 跨模块联动 | 模块独立,信息孤岛 | JSON-LD 语义总线连接所有模块,事件驱动全局联动 |
| 持续改进 | 无历史记录,无法复盘 | 所有事件写入知识图谱,形成审计链,支持经验回放 |
六、最后说句人话
流马的事件系统,就是 AI Agent 的神经系统 + 免疫系统 + 记事本。
它让 Agent 之间能“打电话”、让记忆保持一致、让错误能被发现和追溯,最终让整个系统从一个“各自为战的草台班子”变成“配合默契的专业团队”。
我这套系统叫Gliding Horse(流马),所有代码都在 GitHub 上:https://github.com/doiito/gliding_horse
这个系列写到这里,大脑、记忆、技能、工具、知识图谱、事件总线都聊完了。下一篇可能是真正的“总集篇”——把这些拼在一起,看看流马到底能做什么。