flowchart TB
U[用户任务] --> P[Planner Agent]
P --> R[Retriever Agent]
P --> E[Executor Agent]
R --> M[Semantic Memory Bus]
E --> C[CodeAct Sandbox]
R --> S[共享内存状态交换]
E --> S
P --> Z[Summarizer Agent]
R --> Z
E --> Z
M --> P
Z --> O[最终结果]
B[Protobuf Message Bus] --- P
B --- R
B --- E
B --- Z
ZeroAgent
基于共享内存与语义管道的高性能多智能体协作系统。
项目介绍
ZeroAgent 面向多智能体系统中的底层协作效率问题,重点解决以下三类瓶颈:
ZeroAgent 通过结构化二进制协议、POSIX 共享内存零拷贝管道和语义记忆总线,构建低开销、可复用、可扩展的多 Agent 协作基础设施。系统同时集成 CodeAct 沙箱,使 Agent 能够在受限环境中执行由大模型生成的 Python 代码。
核心特性
结构化通信协议
使用 Protocol Buffers 定义 Agent 消息,统一描述动作类型、输入参数、执行结果、能力信息、握手请求和共享内存句柄。
共享内存零拷贝传递
使用 POSIX Shared Memory 和
mmap传递 Embedding、语义向量及隐藏状态,仅在通信消息中传递轻量句柄,减少文本编解码和数据复制。语义记忆总线
使用 FAISS 保存向量索引,使用 SQLite 保存记忆元数据,支持关键词、标签和语义相似度检索。
多 Agent 运行时
支持 Planner、Retriever、Executor、Summarizer 等角色的注册、发现、调度和生命周期管理。
CodeAct 沙箱
使用 Bubblewrap 和 cgroups 对 Python 代码执行过程进行文件系统、网络、CPU 和内存隔离。
性能评测
采集消息次数、通信开销、状态传递规模、任务耗时、记忆命中率等指标,对比纯文本协作模式与结构化协议模式。
系统架构
flowchart TB U[用户任务] --> P[Planner Agent] P --> R[Retriever Agent] P --> E[Executor Agent] R --> M[Semantic Memory Bus] E --> C[CodeAct Sandbox] R --> S[共享内存状态交换] E --> S P --> Z[Summarizer Agent] R --> Z E --> Z M --> P Z --> O[最终结果] B[Protobuf Message Bus] --- P B --- R B --- E B --- Z系统主要由以下模块组成:
Agent 角色
plan_task、decompose、coordinatevector_search、search_logs、retrieve_docsrun_python、exec_code、call_apisummarize、generate_report、format_output协作流程
ShmTensorHandle映射读取数据,不再传输完整文本化向量。技术栈
运行说明
1. 环境要求
建议在 Linux 环境运行。Windows 和 macOS 不直接提供与 Linux 完全一致的 POSIX Shared Memory、Bubblewrap 和 cgroups 行为,不建议作为正式评测环境。
最低建议环境:
protocbwrap/dev/shm检查环境:
2. 获取项目
3. 创建 Python 虚拟环境
4. 安装依赖
仓库包含
requirements.txt时:项目书涉及的主要 Python 依赖包括:
SQLite 通常随 Python 标准库提供,无需单独安装。
在 openEuler 上安装系统依赖时,可根据软件源中的实际包名执行:
在 Debian 或 Ubuntu 系统上可使用:
5. 编译 Protobuf 协议
将下面的协议文件路径替换为仓库中的实际路径:
示例:
编译后应生成类似以下 Python 文件:
如果项目使用 gRPC,还需要安装
grpcio-tools并生成对应代码。当前项目书仅明确使用 Protocol Buffers 和 UNIX Domain Socket,不要求 gRPC。6. 初始化存储
创建运行目录:
Semantic Memory Bus 至少需要以下持久化文件:
如果仓库提供初始化脚本,执行:
如果尚未提供初始化脚本,需要在程序启动时完成以下操作:
memory_id与 FAISS 向量序号之间的映射。7. 检查共享内存
确认
/dev/shm可用:清理异常退出后遗留的共享内存对象时,应先确认没有 ZeroAgent 进程正在运行,再删除对应对象。不要直接清空整个
/dev/shm。8. 启动系统
项目书未明确最终入口文件。建议按以下顺序启动,具体命令应替换为仓库中的实际模块路径。
方式一:统一入口启动
示例形式:
方式二:分别启动运行时和 Agent
终端 1,启动消息总线或调度器:
终端 2,启动 Planner:
终端 3,启动 Retriever:
终端 4,启动 Executor:
终端 5,启动 Summarizer:
方式三:运行演示任务
正常运行时应能够观察到:
ActionRequest。ActionResponse返回。CodeAct 沙箱配置
CodeAct 用于执行由 Agent 生成的 Python 代码。正式运行时不应直接使用宿主机 Python 无限制执行生成代码。
检查 Bubblewrap:
建议限制项:
stdout、stderr和退出码。示例命令框架:
不同 Linux 发行版的动态库目录可能不同,实际挂载路径必须根据运行环境调整。
测试与评测
单元测试
仓库使用
pytest时:建议至少覆盖:
对比实验
系统应支持两种模式:
在相同任务、相同模型和相同运行环境下执行多轮测试,记录:
运行评测脚本:
生成报告:
以上入口名称需根据实际仓库调整。
推荐目录结构
下列结构用于指导代码整理,不代表当前仓库已经采用该结构:
常见问题
1. 无法创建共享内存
检查:
常见原因:
/dev/shm空间不足。/dev/shm。2. FAISS 安装失败
优先尝试:
如果 openEuler 环境缺少可用预编译包,可使用 Conda、源码编译或将 HNSWlib 作为备选向量索引实现。
3. Protobuf 版本不一致
检查:
应避免
protoc编译器与 Pythonprotobuf运行库之间存在明显版本不兼容。4. Bubblewrap 无法启动
可能原因:
可以先使用最小沙箱命令验证环境,再逐步增加隔离参数。Docker 可作为兼容性备选方案,但其启动开销通常高于 Bubblewrap。
5. Agent 无法互相发现
检查:
agent_role和capabilities是否正确注册。6. FAISS 检索结果与 SQLite 元数据不一致
应保证:
memory_id映射持久化。安全说明
开源组件
ZeroAgent 计划使用以下开源组件:
正式发布前,应在源码和文档中补充各组件的版本、许可证和引用范围,并核对所有第三方代码是否满足参赛要求。
项目状态
当前项目书定义了系统架构、协议格式、共享内存传递机制、语义记忆模块、CodeAct 沙箱和评测方案。实际可运行性仍取决于最终源码、依赖版本、启动入口和 openEuler 环境验证结果。
License
待根据参赛要求和所使用开源组件的许可证确定。
致谢
感谢 openEuler 社区以及 Protocol Buffers、NumPy、PyTorch、FAISS、SQLite、Bubblewrap 等开源项目提供的基础能力。