agentic_huge_data_base / wiki
页面 jcode · 7.2 智能体间通信·DeepWiki 中文全文译文

7.2 · 智能体间通信(Inter-Agent Communication)

代理式研究运行时 · 聚焦本章的模块关系、源码依据与实现要点。

项目jcode 章节7.2 状态全文译文 模块接口与服务契约、界面与交互、智能体运行时、测试、发布与运维
源码线索
  • src/protocol_tests.rs
  • src/protocol_tests/comm_responses.rs
  • src/server/client_actions.rs
  • src/server/client_comm.rs
  • src/server/client_comm_channels.rs
  • src/server/client_comm_context.rs
  • src/server/client_comm_message.rs
  • src/server/client_lifecycle.rs
  • src/server/client_session.rs
  • src/server/client_state.rs
模块标签
  • 接口与服务契约
  • 界面与交互
  • 智能体运行时
  • 测试、发布与运维
  • 工作流与编排

章节正文

智能体间通信

智能体间通信

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • src/protocol_tests.rs
  • src/protocol_tests/comm_responses.rs
  • src/server/client_actions.rs
  • src/server/client_comm.rs
  • src/server/client_comm_channels.rs
  • src/server/client_comm_context.rs
  • src/server/client_comm_message.rs
  • src/server/client_lifecycle.rs
  • src/server/client_session.rs
  • src/server/client_state.rs
  • src/server/comm_await.rs
  • src/server/comm_control.rs
  • src/server/comm_session.rs
  • src/server/comm_sync.rs
  • src/server/debug_swarm_read.rs
  • src/server/swarm.rs
  • src/server/swarm_channels.rs
  • src/server/swarm_mutation_state.rs
  • src/server/swarm_persistence.rs
  • src/tool/communicate.rs
  • src/tool/communicate_tests.rs
  • src/tool/communicate_tests/assignment.rs
  • src/tool/communicate_tests/end_to_end.rs
  • src/tool/communicate_tests/input_format.rs
  • src/tui/backend.rs

智能体间通信(Comm)为群组(Swarm)内的智能体提供了消息路由、共享状态和同步的层。它负责在不同会话类型(有头会话 vs. 无头会话)之间传递消息,并通过一个键值对黑板系统管理共享上下文的传播。

消息路由与投递

服务器通过 handle_comm_message 路由通信请求,支持三种主要范围:广播、基于频道和直接消息(DM)src/server/client_lifecycle.rs:7-11

通信范围
范围实现方式目标受众
广播SwarmEventType::Message所有已加入同一 swarm_id 的成员 src/server/client_comm_message.rs:8-12
频道handle_comm_subscribe_channel通过 channel_subscriptions 显式加入指定频道的会话 src/server/client_lifecycle.rs:60-64
直接(DM)target_session 参数单个特定的 session_id src/server/client_comm_message.rs:8-12
唤醒功能与目标状态

当消息发送到目标会话时,系统会评估目标的状态以确定投递机制:

  1. 空闲目标:如果目标智能体处于活跃状态且其 Mutex<Agent> 未被锁定,则通过 process_message_streaming_mpsc 立即处理消息 src/server/client_actions.rs:123-126
  2. 忙碌目标:如果智能体当前正在“思考”或“运行”,则消息会作为 SoftInterrupt 通过 queue_soft_interrupt_for_session 排队 src/server/client_actions.rs:199-208。这确保了智能体在其下一轮开始时或在工具执行检查点期间收到信息 src/server/client_actions.rs:15-15
  3. 无头目标:发送给无头智能体(即未附加 TUI 的智能体)的消息,通过与其 SwarmMember 条目关联的 event_tx 频道进行投递 src/server/comm_session.rs:173-182

来源: src/server/client_lifecycle.rs:7-11, src/server/client_actions.rs:123-208, src/server/comm_session.rs:173-182

共享上下文(CommShare 与 CommRead)

群组维护一个共享上下文黑板,允许智能体在整个群组中持久化并检索事实或变量。

  • handle_comm_share:在 shared_context 映射中插入或更新一个键值对,该映射以 swarm_id 为键。它会通过 NotificationType::SharedContext 自动通知所有其他群组成员该更新 src/server/client_comm_context.rs:6-7
  • handle_comm_read:允许智能体查询黑板中的特定键,或检索其当前群组的所有条目 src/server/client_comm_context.rs:6-7
  • handle_comm_read_context:提供一种方法,供智能体将其本地上下文与全局群组状态同步 src/server/client_lifecycle.rs:28-31
数据流:共享上下文更新

下图展示了一个来自智能体的 CommShare 请求如何传播到黑板和其他智能体。

jcode · 数据流:共享上下文更新 · 图 1
jcode · 数据流:共享上下文更新 · 图 1

来源: src/server/client_comm_context.rs:6-7, src/server/client_lifecycle.rs:28-31

文件冲突与触摸追踪

为防止智能体相互覆盖彼此的工作,服务器会追踪群组中所有会话的文件访问情况。

追踪机制
  • FileAccess:一个包含 session_idPathBuf 和访问类型(读/写)的结构体 src/server/client_lifecycle.rs:39-41
  • file_touches:一个全局映射 HashMap<PathBuf, Vec<FileAccess>>,记录哪些会话访问过特定文件 src/server/client_session.rs:137-137
  • files_touched_by_session:一个反向查找映射,用于在会话关闭或清除时快速清理追踪记录 src/server/client_session.rs:138-138
冲突通知

当智能体执行一个“触摸”文件的工具操作时,服务器会检查访问历史。如果检测到冲突(例如,另一个智能体正在编辑同一个文件),则会向请求的智能体发送一个 FileConflict 通知,以防止覆盖 src/server/client_lifecycle.rs:39-44

来源: src/server/client_lifecycle.rs:39-44, src/server/client_session.rs:137-138

系统集成图

此图将通信逻辑流映射到服务器内的特定代码实体和数据结构。

jcode · 系统集成图 · 图 2
jcode · 系统集成图 · 图 2

来源: src/server/client_lifecycle.rs:60-64, src/server/client_comm.rs:6-8, src/server/comm_session.rs:24-25, src/server/client_session.rs:135-141

通信中的会话生命周期

当会话被重置或清除时,通信元数据必须同步,以防止出现“幽灵”订阅或过时的上下文。

  • handle_clear_session:当会话被清除时,它会调用 remove_session_file_touchesremove_session_channel_subscriptions 来清除追踪状态 src/server/client_session.rs:197-203。它还会处理在活跃的 swarm_plans 中重命名参与者,以确保在会话 ID 更改时的连续性 src/server/client_session.rs:8-11
  • handle_comm_spawn:编排新群组成员的创建。对于有头会话,它使用 prepare_visible_spawn_session 来启动一个新的终端进程 src/server/comm_session.rs:171-182。对于无头会话,它使用 create_headless_session 创建一个没有附加 TUI 的后台 Agent src/server/comm_session.rs:6-9
  • handle_comm_stop:优雅地将一个会话从群组中移除,清理其中断队列和频道订阅 src/server/comm_session.rs:10-12

来源: src/server/client_session.rs:123-203, src/server/comm_session.rs:6-182