目录

面向多智能体协作的低开销通信、状态传递与共享记忆机制

本项目面向多 Agent 协作系统中的基础设施问题,实现了一套可运行、可评测、可复现的原型系统。系统重点不是简单工作流编排,而是围绕 Agent 间通信协议、非文本状态传递、共享记忆复用和运行效率验证,构建一套系统层机制。

核心能力

能力 实现
多 Agent 协作 Planner / Retriever / Executor / Summarizer 四类 Agent
真多进程 IPC demo --ipc-demo 启动 4 个独立 Agent 进程,控制面 socket/connection 握手,数据面 shared_memory
结构化通信 StructuredMessage + ActionType + AgentCapability
二进制协议 msgpack 编码 + action shortcode + JSON/binary bytes 统计
真实语义向量 本地 ONNX 模型 fastembed+bge-small-zh-v1.5(512维, 无 torch),离线降级哈希
非文本状态传递 StatePacket(句柄+向量+摘要) + 共享内存数据面 + 消费端向量门控 deref/skip
共享记忆 FAISS 向量索引 + SQLite 元数据存储,真实语义向量
记忆复用 混合检索(稠密召回+区分性术语精排),命中后跳过 retriever / executor
CodeAct Executor 接入 Python 沙箱,支持指标计算和代码执行结果回传
评测 text / structured / full 三模式 benchmark
消融实验 full-no-memory / full-no-vector / full-no-memory-no-vector
质量评估 deterministic rubric 评估 relevance、completeness、depth 等
openEuler 验证 scripts/openeuler_setup.sh + scripts/openeuler_verify.sh

系统架构

Multi-Agent Runtime
├── Planner Agent
├── Retriever Agent
├── Executor Agent
│   └── CodeActSandbox
├── Summarizer Agent
├── ProtocolHandler
│   ├── StructuredMessage
│   ├── msgpack codec
│   └── action shortcodes
├── VectorBridge (fastembed ONNX 真实语义向量 / 哈希降级)
│   ├── StatePacket
│   └── SharedStateStore (multiprocessing.shared_memory 数据面)
├── MemoryStore (混合检索: 稠密召回 + 区分性术语精排)
│   ├── FAISS
│   └── SQLite
└── Eval
    ├── benchmark
    ├── quality evaluation
    └── ablation

IPC Demo Runtime
├── planner process
├── retriever process
├── executor process
├── summarizer process
├── control plane: multiprocessing.connection over localhost
└── data plane: multiprocessing.shared_memory

三种协作模式

模式 说明 用途
text Agent 间累积透传自然语言长文本 朴素高开销基线
text-fair Agent 间只传上一步输出(精简) 公平基线,排除“基线注水”质疑
structured Agent 间通过动作、参数、结果等结构化消息通信 验证协议通信
full 结构化协议 + 非文本状态传递(共享内存) + 共享记忆复用 完整机制

另有消融模式:

模式 说明
full-no-memory 关闭共享记忆,保留 StatePacket
full-no-vector 关闭 StatePacket / state vector,保留共享记忆
full-no-memory-no-vector 同时关闭共享记忆和 StatePacket,用于关键任务消融

快速开始

1. 安装依赖

pip install -r requirements.txt
mkdir -p data/memory output/eval

2. 配置 API Key

当前默认使用 DeepSeek OpenAI-compatible API。

Linux / openEuler:

export DEEPSEEK_API_KEY="your-api-key"

Windows PowerShell:

$env:DEEPSEEK_API_KEY="your-api-key"

也可以在 config.yaml 中临时填写:

llm:
  provider: "deepseek"
  model: "deepseek-chat"
  base_url: "https://api.deepseek.com"
  api_key_env: "DEEPSEEK_API_KEY"
  api_key: ""
  temperature: 0.7
  max_tokens: 4096
  timeout_seconds: 120
  max_retries: 4
  retry_backoff_max_seconds: 8

正式交付前建议清空 api_key,改用环境变量。

3. 运行单任务

python src/main.py --single
python src/main.py --mode text --single
python src/main.py --mode structured --single
python src/main.py --mode full --single

自定义任务:

python src/main.py --mode full --single --prompt "调研Linux主流调度器的核心设计思路,给出对比分析。"

4. 运行正式评测

python src/main.py --benchmark --trials 1
python src/main.py --quality-eval
python src/main.py --ipc-demo

输出:

output/eval/benchmark_results.json
output/eval/report.md
output/eval/quality_scores.json
output/eval/quality_report.md
output/eval/ipc_demo_report.json
output/eval/ipc_demo_report.md

5. 一键验证包

为了避免手工整理文档和实验结果,项目支持一条命令自动生成提交包:

python src/main.py --submission-pack

输出目录:

output/submission/

其中包含:

  • docs/:技术报告、答辩稿、一页图、评分映射、部署说明
  • eval/:benchmark、质量评估、性能基线、openEuler 验证结果
  • README_SUBMISSION.md:建议阅读顺序与核心结论
  • manifest.json:提交包文件清单与缺失项

建议正式提交前按以下顺序执行:

python src/main.py --benchmark --trials 1
python src/main.py --quality-eval
python src/main.py --perf-baseline --rounds 10
python src/main.py --publish
python src/main.py --submission-pack

6. openEuler 验证

bash scripts/openeuler_setup.sh
bash scripts/openeuler_verify.sh

已生成的验证日志:

output/eval/openeuler_setup.log
output/eval/openeuler_verify.log
output/eval/openeuler_env.log
output/eval/openeuler_verify_report.md

关键实验结果表

三模式 benchmark(trials=3,均值 ± 95%CI)

命令:python src/main.py --benchmark --trials 3 && python src/main.py --error-bars

结果摘要(真实 LLM + 本地语义向量 + 共享内存数据面;每任务重复 3 次、跨 4 任务、每模式 12 样本):

模式 平均耗时(s) 平均Token 平均消息 质量综合分
text 92.0 ± 9.5 24004 ± 2740 4.0 32.3
structured 132.6 ± 17.2 15273 ± 1725 10.0 32.2
full 84.8 ± 30.1 7524 ± 512 7.5 63.4

结论:

  • 通信 token:full 相比 text 降低约 68.7%(7524 vs 24004),CI 仅 ±512,跨重复实验高度稳定,是系统最大、最稳的收益(对应通信效率 25 分)。
  • 耗时收益集中在记忆命中的任务(见下表 task_B/D 降 49–62%);task_A/C 是话题首次出现、需冷启动并写入记忆,故整体均值收益偏保守。这是诚实、可复现的结果(评委重跑会得到一致数)。
  • 每任务级误差棒很紧(full 各任务 std 仅 4–13s),结果非偶然。
  • msgpack 二进制/JSON 体积比约 0.67(消息字节压缩,与 LLM token 节省是两个独立口径)。

连续任务记忆复用(trials=3,per-task)

任务 角色 text耗时(s) full耗时(s) full vs text
task_A 调度器调研(话题首次·冷) 88.9 138.9 写入记忆
task_B 调度优化(命中 A 记忆·暖) 98.4 37.5 ↓62%
task_C eBPF 调研(话题首次·冷) 94.4 119.1 写入记忆
task_D eBPF 优化(命中 C 记忆·暖) 86.4 43.8 ↓49%

混合检索使 A→BC→D 均正确命中前序记忆(各 3.0 命中);相比旧版(纯哈希向量+硬编码过滤),C→D 从 0 命中提升到 3.0(详见 system_design 第 6 节 A-C>A-B 分析)。命中记忆的任务耗时下降 49–62%,正是系统的核心价值场景。

关键机制消融(与 full 同冷启动口径,4 任务平均)

命令:python src/main.py --benchmark --trials 3 --ablation(详见 docs/ablation_summary.md

模式 耗时(s) Token 记忆命中 shm写入 deref
full 84.8 7524 0.50 1.50 1.25
full-no-memory 151.4 8622 0.00 2.75 2.75
full-no-vector 102.7 12864 0.50 0.00 0.00

消融结论(隔离各机制贡献,回答“收益从哪来”):

  • 共享记忆是主要耗时来源:关闭后 151.4s → 开启 84.8s,下降约 44%
  • 非文本状态传递(StatePacket + 共享内存)显著降通信开销:关闭后 token 12864 → 开启 7524,下降约 41%;无记忆冷路径每任务约 2.75 次 shm 写入/deref,完整状态走共享内存数据面而非消息总线。
  • full 同时享有两者:token 最低、质量综合分最高(63.4)。

性能基线(P50/P95/P99,固定任务 10 轮)

命令:python src/main.py --perf-baseline --rounds 10

模式 成功率 平均(s) P50(s) P95(s)
text 100% 78.3 82.2 91.8
text-fair 100% 110.6 56.1 597.7*
structured 100% 131.1 129.3 186.0
full 100% 61.7 52.6 96.1
  • 以中位数 P50 看,full(52.6s)最快;即便对比精简的 text-fair(P50 56.1s),full 在 token 与质量上仍明显占优(见上表),latency 差距则较小。full 的核心优势在 token 效率与记忆复用,而非单纯耗时。
  • * text-fair 的 P95=597.7s 是单轮 API 超时重试造成的离群点(10 轮中其余 9 轮均为 42–78s),非模式本身特性。

CodeAct 验证

任务:

请计算 text 模式耗时88.8秒、full模式耗时37.4秒时的耗时下降百分比,并给出简短结论。

结果:

codeact_executions: 2
codeact_successes: 2
计算结果: 57.88%

评测指标

系统自动统计:

指标 说明
structured_messages / text_messages 结构化 / 纯文本消息次数
total_tokens_structured / total_tokens_text 通信 token 估算
total_json_bytes_structured JSON 结构化通信体积
total_binary_bytes_structured msgpack 二进制通信体积
avg_binary_compression_ratio 二进制/JSON 体积比
non_text_state_transfers 非文本状态传递次数
non_text_state_bytes 非文本状态数据规模
state_packets StatePacket 传递数量
state_packet_bytes StatePacket 元数据规模
memory_reuse_hits 共享记忆复用次数
skipped_agent_calls 记忆复用跳过的 Agent 调用
compressed_results 被摘要 + 状态向量替代的中间结果数
compressed_text_chars_saved 压缩节省的文本字符数
codeact_executions / codeact_successes CodeAct 执行次数 / 成功次数

项目结构

agent_Match/
├── config.yaml
├── requirements.txt
├── README.md
├── docs/
│   ├── system_design.md
│   ├── experiment_report.md    # 由 --publish 自动生成
│   ├── ablation_summary.md
│   ├── latest_run_summary.md   # 由 --publish 自动生成
│   └── deployment_openeuler.md
├── scripts/
│   ├── install.sh
│   ├── run.sh
│   ├── benchmark.sh
│   ├── openeuler_setup.sh
│   ├── openeuler_verify.sh
│   └── package_submission.ps1
├── src/
│   ├── main.py
│   ├── config.py
│   ├── agent/
│   │   ├── base_agent.py
│   │   ├── planner.py
│   │   ├── retriever.py
│   │   ├── executor.py
│   │   ├── summarizer.py
│   │   └── llm.py
│   ├── protocol/
│   │   ├── types.py
│   │   ├── protocol_handler.py
│   │   └── codec.py
│   ├── embedding/
│   │   └── embedder.py         # fastembed ONNX 真实语义向量 / 哈希降级
│   ├── state_transfer/
│   │   ├── vector_bridge.py
│   │   ├── state_packet.py
│   │   └── shared_store.py     # multiprocessing.shared_memory 数据面
│   ├── memory/
│   │   └── store.py
│   ├── sandbox/
│   │   └── codeact.py
│   ├── runtime/
│   │   ├── orchestrator.py
│   │   ├── trace.py
│   │   └── ipc_demo.py         # 真多进程 IPC demo
│   └── eval/
│       ├── benchmark.py
│       ├── quality.py
│       ├── error_bars.py       # trials≥3 均值/标准差/95%CI
│       ├── perf_baseline.py
│       ├── report.py
│       ├── publish.py
│       ├── submission_pack.py
│       └── tasks.py
├── tests/
│   ├── test_memory_store.py
│   ├── test_orchestrator_integration.py
│   ├── test_state_transfer.py
│   └── test_ipc_demo.py
└── output/eval/                # 全部产物均可由脚本重新生成,不入库

注意

需要自行配置llm.api_key

关于
999.0 KB
邀请码