structured vs direct_qa 仍高度显著(p<0.001),text vs direct_qa 也高度显著;在当前 direct_qa 实现下,显式分解协作链路的优势对采样方式稳健。
structured vs text 在 stratified 下 F1 差异显著(text 更高,CI [-0.157, -0.033]),EM 边缘显著(p=0.057)。这与 head-100(structured vs text 不显著)存在差异,说明 head 采样可能轻微低估了 text 模式的表现。
综合 head 与 stratified 两个 100 样本结果,structured 与 text 的准确率结论依赖采样(stratified 下 text 的 F1 显著更高);structured 的稳定收益是 Agent 消息中应用层文本字段更短。历史主实验没有完整协议字节,不能据此宣称总通信量更低。
结构化通信 vs 文本通信在均开启记忆复用时,EM 0.56 vs 0.51、文本字符 1801 vs 10515,结构化在保持更高准确率的同时将 Agent 间消息字符压缩约 **83%**;总 token 数基本持平(262656 vs 266094),说明压缩的是序列化消息长度,而非 LLM 调用量。
消融实验在旧 memory.db 口径下完成,用于隔离记忆/通信模式影响;主实验已改用严格临时 memory.db 口径,故绝对 EM 与消融表存在小幅差异。
两个数据集均自带 10 篇候选文档作为 corpus,因此检索不依赖 Wikipedia API。
完整汇总见 reports/experiment_summary.md。
2WikiMultiHopQA 100 样本结果(v2 口径):structured 模式 EM 0.62、F1 0.669,略高于 text(EM 0.60 / F1 0.652)与 direct_qa(EM 0.03 / F1 0.130);结构化模式平均文本字符 1960,约为 text 模式(7310)的 **26.8%**;总 token 数 194488 vs 188902,基本持平(差异来自输出长度波动)。structured vs text 差异不显著(McNemar p=0.69),vs direct_qa 高度显著(p<0.001)。
MuSiQue 100 样本结果(v2 口径):structured 模式 EM 0.40、F1 0.508,略高于 text(EM 0.37 / F1 0.465)与 direct_qa(EM 0.07 / F1 0.145);结构化模式平均文本字符 3034,约为 text 模式(15226)的 **19.9%**;总 token 数 358270 vs 352035,基本持平。structured vs text 差异不显著(McNemar p=0.45),vs direct_qa 高度显著(p<0.001)。
跳数分层(MuSiQue 100 v1)显示:2-hop structured 47.9% vs text 33.3%;3-hop 30.0% vs 26.7%;4-hop 22.7% vs 22.7%。structured 在 2-hop 优势明显,但 4-hop 与 text 持平,提示高跳数仍需更强的中间答案推理或检索策略。详细错误分析见 reports/2wikimultihopqa_deepseek_100_all_v2/error_analysis.md 与 reports/musique_deepseek_100_all_v2/error_analysis.md。
dynamic-gated 相对 fixed 的总通信降低 **59.48%**,但 F1 差异未显著;相对 memory-off 的 F1 +0.0542(95% CI [0.0105, 0.0998]),总通信仅 +5.47%。因此,这一受控任务上的结果支持动态门控在质量与通信之间的改进,不外推为开放域问答的普遍结论。
面向 openEuler 的多智能体低开销通信、状态传递与共享记忆系统
本项目是第三届中国研究生操作系统开源创新大赛 赛题 10:多智能体协作通信与记忆机制 的完整实现,位于本仓库根目录下。
完整文档与实验入口见 文档导航。
1. 核心目标
针对当前多智能体系统存在的“高 Token 开销、状态重复传输、协作记忆难以复用、代码执行不安全”等问题,构建一个支持以下特性的多 Agent 协作框架:
StateRef;当前写入和读取各有一次内存拷贝。2. 系统架构
3. 目录结构
4. 快速开始
4.1 环境准备
4.2 配置 API Key
复制模板并填写:
4.3 配置 Embedding(可选)
当前开发环境(
.venv)已安装sentence-transformers,主实验默认使用本地 all-MiniLM-L6-v2 真实 embedding。若在未安装该依赖的环境中运行,系统会自动回退到伪 embedding(PseudoEmbedding),仅保证流程可运行、不保证语义检索质量。如需显式选择 embedding 后端,可使用以下方式之一:方式 A:远程 Embedding API 在
.env中配置:方式 B:本地 sentence-transformers 确保能访问 HuggingFace(或镜像站),然后执行:
默认下载
sentence-transformers/all-MiniLM-L6-v2(384 维,约 80 MB)。4.4 运行演示
运行后会在
reports/目录生成:comparison_report.json:完整对比报告comparison_chart.png:可视化对比图4.5 运行测试
4.6 部署为 openEuler 24.03 系统服务
脚本会自动创建 systemd service/timer,将项目安装到
/opt/yzmxdzntxzddkxtxztcdygxjyjz, 并创建独立运行用户agentwf。详细说明与卸载方法见deploy/README.md。5. 配置说明
.env关键项:LLM_BASE_URLhttps://api.deepseek.com/v1LLM_API_KEYsk-...LLM_MODELdeepseek-v4-proEMBEDDING_BASE_URLEMBEDDING_MODELtext-embedding-3-smallSANDBOX_TIMEOUT30SANDBOX_MAX_MEMORY_MB512当
LLM_API_KEY为空或mock时,系统自动使用MockLLMClient,用于离线验证流程。6. 任务定义格式
tasks/*.json示例:7. 关键实现与参考
7.1 参考论文(精华提炼)
tasks/*.json任务配置src/sandbox/executor.pysrc/memory/store.py混合记忆protocol/bus.py能力广播/发现state_exchange/manager.py的共享内存StateRef受其选择性状态共享思想启发;本项目未实现 KV Cache 共享memory_graph表完整研究背景、论文引用与设计取舍见
多智能体通信与记忆机制综述.md和技术方案与技术报告.md。7.2 参考开源代码
以下开源项目与协议在本地开发时作为设计参考(未包含在本仓库中,可另行 clone):
autogenMessageBus+SCPMessage消息总线camelPlannerAgent任务分解与角色指派crewAItasks/*.json配置与workflow.py编排code-actsandbox/executor.pyCodeAct 沙箱chromamemory/store.py向量检索接口(可选 FAISS/SQLite 实现)A2A/specificationprotocol/bus.py能力广播/发现接口,当前为静态能力表KVComm/AAFLOWstate_exchange/manager.py实现 POSIX 共享内存StateRef;已验证同机跨进程读取,未实现 KV-cacheE-mem/MRAgent/MemGraphRAGmemory_graph表与证据链保留Mandol/hylat/MOC/PACTStateRef引用传递与结构化消息设计8. 实验结果
8.0 评测口径与可复现性声明
主实验采用以下统一口径:
src/workflow.py新增enable_memory_feedback=False默认参数,评测入口(--mode structured/text/all)不会用标准答案调整记忆置信度;--enable-memory-feedback仅用于在线学习/消融实验。MultiAgentWorkflow默认使用安全临时目录创建独立 SQLite,避免跨任务、跨运行污染;需要持久记忆时通过--memory-db-path显式指定。MEMORY_MIN_RELEVANCE默认值从 0.0 提升至 0.3,hit_rate 仅统计真正相关的记忆召回。EVIDENCE_TEXT_MAX_CHARS=1200用于传入 LLM 的证据正文,RETRIEVAL_EMBED_MAX_CHARS=512用于 embedding 排序,避免不同模式输入上下文差异。prompt_tokens + completion_tokens,由 LLM API usage 精确返回)作为可验证的开销指标;估算金额(元)仅按默认单价换算,用于横向相对比较,不等同于真实账单。USE_FAISS=1(环境变量)控制向量索引后端,未安装时自动回退 numpy 暴力搜索。--mode no_retrieval_qa(直接 LLM 不检索)、--mode codeact_qa(代码执行增强单 Agent)。scripts/ablation_experiment.py一次运行可产出“无记忆 / 有记忆无反馈 / 有记忆有反馈 / text 模式”四条件对比。8.1 多跳 QA 公开数据集
评测使用以下公开数据集,均从
reference_repos/MemGraphRAG/dataset/抽取并统一格式化为tasks/*.json:tasks/hotpotqa_100.jsontasks/2wikimultihopqa_20.jsontasks/2wikimultihopqa_100.jsontasks/musique_20.jsontasks/musique_100.jsonHotpotQA 结果
HotpotQA 分层采样验证(stratified-100)
为检验 head-100 采样是否引入选择偏差,使用
--strategy stratified生成tasks/hotpotqa_100_stratified.json并跑三模式对比:分层采样关键结论:
HotpotQA 消融实验(4 条件)
使用
scripts/ablation_experiment.py在 HotpotQA 100 上隔离记忆复用、ground-truth 反馈与通信模式的影响:外部框架横向基线(HotpotQA 100,新口径已重跑)
下表为同一批
tasks/hotpotqa_100.json、同一证据检索器,仅替换 Agent 协作层的横向对比。三个外部框架均已按新口径(关闭 ground-truth 反馈、临时 memory.db、记忆召回阈值 0.3)重跑完成。crewaiAgent/Task/Crew,无共享记忆autogen-agentchatAssistantAgent2WikiMultiHopQA / MuSiQue 结果
8.2 中文百科 QA 演示(手工构造)
8.3 统计显著性检验
对三个 100 样本实验做 McNemar 精确检验(EM 正确性,双侧)与配对 bootstrap(F1 差值,10000 次重采样,seed=42,95% CI),逐题分数由
src/evaluation/quality.py重新计算,脚本为scripts/significance_test.py,完整结果见reports/significance/:结果说明:
reports/significance/hotpotqa_100_v3_with_baselines.md。8.4 错误分析与记忆图可视化
reports/hotpotqa_100_v3/error_analysis.mderror_overlap_matrix.pngmemory_graph.pngreports/2wikimultihopqa_deepseek_100_all_v2/error_analysis.mderror_overlap_matrix.pngmemory_graph.pngreports/musique_deepseek_100_all_v2/error_analysis.mderror_overlap_matrix.pngmemory_graph.png2WikiMultiHopQA 100 v2 的错误分析(旧 v1 分层结论,供趋势参考):
bridge_comparison上达 95.7%(22/23),comparison上 92.0%(23/25),compositional类型下降至 33.3%(15/45),inference上 57.1%(4/7);bridge_comparison100%(23/23),comparison84.0%(21/25),compositional仅 15.6%(7/45),inference仅 14.3%(1/7);MuSiQue 100 v1 的错误分析(按跳数与结构子类型分层)显示:
生成命令示例:
8.5 跨任务记忆复用 A/B 实验(受控)
为验证“记忆复用”的真实收益(而非随机召回),
scripts/memory_reuse_20_experiment.py对 20 组强顺序依赖任务做受控 A/B:唯一变量是是否在每个任务前清空记忆,模型、温度、检索 top-k 均一致。任务已补充本地语料,避免 Wikipedia 超时。真实 DeepSeek API、structured 模式下的结果(reports/memory_reuse_20/20260718_184636/):结果说明:
运行命令:
8.6 带标准答案的记忆复用消融(正式)
正式实验基于 MuSiQue decomposition 构造 100 对 T1→T2 连续任务,采用固定 seed 的 memory-on/off 随机交叉顺序并重复 3 轮。共 1200 次任务全部成功、0 错误。
memory-on 将平均延迟降低 **8.28%**、总 Token 减少 **5.75%**,但总通信字节增加 **128.05%**。EM McNemar
p=1.0000,F1 差值-0.0160、95% CI[-0.0601, 0.0280],答案质量差异不显著。157 次相关命中中有 24 次改善对应答案 F1,有效命中率为 15.29%。因此当前证据支持“降低重复推理开销”,不支持“提升答案质量”;P@K=0.182 也明确暴露了负候选排序和注入门控的改进空间。完整汇总、逐题结果和显著性检验见
reports/memory_qa_ablation/。8.6.1 记忆动态门控、重排与压缩
在同一 100 对 MuSiQue 强依赖任务、相同模型、
seed=42和交叉顺序下,新增 fixed-top-k、dynamic-gated 与 memory-off 三条件,各重复 3 轮。动态方案将语义、词法、时效性和置信度用于重排,并只注入带 ID/分数审计的定长事实摘要。dynamic-gated 相对 fixed 的总通信降低 **59.48%**,但 F1 差异未显著;相对 memory-off 的 F1 +0.0542(95% CI
[0.0105, 0.0998]),总通信仅 +5.47%。因此,这一受控任务上的结果支持动态门控在质量与通信之间的改进,不外推为开放域问答的普遍结论。8.7 十轮稳定性与资源泄漏验证
HotpotQA 10 题在同一 Python 进程内连续运行 10 轮,共 100/100 次任务成功、 0 异常。每轮墙钟均值 137.547s,P95 153.768s。清理后 FD 始终为 5、线程 始终为 32,共享内存与临时 SQLite 残留均为 0;第 2 至第 10 轮 RSS 净增 3.81%,末 3 轮趋势 +1.012 MB/轮,达到稳态验收边界。
实验修复并验证了临时记忆库、消息队列和 LLM usage 回调的完整生命周期。 逐轮资源、100 条原始结果与判据见
reports/stability_10_rounds/。8.8 四个独立 Agent 进程演示
Planner、Retriever、Executor、Summarizer 可作为四个独立 OS 进程连接独立 gRPC MessageBus。正式演示完成能力发现、健康握手、任务路由、跨进程 StateRef/HMAC 校验、Executor 故障重启、优雅停止和残留检查,所有验收项通过。
正式结果包含四角色独立 PID、11 个消息链路事件、Executor 新旧 PID、完整 StateRef 审计、进程日志和零共享内存残留证据。分步启动、健康检查与停止命令 见
docs/experiment_reproduction.md。8.9 通信与状态微基准
JSON、Protobuf Struct、POSIX StateRef 在 1/4/16/64 KiB 和并发 1/4 下 共完成 24 case × 50 次往返,0 校验失败。64 KiB、并发 1 时,StateRef 达到 1374 op/s、P95 791us、线上引用 267B;JSON 为 77 op/s、P95 18221us、编码 321872B。
小状态并发场景存在 POSIX 对象创建竞争,建议设置尺寸阈值。共享内存路径仍有
tobytes()写拷贝和读取后的copy(),因此项目只宣称避免在消息中编码 大向量;当前实现不是端到端零拷贝。完整结果见reports/communication_microbenchmark/。9. 评测指标
三模式对比报告(
comparison.reduction与comparison.*字段)包含:latency_reduction:结构化相对纯文本的延迟变化(负值表示 structured 更慢)message_reduction:消息数量减少率text_chars_reduction:Agent 间传输文本字符数减少率(注意:非 LLM API 计费 token)serialized_message_bytes_reduction:总线实际生成的 JSON UTF-8 / Protobuf 协议字节减少率total_communication_bytes_reduction:协议消息字节与非文本状态字节之和的减少率token_reduction:LLM API 总 token 数变化率,由 API usage 精确返回state_transfers_structured/text:非文本状态传输次数state_bytes_structured/text:非文本状态传输字节数memory_hit_rate_structured/text:共享记忆命中率prompt_tokens/completion_tokens/total_tokens:主开销指标(精确可验证)estimated_total_cost:估算金额,仅作横向相对比较,不等同于真实账单通信字节口径不包含内核 socket、HTTP/2/TCP 等随运行环境变化的链路头部。广播消息的协议字节按实际成功投递次数累计,并通过
message_delivery_count披露;序列化与反序列化耗时分别记录,便于后续通信微基准分析。非文本状态证据选择消融
结构化模式默认启用 evidence embedding Top-K 选择:
ENABLE_STATE_EVIDENCE_SELECTION=1|0:启用或关闭向量决策,默认启用。STATE_EVIDENCE_TOP_K=3:传给 Summarizer 的证据数量。脚本按 AB/BA 顺序交替 state-on/state-off,并汇总 EM/F1、Token、延迟、协议消息字节、状态字节、总通信字节和选择失败次数。使用远程 LLM 时,公开任务中的问题和 corpus 会发送至
.env配置的 API,运行前应确认数据外发授权;Mock 运行只能验证链路,不可作为比赛效果结果。正式 HotpotQA 100 × 3轮结果:state-on 相对 state-off 的 LLM Token 减少 **21.49%**、延迟减少 **5.76%**;EM/F1 差异均不显著(EM
p=0.7754,F1 差值 95% CI[-0.0557,+0.0294]);543 次向量选择、0 次失败。总通信字节基本持平(+0.61%),因此结论限定为降低模型上下文与推理开销。原始结果见reports/state_selection_ablation/。10. CodeAct 主流程验证
MultiAgentWorkflow已支持 Planner→Executor 沙箱执行→Planner 审查/修复 →Summarizer 的完整 CodeAct 协作链路。正式 20 题三条件实验中,多智能体 CodeAct、单智能体 CodeAct 和无执行静态修复均为 19/20(95%),差异不显著; 多智能体流程完成 21 次重试和 4 次安全拦截记录,但延迟和 Token 更高。该结果 证明的是主流程闭环、安全拒绝后的协作修复与可审计性,不证明简单任务上的性能 优势。复现命令与逐任务证据见docs/experiment_reproduction.md和reports/codeact_workflow/。11. 许可证与声明
本项目为比赛原创作品,参考了上述开源项目与论文的设计思想,源码独立实现。 运行配置由
.env.example提供模板,真实密钥不进入版本控制。