3. 通信机制:直接通信与间接通信、消息传递协议(ACL、FIPA)、共享黑板模式
多智能体系统里,智能体之间怎么「说话」,是个绕不开的核心问题。我刚开始做分布式系统时,总觉得通信不就是发个消息嘛,有什么难的?后来踩了坑才发现——通信机制选不对,整个系统跑起来就像一群人在嘈杂的菜市场里各喊各的,谁也听不清谁。
这一章,我们就来聊聊智能体通信的几种主流方式。说白了,就是解决两个问题:谁跟谁说话,以及怎么把话说清楚。
3.1 直接通信 vs 间接通信
先看最直观的区分。智能体A想告诉智能体B一件事,有两种基本思路:
- 直接通信:A知道B的地址,直接把消息塞过去。
- 间接通信:A把消息放到一个「公共区域」,B自己去取。
你可能会想,直接通信多简单啊,为什么还要搞间接的?嗯,这里有个坑——耦合度。
| 特性 | 直接通信 | 间接通信 |
|---|---|---|
| 耦合度 | 高(双方必须知道对方存在) | 低(发送方和接收方解耦) |
| 实时性 | 高(点对点直达) | 中等(取决于轮询或事件触发) |
| 扩展性 | 差(每增加一个智能体,连接数爆炸) | 好(新增智能体只需接入公共区域) |
| 典型场景 | 小规模、固定拓扑、低延迟要求 | 大规模、动态拓扑、松耦合系统 |
我在做一个物流机器人调度系统时,最初用了直接通信。每个机器人直接跟调度中心发消息,看起来挺顺畅。但后来机器人数量从10台增加到50台,调度中心的消息队列直接被打爆了。那次之后,我果断换成了间接通信——机器人只管往共享队列里丢任务状态,调度中心按需拉取。系统瞬间稳了。
3.2 消息传递协议:ACL 与 FIPA
通信方式定下来了,接下来就是「说什么语言」的问题。智能体之间不能各说各话,得有个统一的协议。这里有两个关键词:ACL(Agent Communication Language) 和 FIPA(Foundation for Intelligent Physical Agents)。
3.2.1 ACL 是什么?
ACL 定义了消息的格式和语义。它不关心消息内容具体是什么,只关心「这个消息的类型是什么」。比如:
- inform:告诉对方一个事实
- request:请求对方做一件事
- query:询问某个信息
- agree:同意对方的请求
- refuse:拒绝对方的请求
一个典型的 ACL 消息长这样:
(inform
:sender agent-A
:receiver agent-B
:content (temperature 25.3)
:language FIPA-SL
:ontology weather-ontology)
你看,消息里明确标出了谁发的、发给谁、内容是什么、用什么语言编码、遵循什么本体。这样不管接收方是什么语言写的,只要它懂 ACL,就能解析这条消息。
3.2.2 FIPA 标准
FIPA 是一个组织,它制定了一套智能体通信的完整标准。ACL 只是其中一部分。FIPA 标准还包括:
- 交互协议:比如请求-响应、合同网协议、拍卖协议
- 传输协议:消息怎么在网络里传(HTTP、IIOP、JMS 等)
- 本体服务:智能体如何共享概念定义
我个人习惯用 FIPA 的 合同网协议(Contract Net Protocol) 来做任务分配。流程大致是:
- 管理者广播一个任务(call for proposals)
- 多个智能体回复自己的报价(propose)
- 管理者选择最优的,发送接受消息(accept-proposal)
- 被选中的智能体执行任务,完成后通知(inform-done)
这个模式在分布式调度里非常实用。我曾经用它做过一个云资源调度系统,多个计算节点竞争任务,管理者根据负载和成本做决策。效果比简单的轮询好得多。
3.3 共享黑板模式
共享黑板模式是间接通信的一种经典实现。它的核心思想是:所有智能体共享一个公共数据空间(黑板),往上面写信息,也从上面读信息。
你想想看,这就像一群研究员围着一块大黑板讨论问题。每个人都可以在黑板上写自己的发现,其他人看到后可以补充或修正。没有人需要直接跟另一个人说话。
3.3.1 黑板的结构
一个典型的黑板系统包含三个部分:
- 黑板本身:存储共享数据的结构化空间
- 知识源(Knowledge Sources):也就是智能体,它们读写黑板
- 控制机制:决定什么时候哪个知识源可以访问黑板
黑板内部通常分层或分区。比如一个机器人协作系统,黑板可以分成:
| 分区 | 存储内容 | 写入者 | 读取者 |
|---|---|---|---|
| 感知层 | 传感器原始数据 | 感知智能体 | 融合智能体 |
| 融合层 | 融合后的环境状态 | 融合智能体 | 规划智能体 |
| 规划层 | 任务计划和路径 | 规划智能体 | 执行智能体 |
| 执行层 | 动作指令和状态反馈 | 执行智能体 | 监控智能体 |
这种分层设计的好处是——每个智能体只关心自己那一层,降低了认知复杂度。我曾经在一个多机器人协同建图项目里用过这种分层黑板,效果出奇的好。每个机器人只往感知层写自己的激光雷达数据,融合智能体从感知层读数据、做拼接,再写到融合层。规划智能体根本不用管原始数据长什么样。
3.3.2 黑板模式的优缺点
优点很明显:
- 解耦彻底:智能体之间完全不知道彼此的存在
- 易于扩展:新增一个智能体,只要它读写黑板就行
- 支持异步:智能体可以按自己的节奏工作
缺点也不容忽视:
- 性能瓶颈:黑板是中心化的,高并发时可能成为瓶颈
- 数据一致性:多个智能体同时写同一块区域,需要锁或事务机制
- 调试困难:消息流不直观,出了问题很难追踪是谁写了错误数据
3.4 三种通信机制的对比
到这里,我们把三种通信机制都过了一遍。做个总结对比:
| 维度 | 直接通信 | 间接通信(消息队列) | 共享黑板 |
|---|---|---|---|
| 耦合度 | 高 | 中 | 低 |
| 实时性 | 高 | 中 | 低到中 |
| 扩展性 | 差 | 好 | 好 |
| 数据持久化 | 无 | 可选(队列可持久化) | 有(黑板本身存储) |
| 典型应用 | 点对点指令、实时控制 | 事件驱动、任务分发 | 协作推理、数据融合 |
选哪种,取决于你的系统规模、实时性要求和耦合度容忍度。没有银弹。
3.5 本章知识结构图
下面这张图把三种通信机制的关系和核心要素串起来了,方便你整体把握。
这张图把三种通信机制和底层的 ACL/FIPA 协议串在了一起。你可以把它当作一个决策参考——根据你的系统规模、耦合度要求和实时性需求,选择最合适的通信方式。