首页 › AI Agent › Agent100道面试题 › 多 Agentmulti-agent › 多 Agent 通信模式:消息传递、共享状态、黑板模式

多 Agent 通信模式:消息传递、共享状态、黑板模式

难度:基础 分类:Multi-Agent​

简短回答​

多 Agent 通信有三种基本模式:消息传递(Message Passing)——Agent 间通过点对点或广播方式直接交换结构化消息,适合动态、针对性的信息共享;共享状态(Shared State)——所有 Agent 读写同一个状态存储(如数据库、Key-Value Store),提供一致的全局视图,但可能成为瓶颈;黑板模式(Blackboard)——Agent 围绕一个共享的"黑板"协作,各自观察黑板上的信息,基于自身专长决定是否贡献输出。研究表明黑板模式在端到端任务成功率上比传统模式提升 13%-57%,同时具有更好的 token 效率。​

详细解析​

模式 1:消息传递(Message Passing)​

Agent 之间通过直接发送消息通信,类似人类之间发消息:​

​

代码块​

Python

# 点对点消息传递​

class MessageBus:​

def __init__(self):​

self.queues = {} # agent_id → message_queue​

​

async def send(self, from_agent: str, to_agent: str, message: dict):​

"""发送消息给特定 Agent"""​

msg = {​

"from": from_agent,​

"to": to_agent,​

"content": message,​

"timestamp": datetime.now()​

}​

await self.queues[to_agent].put(msg)​

​

async def broadcast(self, from_agent: str, message: dict):​

"""广播消息给所有 Agent"""​

for agent_id, queue in self.queues.items():​

if agent_id != from_agent:​

await queue.put({"from": from_agent, "content": message})​

​

# 使用示例​

bus = MessageBus()​

await bus.send("researcher", "writer",​

{"type": "research_complete", "data": findings})​

​

优势: 针对性强、延迟低、Agent 间解耦 劣势: 可能形成信息孤岛、路由逻辑复杂、难以保证全局一致性​

生产实现: 通常使用消息队列(RabbitMQ、Redis Streams)实现可靠的异步消息传递。​

​

注:本题讨论的是「通信模式」(Agent 之间如何交换信息),与第 033 题的「编排模式」(Hub-Spoke / Pipeline / Hierarchical 等控制流结构)是正交维度——一个 Pipeline 编排既可以用消息传递实现,也可以用共享状态实现。​

​

模式 2:共享状态(Shared State)​

所有 Agent 读写同一个全局状态,类似多人编辑同一个文档:​

​

代码块​

Python

# 共享状态模式(LangGraph 风格)​

from typing import TypedDict, Annotated​

​

class SharedState(TypedDict):​

messages: list[str]​

research_data: dict​

draft: str​

review_comments: list[str]​

status: str​

​

# 每个 Agent 读取状态、处理、更新状态​

def researcher_node(state: SharedState) -> SharedState:​

# 读取当前状态​

query = state["messages"][-1]​

# 执行研究​

data = search(query)​

# 更新共享状态​

return {"research_data": data, "status": "research_complete"}​

​

优势: 全局一致视图、状态可持久化、便于调试(检查状态快照) 劣势: 可能成为吞吐瓶颈、需要锁机制防止竞态条件、单点故障风险​

并发控制:​

​

代码块​

Python

# 防止竞态条件​

import asyncio​

​

class SafeSharedState:​

def __init__(self):​

self.state = {}​

​

模式 3:黑板模式(Blackboard)​

经典 AI 架构模式,Agent 围绕共享"黑板"自主协作:​

​

代码块​

Python

class Blackboard:​

def __init__(self):​

self.public_space = [] # 公共区域:所有 Agent 可见​

self.private_spaces = {} # 私有区域:各 Agent 独立空间​

​

def post(self, agent_id: str, content: dict, visibility="public"):​

entry = {​

"author": agent_id,​

​

​

​

黑板模式 = 控制器调度下的「读 → 处理 → 写回」循环:Agent 观察黑板自主贡献,迭代直至问题解决。​

黑板模式的关键特性:​

•

自愿参与:Agent 基于自身专长决定是否响应黑板上的请求​

•

迭代精化:多轮读取-处理-写回,逐步完善解决方案​

•

去中心化:不需要协调器预先知道所有 Agent 的能力​

•

Token 高效:共享公共记忆替代个体记忆,减少重复​

研究结果: 黑板架构在端到端任务成功率上比 RAG 和 Master-Slave 模式提升 13%-57%。​

三种模式对比​

​

#gZwtzZDSeGCu text{white-space:pre}.fb0{stroke:var(--N900-FG, 0.15)}.fx0{stroke-miterlimit:10}.fa1{fill:#bbbfc4}.fx1{font:normal 400 12px MonospacedNumber,LarkHackSafariFont,LarkEmojiFont,LarkChineseQuote,-apple-system,BlinkMacSystemFont,Helvetica Neue,Tahoma,PingFang SC,Microsoft Yahei,Arial,Hiragino Sans GB,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.fx2{text-anchor:middle}.fx3{dominant-baseline:central}.fx4{stroke:none}.fc0{fill:var(--text-caption)}.fa2{fill:var(--text-link-disabled)}.fx5{font:400 normal 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}.fx6{text-anchor:start}.fx7{dominant-baseline:alphabetic}.fc1{fill:rgb(31, 35, 40)}.fb1{fill:var(--N900-FG, 0.15)}.fb2{fill:rgb(209, 217, 224)}.fa3{fill:var(--bg-body)}ABCD12345678维度通信方式耦合度扩展性一致性Token 效率调试难度通信落地示例消息传递点对点/广播低高最终一致低(重复传递)高(追踪消息流)AutoGen GroupChat、消息队列共享状态读写全局存储中中(可能瓶颈)强一致中低(检查状态)LangGraph State(编排框架内置)黑板模式读写共享空间低高最终一致高(共享上下文)中LbMAS、Terrarium

​

实际选择指南​

​

代码块​

Python

def choose_pattern(scenario):​

if scenario == "少量 Agent + 简单流程":​

return "共享状态(LangGraph State)"​

elif scenario == "Agent 数量多 + 动态组合":​

return "黑板模式"​

elif scenario == "异步处理 + 微服务架构":​

return "消息传递(消息队列)"​

elif scenario == "需要最大灵活性":​

​

常见误区 / 面试追问​

误区:"消息传递就是聊天" — 多 Agent 通信中的消息传递是结构化的、带类型的数据交换,不是自然语言对话。消息应包含类型、发送者、接收者、数据负载和时间戳。​

误区:"共享状态很简单,用全局变量就行" — 生产环境中共享状态需要锁机制、版本控制和持久化。多 Agent 并发读写同一状态时,必须防止竞态条件。​

追问:"黑板模式和共享状态有什么本质区别?" — 共享状态是被动的数据存储,Agent 按预定流程读写;黑板模式是主动的协作平台,Agent 自主观察黑板内容并决定是否参与。黑板有控制器决定执行顺序,Agent 有自愿参与的机制。​

追问:"如何处理 Agent 间的信息冗余?" — 研究显示 token 冗余率可达 53-86%。解决方案包括:消息摘要(传递摘要而非原文)、黑板的公共记忆(替代个体记忆)、去重机制。​