目录

CogFlow 多智能体低开销协作系统

CogFlow 用于降低多智能体协作中的通信和重复推理开销。系统使用 Qwen3.5-9B 与 BGE-M3,支持纯文本、结构化、结构化加状态、结构化加状态与共享记忆四种模式,并以蛋糕组合和团队旅行两组连续十轮任务进行测试。

作品简介

1. 面向的问题

多个 Agent 连续协作时,上游通常把分析过程写成自然语言交给下游。任务越长,重复传递的上下文越多,下游也需要重新编码和理解这些信息。后续任务依赖先前决策时,还会重复分析已经处理过的问题。

CogFlow 主要从三个方面减少这些重复工作:

  1. 结构化通信:用 JSON 交接下游需要的字段,减少长文本中的冗余信息。
  2. 非文本状态传递:在使用同一模型的 Agent 之间传递 K/V 缓存及 R/C 状态,让下游接着上游的状态计算,减少重复编码和重新理解交接信息的成本。
  3. 共享记忆:保存每轮的任务决策,后续任务通过 BGE-M3 检索并复用。

2. Agent 与执行流程

系统包含四类主要 Agent:

Agent 职责
Planner 根据当前公开任务和能力表生成执行计划
Retriever 获取当前任务所需候选、约束或历史记忆
ToolExecutor 使用大模型完成筛选、计算、约束决策与工具执行
Summarizer 生成最终结果,并在记忆模式下写入紧凑记忆

Planner 生成计划后,PlanStateRuntime 按依赖关系调度各 Agent。同一进程中的各角色共用一个 Qwen 模型实例,运行记录包含候选获取、模型调用、工具执行和最终结果。

当前公开任务与 Agent 能力表
            │
            ▼
         Planner
            │ 执行计划
            ▼
     PlanStateRuntime
            │ 按计划依赖调度
            ▼
 Retriever → ToolExecutor → Summarizer → 最终结果
      ▲                           │
      └──── 后续轮次检索共享记忆 ────┘

3. 三项核心机制

结构化通信

  • AgentMessage 统一记录发送方、接收方、动作、工具参数和结果。
  • 支持握手、能力发现、协议确认及 JSON Schema 格式约束。
  • 业务交接按下游需求组织候选、约束和决策。
  • 字段契约实现中,Planner 根据任务确定交接字段,编译器检查字段来源,Worker 按约定提交结果。
  • Agent 使用公开任务与候选信息,业务答案由独立评测器判定。

非文本状态传递

  • Full Attention 层保存当前 Agent 输出 token 对应的 K/V。
  • Linear Attention 层保存生成结束时的 recurrent/conv state。
  • 状态张量保存在本机,消息通过 StateRef 引用。
  • 下游接入上游状态继续计算,并生成本节点的交接状态。
  • 传递的状态取自模型内部的注意力缓存与 recurrent/conv state。
  • 多个上游汇合时,对齐各交接片段的 KV 位置,并在接收方已有状态上更新 R/C。

共享记忆

  • Summarizer 将每轮的稳定决策整理为 MemoryUnit。
  • 根据公开任务描述,使用 BGE-M3 与 ChromaDB 检索历史记忆,再加入当前任务输入。
  • 任务结束后分别统计必要记忆的召回与实际使用情况。

4. 连续任务

公开任务位于 demo/competition/continuous_tasks.json,包含两组各十轮的连续任务:

任务 轮数 主要依赖
蛋糕组合 10 配方兼容、尺寸、累计预算、丝带与礼品卡
团队旅行 10 多成员继承、共享住宿、跨人价格与房型约束

两组任务包含相邻轮次依赖、跨轮依赖和双分支汇合。数据基于 MemoryArena 的两条公开样例,补充候选属性后扩展为十轮。原始样例与许可说明保存在 demo/competition/upstream_samples/。

5. 十轮实验结果

以下是 Qwen3.5-9B 与 BGE-M3 在 openEuler 24.03-LTS-SP4 环境中的测试结果。蛋糕组合与团队旅行分别完整运行十轮,四种模式按顺序运行。任务成功指最终业务答案正确;机制成功指协议、状态、记忆与工具调用通过对应检查。在线消息 token 统计序列化的 Agent 消息,Prompt / Completion 统计模型实际输入与输出。

蛋糕组合

模式 任务成功 机制成功 在线消息 token Prompt / Completion LLM 总 token 运行时间
纯文本 6/10 8/10 109,391 47,676 / 10,006 57,682 1,458.0 s
结构化 7/10 9/10 45,749 29,627 / 11,524 41,151 1,317.7 s
结构化 + 状态 7/10 9/10 46,229 28,831 / 11,319 40,150 1,177.6 s
结构化 + 状态 + 记忆 10/10 10/10 64,824 13,205 / 2,442 15,647 460.4 s

团队旅行

模式 任务成功 机制成功 在线消息 token Prompt / Completion LLM 总 token 运行时间
纯文本 9/10 10/10 127,255 63,757 / 15,189 78,946 1,222.3 s
结构化 10/10 10/10 52,097 36,321 / 12,830 49,151 1,146.3 s
结构化 + 状态 10/10 10/10 52,987 35,548 / 12,758 48,306 1,072.9 s
结构化 + 状态 + 记忆 10/10 10/10 79,815 21,208 / 2,710 23,918 597.0 s

状态、记忆与工具记录

样本 状态实际使用(状态 / 完整) 状态错误 物理状态载荷(状态 / 完整) 必要记忆召回 / 使用 CodeAct
蛋糕组合 9 / 10 0 439.0 / 290.6 MiB 12/12、12/12 —
团队旅行 10 / 10 0 519.6 / 291.7 MiB 10/10、10/10 4/4

相比纯文本,结构化模式的在线消息 token 在蛋糕和旅行任务中分别减少 58.18% 和 59.06%。在结构化模式上加入非文本状态后,运行时间分别缩短 10.63% 和 6.41%,总 LLM token 分别减少 2.43% 和 1.72%。

再加入共享记忆后,相比无记忆的状态模式,两组任务的总 LLM token 分别减少 61.03% 和 50.49%,运行时间分别缩短 60.90% 和 44.35%。蛋糕任务成功率从 70% 提高到 100%,旅行任务保持 100%。两组任务所需的历史记忆都被检索到并用于执行。

在线消息和模型调用按 token 统计,状态张量按 MiB 统计。完整模式的在线消息包含检索出的历史事实,因此高于无记忆的状态模式。

运行说明

1. 环境要求

  • Python 3.10 或更高版本。
  • 支持 CUDA 的 GPU 与 Linux 环境;隔离代码执行使用 Linux namespace。
  • 自行准备本地 Qwen3.5-9B 和 BGE-M3 权重。

在项目根目录创建环境并安装依赖:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r src/requirements.txt

2. 配置模型

所有配置集中在 src/config/:

文件 用途
default.json 运行组合、任务、轮数、输出目录及网页监听地址
implementations.json 实现选项与运行模块的对应关系
model.yaml 模型、向量模型路径以及设备、精度和生成参数
agents.yaml 通用 Agent 提示词配置
memory.yaml 通用共享记忆、检索与保存策略配置
sandbox.json 隔离沙箱的系统目录配置

在 src/config/model.yaml 中填写 Qwen3.5-9B 和 BGE-M3 的本地权重路径,再通过 src/config/default.json 选择运行组合。默认启用结构化通信、非文本状态与共享记忆。

3. 启动演示

python demo/run.py --dry-run
python demo/run.py

第一条命令预览配置,第二条启动网页演示。打开 http://127.0.0.1:8080/demo,选择任务并点击运行后,系统加载模型,页面显示各 Agent 的进度和四种模式的结果。

网页地址和端口通过 default.json 的 demo_host、demo_port 设置,结果保存到 output_dir。也可以通过 src/run.py 或测试入口直接运行任务。

4. 按任务和模式运行实验

实验入口使用两个参数:--task cake|travel 选择任务,--mode 选择模式。

模式 参数值
纯文本 text_collaboration
结构化 structured_protocol
结构化 + 状态 structured_protocol_state
结构化 + 状态 + 共享记忆 structured_protocol_state_memory
python tests/test_competition_cli.py --task cake --mode structured_protocol
python tests/test_competition_cli.py --task travel --mode structured_protocol_state_memory

以上命令使用本地模型运行所选任务和模式的完整十轮。一次运行两组任务的四种模式,可使用:

python src/run.py --all-modes

5. 结果保存

在运行配置中,用 output_dir 指定结果目录,用 raw_log 保存原始模型调用。src/benchmark/measurement/ 提供逐轮结果、模型调用和性能指标的汇总工具。

主要目录

路径 用途
src/agents/ 多智能体角色实现
src/protocol/ 消息协议、会话与传输
src/runtime/ 计划解析、依赖调度与实现选型
src/features/ 非文本状态、共享记忆与隔离沙箱
src/llm/ 本地共享模型后端与约束生成
src/tools/ 候选读取、任务上下文和业务工具
src/benchmark/ 连续任务评测、指标与性能测量
src/dashboard/ 网页的 HTTP 服务、实时进度与结果接口
src/config/ 唯一配置目录
src/independent_translation/ 按模型方向独立构建状态转换器的研发尝试,未纳入运行
src/moe_translation/ 使用共享稀疏专家进行状态转换的研发尝试,未纳入运行
tests/ 按任务、模式运行真实实验的入口
demo/ 网页演示入口、静态页面与公开任务数据
关于
122.7 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号