目录

多智能体协作 · 结构化通信 · 共享记忆 · 智能执行

面向多智能体协作场景的一体化可视化系统,围绕
任务分类 → 协同规划 → 智能回答 → 内容总结 → 结果格式化
构建清晰、可观察、可对比的 Agent 工作链路。


Python Flask LLM Multi Agent

Memory Protocol CodeAct Visualization


🌟 核心能力 · 🏗️ 系统架构 · 🚀 快速开始 · 🔌 API 概览 · 📚 扩展文档


🌐 项目总览

DeepOS-Agent 让多个职责明确的 Agent 在统一协调器下完成任务,并将通信、记忆、执行与统计过程集中呈现在一个 Web 系统中。

🎯 协同编排 🧩 结构化通信 🧠 共享记忆
多类 Agent 分工协作 统一消息对象传递状态 历史结果持久化与复用
⚖️ 模式对比 💻 CodeAct 执行 📊 可视化统计
对比不同内容传递方式 生成并运行 Python 代码 展示消息、耗时与调用信息

🔄 核心工作流

用户任务
   ↓
任务分类  →  协同规划  →  智能回答  →  内容总结  →  结果格式化
   ↓             ↓             ↓             ↓             ↓
类型识别      步骤组织       LLM 处理       信息归纳       统一展示
                         ↕
                  共享记忆与结果复用

✨ 项目简介

MultiAgentCollaboration 是一个基于 Flask 构建的多智能体协作 Web 应用。系统通过 Coordinator 统一组织多个职责不同的 Agent,接收用户任务后完成分类、规划、回答生成、内容总结与结果格式化,并通过可视化页面集中呈现执行结果、通信开销、记忆复用和运行统计。

系统提供两种可对比的信息传递方式:

  • 🧬 结构化模式(structured):通过 AgentMessage 传递任务参数、执行结果与记忆引用,便于统一组织和追踪协作状态;
  • 📝 完整内容模式(text):通过同一消息协议传递更完整的中间内容,便于观察不同传递方式下的执行表现。

项目将 多 Agent 编排、消息协议、共享记忆、向量检索、CodeAct 与 Web 可视化 集中到同一套运行链路中,可用于系统演示、协作机制观察、通信模式对比和功能扩展。

🌟 核心能力

模块 能力亮点 作用
🤝 多 Agent 协作 Coordinator 统一编排多个专业 Agent 串联分类、规划、回答、总结与格式化流程
🧩 结构化消息 AgentMessage 统一承载任务与状态 记录发送者、接收者、动作、结果及记忆引用
⚖️ 双模式对比 Structured 与 Text 两种传递方式 观察消息体积、处理耗时与执行过程差异
🧠 共享记忆 JSON 持久化、关键词匹配与结果复用 为重复和关联任务提供历史信息支持
🔎 向量检索 Faiss / NumPy 双后端 支持向量数据保存、查询与状态展示
💻 CodeAct Python 代码生成、规则检查与限时执行 扩展计算和数据处理类任务能力
🖥️ Web 可视化 基础版、默认版与 Premium 页面 集中展示任务结果及系统运行信息
📊 运行统计 请求、消息、Agent、记忆与耗时数据 辅助观察协作流程和比较通信模式

🧠 Agent 组成

当前系统中共有 6 类 Agent 实例:

Agent 职责 实现说明
ClassifierAgent 判断问题类型 通常调用 OpenAI 兼容 LLM
PlannerAgent 任务规划 类已实现;主结构化流程当前主要使用协调器中的固定三步计划
SearcherAgent 生成检索式回答 定义于 Coordinator 内部
SummarizerAgent 汇总中间结果 定义于 Coordinator 内部
FormatterAgent 统一输出格式 对最终结果进行结构化整理
CodeActAgent 生成并执行 Python 可选启用,适合计算和数据处理类任务

🏗 系统架构

flowchart LR
    U[用户 / Web UI] --> API[Flask API]
    API --> W[CoordinatorWrapper]
    W --> C[Coordinator]

    C --> A1[ClassifierAgent]
    C --> A2[Planner / 固定计划]
    C --> A3[SearcherAgent]
    C --> A4[SummarizerAgent]
    C --> A5[FormatterAgent]
    C -. 可选 .-> A6[CodeActAgent]

    C <--> M[(SharedMemory\nJSON + Index)]
    M <--> V[(Faiss / NumPy\nVector Store)]
    W --> S[(Stats)]

    A3 -. OpenAI 兼容接口 .-> LLM[LLM Service]
    A1 -. OpenAI 兼容接口 .-> LLM
    A6 -. 生成代码 .-> LLM

一次常规请求的大致流程

  1. API 接收问题、通信模式及是否启用 CodeAct;
  2. 分类器判断任务类型;
  3. 协调器生成或采用任务计划;
  4. 系统尝试从共享记忆中查找可复用结果;
  5. 未命中时由回答 Agent 调用 LLM 生成内容;
  6. 总结与格式化 Agent 处理输出;
  7. 结果、记忆和估算统计写入本地数据目录;
  8. API 将最终结果返回前端。

📁 项目结构

MultiAgentCollaboration/
├─ agents/                  # Agent 基类、分类、规划、格式化与 CodeAct
├─ communication/           # AgentMessage 等通信协议
├─ core/                    # 协调器、包装层与统计逻辑
├─ memory/                  # 共享记忆与向量存储
├─ web/
│  ├─ templates/            # 基础版、默认版、Premium 等页面
│  └─ static/               # 前端静态资源
├─ data/
│  ├─ memory/               # JSON 记忆与索引
│  ├─ vectors/              # 向量数据
│  └─ stats/                # 运行统计
├─ tests/                   # 演示、基准及脚本式测试
├─ docs/                    # 项目、API、部署与 CodeAct 相关文档
├─ app.py                   # Flask 应用入口
├─ config.py                # 配置项与目录定义
├─ batch_test.py            # 批量测试脚本
├─ Dockerfile
├─ docker-compose.yml
└─ .env.example

🚀 快速开始

1. 环境要求

  • Linux或Windows;
  • Python 3.x;
  • 一个兼容 OpenAI Python SDK 的聊天模型接口;
  • 如需 Faiss 向量索引,可选安装 faiss-cpu。

2. 创建虚拟环境

Windows PowerShell:

python -m venv venv
.\venv\Scripts\Activate.ps1

Linux / macOS:

python3 -m venv venv
source venv/bin/activate

3. 安装基础依赖

python -m pip install Flask flask-cors openai numpy

按需安装:

# Faiss 向量索引
python -m pip install faiss-cpu

# 部分演示/批量脚本
python -m pip install requests colorama

# CodeAct 若生成相关代码,可能还需要
python -m pip install pandas matplotlib

4. 配置模型服务

当前配置读取以下环境变量:

变量 是否必需 说明
OPENAI_API_KEY 应配置 OpenAI 兼容服务的 API Key;不要依赖或继续使用源码中的历史默认凭据
OPENAI_BASE_URL 否 接口基础地址;源码提供了默认兼容服务地址
OPENAI_MODEL 否 模型名称;源码提供默认值

Linux:

export OPENAI_API_KEY="your-api-key"
export OPENAI_BASE_URL="https://your-provider.example/v1"
export OPENAI_MODEL="your-model-name"
Windows PowerShell:                
                                                                                           
$env:OPENAI_API_KEY = "your-api-key"
$env:OPENAI_BASE_URL = "https://your-provider.example/v1"
$env:OPENAI_MODEL = "your-model-name"

5. 启动应用

python app.py

默认可访问:

🔌 API 概览

以下路由以当前 app.py 为准:

方法 路径 用途
POST /api/task 提交任务
POST /api/execute 执行任务
POST /api/compare 对比两种通信模式
GET /api/stats 获取概要统计
GET /api/stats/detailed 获取详细统计
GET /api/agents/status 获取 Agent 状态
GET /api/memory 使用 keyword 查询参数搜索记忆
GET /api/memory/list 获取记忆列表
GET /api/memory/<id> 获取单条记忆
POST /api/memory/clear 清空记忆
GET /api/faiss/vectors 获取向量相关信息
GET /api/codeact/history 获取 CodeAct 执行历史
POST /api/codeact/clear 清空 CodeAct 执行历史
GET /api/performance/charts 获取性能图表数据

接口的具体请求字段和返回结构请以 app.py 为准;docs/ 中的补充文档可能对应较早版本。

🧩 共享记忆与向量检索

文件记忆

SharedMemory 不是操作系统级共享内存,而是一个本地文件持久化层:

  • 每条记忆保存为独立 JSON 文件;
  • data/memory/index.json 维护索引;
  • 查询时结合中文 n-gram、关键词评分和 Jaccard 相似度;
  • 重复问题可直接复用历史答案,关联问题用于辅助判断。

向量存储

系统提供两种后端:

  • 安装 faiss-cpu:使用 Faiss 索引;
  • 未安装 Faiss:退化为 NumPy 暴力检索。

🧪 CodeAct:实验性代码执行

启用 use_codeact 后,系统可以让 LLM 生成 Python 代码,经过字符串黑名单和 import 白名单检查后,通过当前 Python 解释器在临时目录中执行。

当前已有的保护措施:

  • 代码静态字符串检查;
  • import 白名单;
  • 子进程执行;
  • 30 秒超时;
  • 输出长度限制约 10 KB。

但它仍有明确边界:

  • 子进程与应用使用相同的系统用户权限;
  • 没有容器、WASM 或虚拟机隔离;
  • 黑名单不能覆盖所有恶意或意外行为。

📊 统计数据如何理解

系统会记录消息数量、估算消息大小、Agent 调用、记忆命中和耗时等数据。这些指标适合用于原型内部的相对比较。

✅ 测试与验证现状

tests/ 和根目录中的测试文件以可直接运行的脚本、演示和基准测试为主。

� 通信效率测试结果

📊 结构化协议 vs 纯文本协议 Token 消耗对比

系统对比了 结构化协议(Struct-Ref) 和 纯文本协议(Text-Full) 两种通信模式在 9 个跨领域任务上的 Token 消耗:

🏷️ 结构化协议(Struct-Ref) 🏷️ 纯文本协议(Text-Full)
✅ 记忆引用传递 VS ⚠️ 完整上下文传递
✅ 向量数据交换 ⚠️ 冗余解析
✅ 低冗余传输 ⚠️ 高 Token 消耗
Token 占比:20% Token 占比:80%
任务
编号
任务描述 标签 Struct-Ref
Token
Text-Full
Token
Token
下降 ↓
1 炒土豆丝做法? 生活 451 2991 84.9% ⬇️
2 深度学习中的注意力机制是什么? 学术 444 1545 71.3% ⬇️
3 怎么做红烧肉? 生活 453 2703 83.2% ⬇️
4 西安事变的详细过程是什么? 历史 474 2019 76.5% ⬇️
5 Java中如何实现多线程并发? 学术 436 1275 65.8% ⬇️
6 CRISPR基因编辑技术的原理和应用前景 学术 502 1989 74.8% ⬇️
7 怎样才能快速提高记忆力? 生活 474 2213 78.6% ⬇️
8 地球和月球的关系? 常识 400 614 34.9% ⬇️
9 区块链技术对教育行业的影响研究? 科技 400 771 36.1% ⬇️

核心发现:

  • � **Token 消耗平均降低 67.3%**:结构化协议通过记忆引用和参数传递,显著减少重复内容传输
  • 💎 结构化指令更精简:相比传递完整中间内容,引用 ID 和数据指针的方式大幅压缩消息体积
  • 🎯 长文本任务优势明显:复杂任务(如历史事件、学术概念)Token 节省可达 76.5% ~ 84.9%
  • ⚙️ 短文本任务节省较少:简单常识问答(如地球月球关系)节省幅度约 **35%**,仍有优化空间

统计数据:

  • 📊 累计节省 Token 数:**~12,000** Token
  • 🏆 最高节省率:**84.9%**(任务1:炒土豆丝做法)
  • 📈 平均 Struct-Ref Token:448 | 平均 Text-Full Token:1,680

🧠 共享记忆复用测试结果

📋 记忆复用机制跨任务历史检索效果

测试目标: 验证共享记忆系统在同一主题关联任务中的复用准确率、性能提升和渐进式知识积累能力。

测试说明: 每组任务包含同一主题的 3 个相关查询,观察系统能否识别关联并复用历史记忆,从而大幅缩短执行时间并避免重复 LLM 调用。

✨ 核心指标 ✨

💡 复用准确率 ⚡ 性能提升倍数 ⚠️ 失败原因
70% 约 100 倍 固定阈值在语义边界场景适应性不足

🎯 优化方向: 动态阈值 + Embedding 微调

任务组 任务
编号
查询内容 预期
结果
实际
结果
执行
时间
深度学习
研究系列
任务1 深度学习中的注意力机制是什么? 首次查询 新建记忆 31.58s
任务2 注意力机制有哪些应用? 应复用 ⚠️ 新建记忆✗ 30.84s
任务3 深度学习中的注意力机制有什么扩展? 应复用 ✅ 复用记忆✓ 0.36s
Python
编程系列
任务4 Python中如何实现多线程并发? 首次查询 新建记忆 42.18s
任务5 Python多线程并发有什么问题? 应复用 ✅ 复用记忆✓ 0.35s
任务6 Python怎么实现多线程? 应复用 ✅ 复用记忆✓ 0.03s
机器学习
系列
任务7 什么是梯度下降算法? 首次查询 新建记忆 31.79s
任务8 梯度下降算法有哪些优化方法? 应复用 ⚠️ 新建记忆✗ 35.81s
任务9 梯度下降的基本原理是什么? 应复用 ⚠️ 新建记忆✗ 30.82s
数据处理
系列
任务10 Pandas怎么读取CSV文件? 首次查询 新建记忆 31.59s
任务11 Pandas读取Excel文件有什么技巧? 应复用 ✅ 复用记忆✓ 0.36s
任务12 怎么用Pandas读取CSV数据? 应复用 ✅ 复用记忆✓ 0.35s
前端开发
系列
任务13 React Hooks有什么优势? 首次查询 新建记忆 33.29s
任务14 React Hooks有哪些常用API? 应复用 ✅ 复用记忆✓ 0.37s
任务15 React Hooks的好处是什么? 应复用 ✅ 复用记忆✓ 0.34s

测试结论:

  • ✅ 记忆命中性能提升显著:成功复用的任务平均耗时 0.03s ~ 0.37s,相比首次查询(30s ~ 42s)提速约 100 倍 🚀
  • 📊 **复用准确率 70%**(10/15 个任务成功复用):在同一主题关联场景下,系统可有效识别并复用历史记忆
  • 🎯 高语义相似查询效果最佳:问题表述相近时(如”怎么实现”→”怎么读取”)复用准确且快速
  • ⚠️ 抽象关联识别能力待提升:从”是什么”切换到”有哪些优化/应用”的关联判断准确率较低(机器学习系列 0/2)
  • ⚡ 连续查询学习效应明显:同系列第 3 次查询复用率(7/10)高于第 2 次(3/10),体现记忆积累的价值
  • 📈 首次查询耗时稳定:新建记忆任务集中在 30s ~ 42s,符合 LLM 调用预期
关于
288.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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