Files
sanguo_quant_live/zhaoyun-data/research/task-20260401-a2a-multiagent-research/final/REPORT.md
T
2026-04-02 08:55:07 +08:00

8.9 KiB
Raw Blame History

A2A/多代理方案调研报告:"所有A2A消息进入目标agent的main会话"

任务背景

需求: 在三国量化团队架构中,我们需要一个A2A/多代理方案满足:

"所有 A2A 消息都进入目标 agent 的 main 会话,避免业务会话爆炸"

具体来说:

  • 每个agent有一个固定的main会话(如 agent:zhaoyun-data:main
  • 所有A2A消息都应该路由到这个固定的main会话
  • 避免每次消息都创建新的临时会话,导致会话爆炸
  • 保持对话连续性,main会话可以接收排队的任务

调研对象

# 方案 说明
1 Network-AI 多代理协调层,带共享黑板和并发控制
2 ClawTeam 团队协作A2A,专为OpenClaw设计
3 OpenAkita 轻量A2A执行框架,成熟开源
4 openclaw-a2a-gateway 我们已经修复的方案

逐个方案分析

1️⃣ Network-AI(多代理协调层)

项目地址: https://github.com/jovanSAPFIONEER/Network-AI

架构概述

Network-AI 是一个多代理协调层,核心特点:

  • 提供 LockedBlackboard 共享状态,原子提交防止竞态条件
  • SwarmOrchestrator 协调多个代理并行工作
  • 内置质量检查、权限控制、预算管理
  • 支持14+种AI框架适配器(含OpenClaw

会话模型分析

维度 分析
会话模型 每个agent一个固定身份,支持有状态会话
路由机制 AdapterRegistry按agentId路由,支持复用现有会话
会话爆炸风险 低 — 协调层不主动新建会话,由下层处理
适配我们需求 ⚠️ 可以适配,但较重
代码复杂度 中等,架构清晰

关键发现:

  • Network-AI 本身是协调层,不负责sessionId的生成和复用
  • 它提供 OpenClawAdapter,会调用下层 callSkill
  • session管理还是由OpenClaw处理
  • Network-AI 最大价值在并发控制和共享状态,对我们"固定main会话"需求帮助不大

适配结论

Network-AI 不冲突,但它解决的是并发协调问题,不是会话路由问题。我们的问题在A2A网关层,不是协调层。


2️⃣ ClawTeam(团队协作 A2A

项目地址: https://github.com/win4r/ClawTeam-OpenClaw

架构概述

ClawTeam 是专为 OpenClaw 设计的团队多代理协作框架

  • 支持团队自组织,任务拆分委派
  • 文件系统持久化存储会话状态
  • 支持多种后端(subprocess/tmux
  • 专为OpenClaw优化

会话模型分析

维度 分析
会话模型 每个agent持久化保存sessionId,支持复用
路由机制 SessionStore(team_name, agent_name) 保存sessionId
会话爆炸风险 极低 — 同一个agent复用同一个session
适配我们需求 完美适配!
代码复杂度 低,Python实现,简洁清晰

关键代码:clawteam/spawn/sessions.py

class SessionStore:
    """File-based session store.
    Each agent's session is stored at:
    ``{data_dir}/sessions/{team}/{agent}.json``
    """

    def save(agent_name, session_id, ...): ...
    def load(agent_name) -> SessionState | None: ...

设计非常符合我们需求:

  • 每个agent(如赵云)的sessionId持久化保存
  • 下次发送A2A消息时直接加载复用,不会新建
  • 完全满足"所有消息进同一个main会话"

适配结论

ClawTeam 原生设计就符合我们需求! 它本身就是为"团队固定agent + 持续协作"设计的,session持久化复用是内置功能。


3️⃣ OpenAkita(轻量 A2A 执行框架)

项目地址: https://github.com/openakita/openakita

架构概述

OpenAkita 是一个成熟开源的AI助手框架,内置完整的多代理支持:

  • SessionManager 统一管理所有会话
  • (channel, chat_id, user_id) 索引会话
  • 完整的持久化和生命周期管理
  • 支持过期清理

会话模型分析

维度 分析
会话模型 完全按key复用会话
路由机制 get_session() 先查缓存,存在就复用,不存在才新建
会话爆炸风险 极低 — 相同key永远复用同一个会话
适配我们需求 完美适配!
代码复杂度 中等,TypeScript架构清晰

核心代码 src/openakita/sessions/manager.py

def get_session(channel, chat_id, user_id):
    session_key = f"{channel}:{chat_id}:{user_id}"
    
    # ✅ 先检查缓存,存在就复用
    if session_key in self._sessions:
        session = self._sessions[session_key]
        session.touch()
        return session
    
    # ❌ 只有不存在才新建
    if create_if_missing:
        session = self._create_session(...)
        self._sessions[session_key] = session
        return session

这个设计完全就是我们需要的!

  • 相同 (channel, agentId, ...) → 同一个session
  • 不新建,只复用
  • 完全避免会话爆炸

适配结论

OpenAkita 原生完美满足我们需求! 它的会话管理设计从第一天就是"相同key复用会话",完全符合我们需求。


4️⃣ openclaw-a2a-gateway(我们已修复)

项目地址: https://github.com/win4r/openclaw-a2a-gateway

架构概述

专为OpenClaw设计的A2A网关,让OpenClaw agents可以互相发消息。

问题背景

原问题: 每次对话都会产生一个新session

根因:client.ts/doSendMessage() 中,发送消息时:

  • 每次正确生成新 messageId
  • 没有传递已有的 contextId
  • 所以A2A SDK每次都会生成一个新的 contextId = uuidv4()
  • 导致每次新建session

修复方案

我们已经找到并修复了问题:在 outboundMessage 添加一行:

const outboundMessage: any = {
  kind: "message",
  messageId: (message.messageId as string) || uuidv4(),
  contextId: (message.contextId as string) || uuidv4(),  // ✅ 添加这行
  role: ...,
  parts: ...,
};

修复效果:

  • 如果调用方提供 contextId → 复用它
  • 如果没有提供 → 新建
  • 完全符合需求

第三次测试验证: 已经通过!消息正确进入赵云main会话,不新建session。

适配结论

已经修复,完全满足我们需求! 修复后工作正常,就是我们现在正在使用的方案。


对比总结表

方案 会话模型 是否支持固定main会话 是否避免会话爆炸 适配我们需求 复杂度 推荐度
Network-AI 协调层,不管理session ⚠️ 可以适配,但不直接解决 低风险 ⚠️ 间接适配
ClawTeam 每个agent持久化保存sessionId 原生支持 完全避免 完美适配
OpenAkita 按key索引,存在就复用 原生支持 完全避免 完美适配
openclaw-a2a-gateway (fixed) contextId复用 修复后支持 完全避免 完美适配

结论与推荐

推荐方案优先级

优先级 方案 理由
1️⃣ openclaw-a2a-gateway (已修复) 我们已经在使用,修复验证完成,工作正常,最贴合OpenClaw原生架构
2️⃣ ClawTeam 专为OpenClaw团队协作设计,session持久化复用原生支持,非常轻量
3️⃣ OpenAkita 开源成熟,设计完美,如果需要更完整的框架可以选
4️⃣ Network-AI 如果需要并发协调和共享黑板才需要,否则不需要额外层

当前最佳选择

推荐继续使用 openclaw-a2a-gateway 修复后的版本

理由:

  1. 已经修复并验证 — 第三次测试通过,工作正常
  2. 最贴合OpenClaw — 专为OpenClaw A2A网关设计
  3. 轻量无侵入 — 只做A2A路由,不改变现有架构
  4. 完全满足需求 — 修复后正确复用contextId,不会新建session,避免会话爆炸
  5. 我们已经在生产使用 — 赵云主会话就是例子,工作正常

如果需要更完整的团队协作

如果未来需要更完整的多代理团队协作功能,推荐:

  • ClawTeam — 专为OpenClaw设计,原生支持session复用,轻量简洁
  • OpenAkita — 如果需要全功能AI助手框架,会话管理设计完美

已完成工作

  • Network-AI 文档代码精读 ✓
  • ClawTeam 文档代码精读 ✓
  • OpenAkita 文档代码精读 ✓
  • openclaw-a2a-gateway 回顾 ✓
  • 对比分析 ✓
  • 推荐结论 ✓

负责人

赵云 子龙 数据护军 🐎⚔️📊

调研完成时间: 2026-04-01