目录

VECTOR-面向openEuler的新一代多智能体协作机制

一个高性能的多智能体协作系统,具有多进程IPC通信总线零拷贝共享内存状态传输以及Linux命名空间(Namespace)/控制组(cgroup)容器沙箱隔离

定位: 面向openEuler的新一代多智能体协作机制

一、核心架构内容

1. 多进程的IPC通信总线

整个代码实现了两种完全不同的IPC数据路径去定义两种模式,结构化模式通过ChromaDB共享记忆+SHM零拷贝+摘要传输实现了通信量降低,Token消耗节约;纯文本模式通过IPC传输完整的LLM输出作为对比基线。两种模式共享传输层(UDS+Protobuf)和记忆系统(ChromaDB),但数据路由方式和传递内容不同。系统实现了两种完全不同的 IPC 数据路径,用于通信效率对比实验:

┌─────────────────────────────────────────────────────────────────────┐
│                       结构化模式(优化路径)                          │
│                                                                     │
│  Agent → LLM → 全文存ChromaDB → IPC只传200B摘要 + memory_id     │
│  Orchestrator → 只传 task_id/task_topic → 下游从 ChromaDB 检索       │
│  Embedding → SHM 零拷贝 (20B buffer_name)                           │
│  序列化 → Protobuf 二进制帧                                          │
├─────────────────────────────────────────────────────────────────────┤
│                       纯文本模式(对比基线)                          │
│                                                                     │
│  Agent → LLM → IPC 传完整输出文本 (几千字)                           │
│  Orchestrator → 传完整 agent_results JSON → 下游直接使用             │
│  Embedding → 不用 SHM                                               │
│  序列化 → Protobuf 帧包裹 JSON 字符串                                │
│  记忆系统 → ChromaDB 存储 + 搜索(与结构化模式相同)                  │
└─────────────────────────────────────────────────────────────────────┘
维度 结构化模式 纯文本模式
IPC 消息体 ~200B 摘要 ~3000B 全文
SHM 零拷贝 ✓ (20B buffer_name)
ChromaDB 记忆 ✓ 存储 + 搜索 ✓ 存储 + 搜索
下游获取上游结果 从 ChromaDB 搜索 从 inline params
LLM 输出格式 JSON 自然语言

本版本更新对比与将4个智能体挤在单个Python进程中(v2.0)或使用HTTP/JSON(v1.0)的传统做法,使得每个智能体都作为一个独立的操作系统(OS)进程去进行运行,每个agent拥有自己独立的PID、内存空间和专用的Unix域套接字服务器:

┌─────────────────────────────────────────────────────────────────────┐
│                       编排器进程 (main)                              │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │               AgentIPCClient (UDS + Protobuf)                │  │
│  └─────┬────────────┬──────────────┬──────────────┬──────────────┘  │
│        │ UDS        │ UDS          │ UDS          │ UDS             │
│        ▼            ▼              ▼              ▼                 │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐                 │
│  │ Planner │  │Retriever│  │Executor │  │Summarizer│                │
│  │  进程   │  │  进程   │   │  进程   │  │  进程    │                │
│  │ (PID:A) │  │ (PID:B) │  │ (PID:C) │  │ (PID:D)  │                │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘                 │
│        │            │              │              │                 │
│        └────────────┴──────────────┴──────────────┘                 │
│                     共享内存 (shm_open/mmap)                         │
│                    嵌入特征向量零拷贝高效流动                        │
└─────────────────────────────────────────────────────────────────────┘

2. 零拷贝嵌入特征传输(Linux共享内存)

实现了非文本中间状态的零拷贝(Zero-Copy)传递。大模型高维特征向量无需经过序列化-网络传输-反序列化,而是直接通过 Linux 共享内存进行秒级的互通,完美规避了语义损耗与传输时延。

当Planner生成任务规划隐藏状态(384维向量)时,不再将整个数组序列化到消息中,而是:

发送方 (Planner):                     接收方 (Retriever):
┌──────────────────────┐                  ┌──────────────────────┐
│ embed(output) → vec  │                  │                      │
│                      │                  │                      │
│ shm = SharedMemory(  │   缓冲区名称     │ shm = SharedMemory(  │
│   name="emb_planner  │ ──"emb_planner_  │   name="emb_planner_ │
│   _a1b2c3d4",        │   a1b2c3d4" ──▶  │   a1b2c3d4"          │
│   create=True,       │   (通过 UDS,     │   create=False)      │
│   size=4+dim*4)      │    ~20 字节)     │                      │
│                      │                  │ vec = np.ndarray(    │
│ buf[0:4] = dim       │                  │    buf[4:4+dim*4])   │
│ buf[4:]  = vec_data  │                  │   ← 直接内存访问,无拷贝│
└──────────────────────┘                  └──────────────────────┘

3. 容器级沙箱

针对CodeAct模式,构建了基于Linux Namespace和Cgroups隔离的轻量级安全沙箱,严格限制了CPU/内存资源及网络访问,彻底杜绝了大模型恶意代码对openEuler系统的安全威胁。

Bubblewrap 沙箱 (主方案):
┌─────────────────────────────────────────────┐
│  bwrap                                      │
│  ├── --unshare-pid    (隔离的 PID 命名空间)  │
│  ├── --unshare-ipc    (隔离的 IPC 命名空间)  │
│  ├── --unshare-uts    (隔离的主机名)         │
│  ├── --unshare-net    (禁止网络访问)         │
│  ├── --tmpfs /        (临时根文件系统 rootfs)│
│  ├── --ro-bind /usr   (只读 Python 路径)    │
│  ├── --ro-bind /lib   (只读依赖库)          │
│  ├── --tmpfs /tmp     (可写,禁止执行二进制) │
│  ├── --proc /proc     (极简 proc 文件系统)   │
│  └── python3 /sandbox_code.py               │
│                                             │
│  资源限制 (cgroups v2):                     │
│  ├── memory.max = 512MB                     │
│  ├── cpu.weight = 128                       │
│  └── timeout = 900s (15min)                 │
└─────────────────────────────────────────────┘

Docker/Podman 沙箱 (备用方案):
┌─────────────────────────────────────────────┐
│  docker run --rm                            │
│  ├── --network=none      (禁止网络)         │
│  ├── --memory=256m       (内存限制)         │
│  ├── --cpu-shares=128    (CPU 限制)         │
│  ├── --read-only         (不可变根文件系统) │
│  ├── --pids-limit=50     (防范 Fork 炸弹)   │
│  ├── --tmpfs /tmp:noexec (安全临时目录)     │
│  └── python:3.11-slim                       │
└─────────────────────────────────────────────┘

沙箱调用链(自动降级机制):

  1. Bubblewrap(首选)
  2. Docker/Podman(备用)
  3. Builtins Restricted(真·后备隐藏能源)

二、程序发展对比:v1.0→v2.0→v3.0→v3.1

维度 v1.0 基线 v2.0 v3.0 v3.1
进程模型 单进程 单进程 4 个独立OS进程 4个独立OS进程
通信协议 JSON字符串 Protobuf二进制 Protobuf+UDS Protobuf+UDS+连接池
传输层 进程内调用 进程内调用 Unix Domain Socket Unix Domain Socket
状态传递 O(dim×4)内联 O(1)向量池引用 O(1)共享内存零拷贝 O(1)共享内存零拷贝
代码执行 subprocess subprocess Bubblewrap 命名空间隔离 Bubblewrap/Docker/增强受限
线程模型 无并发 无并发 每连接一线程 ThreadPoolExecutor(16)
连接管理 N/A N/A 每消息connect/close 持久连接池复用
性能可见性 墙钟总耗时 LLM vs IPC时间拆分

三、目录结构

d:\test\
├── main.py                          # 主函数,启动整个程序
├── orchestrator.py                  # IPC编排器:调度4Agent流程,汇总统计
├── config.py                        # 配置:APIKey、模型名、ChromaDB路径等
├── requirements.txt                 # 需要安装的依赖包:langchain, chromadb, sentence-transformers等
│
├── ipc/                             # === IPC通信部分 ===
│   ├── uds_server.py                # Agent服务端:监听socket,线程池处理请求
│   ├── uds_client.py                # 编排器客户端:持久连接池,线程安全
│   └── shm_manager.py               # 共享内存管理器:shm_open/mmap零拷贝embedding传输
│
├── agents/                          # === Agent设计部分 ===
│   ├── agent_process.py             # Agent进程:multiprocessing.Process生命周期
│   ├── agent_handlers.py            # 4个Agent的业务逻辑
│   ├── base_agent.py                # 历史基类
│   ├── planner_agent.py             # Planner Agent实现
│   ├── retriever_agent.py           # Retriever Agent实现
│   ├── executor_agent.py            # Executor Agent实现
│   └── summarizer_agent.py          # Summarizer Agent实现
│
├── proto/
│   └── agent_protocol.proto         # Protobuf消息定义
│
├── protocol/                        # === 协议/序列化 ===
│   ├── agent_protocol_pb2.py        # 由.proto编译生成的Python Protobuf代码
│   ├── messages.py                  # Pydantic消息模型
│   ├── scheduler.py                 # 消息路由与Agent注册
│   └── binary_serializer.py         # Pydantic <-> Protobuf桥接
│
├── state_transfer/                  # === 状态传输 ===
│   ├── embedding.py                 # Embedding引擎+状态传递
│   └── vector_pool.py               # 共享向量池
│
├── memory/                          # === 记忆部分 ===
│   ├── shared_memory.py             # ChromaDB管理:存储、语义搜索、关键词搜索、知识播种
│   └── reuse_controller.py          # 记忆复用控制器:高置信度时跳过Agent调用
│
├── sandbox/                         # === 沙箱执行 ===
│   ├── bwrap_sandbox.py             # Bubblewrap沙箱(首选)
│   └── docker_sandbox.py            # Docker沙箱(备用)
│
├── evaluation/                      # === 可视化部分 ===
│   ├── metrics.py                   # 指标采集
│   ├── dashboard.py                 # 运行时显示
│   ├── reporter.py                  # 报告生成:文本格式性能对比报告
│   └── visualizer.py                # 图表生成:matplotlib输出6张PNG图表
│
├── tasks/
│   └── task_sets.py                 # 任务定义
│
└── shared_state/                    # 向量池存储目录
│
├── output/
│   └── realtime.txt                 # 运行过程全转存于此

四、运行说明

1. 安装依赖

Bash

# Python 包
pip install -r requirements.txt

# Bubblewrap(用于沙箱隔离)
# openEuler环境:
sudo dnf install bubblewrap
# 或者降级使用Docker:
sudo dnf install docker

2. 配置环境

Bash

# 方式A:DeepSeek V4(默认,推荐)
export DEEPSEEK_API_KEY="你的deepseek密钥"
export OPENAI_BASE_URL="https://api.deepseek.com"
export LLM_MODEL="deepseek-v4-flash"                         # 可换其他模型

# 方式B:其他兼容端点
export OPENAI_API_KEY="your-api-key"
export OPENAI_BASE_URL="https://your-endpoint/v1"
export LLM_MODEL="your-model-name"

# 方式C:演示模式(无需API)
export SIMULATE_LLM=1

3. 运行实验

Bash

python3 main.py

五、项目说明性文件百度网盘链接

通过网盘分享的文件:系统开源创新大赛 链接: https://pan.baidu.com/s/1tG_DNT1r4wjfycLi3E4ghw?pwd=wsu4 提取码: wsu4

关于
375.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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