SYNAPSE灵枢完整存档:源码、演示HTML、文档、测试用例
<<<<<<< HEAD
SYNAPSE 是面向“第三届中国研究生操作系统开源创新大赛——一种面向多智能体协作的低开销通信、状态传递与共享记忆机制”赛题设计的 Linux 原型系统。
项目围绕三个核心目标展开:
系统包含 Planner、Retriever、Executor、Verifier 和 Summarizer 五个独立 Agent 进程,可完成调研、量化分析、策略生成、交叉比较和综合报告等多步骤关联任务,并提供 text 与 struct 两种协作模式的可复现 A/B 实验。
task_decompose
planning
knowledge_retrieval
memory_search
tool_execution
code_act
quality_assessment
feedback_generation
summarization
memory_write
每个 Agent 使用 multiprocessing 的 spawn 模式启动,通过中心 Broker 完成注册、能力发现和消息路由。
multiprocessing
spawn
系统为同一份 canonical message 提供两种线上表示:
text
struct
两种模式在解码后恢复为相同的业务对象,Agent 业务逻辑不读取通信模式。
Retriever 根据任务查询生成语义向量,并将向量传递给 Executor 和 Summarizer。接收方使用该状态向量对候选证据片段执行余弦 Top-K,产生可审计的选择索引和相似度分数。
状态指标分别记录:
struct 模式将超过阈值的大字符串写入共享内存,并在线上消息中传递 descriptor:
{ "__shm__": "psm_xxx", "size": 1234, "sha256": "content_sha256", "encoding": "utf-8" }
相同正文通过 SHA-256 内容寻址复用。系统分别统计逻辑引用、唯一物理对象、唯一写入字节、descriptor 字节、读取字节和去重命中。
跨进程共享结构由 src/shm_kv.py 实现,采用共享内存追加日志:
src/shm_kv.py
[write_offset][version] + [record_length][JSON record]...
日志由进程锁保护,每个进程维护本地物化视图,并按版本增量回放新记录。
每条记忆采用统一结构:
id source_agent created_at task_id topic memory_group summary mem_type tags payload embedding reuse_count
共享记忆支持:
系统包含两条跨任务复用路径:
Executor 支持由 LLM 生成 Python 分析代码。代码通过 JSON stdin 读取任务、规划、证据、共享记忆和反馈,并在轻量沙箱中运行。
沙箱包含:
python -I
系统支持首次代码生成和一次带上下文的定向修复,并分别统计首次成功、修复成功和最终成功结果。
Verifier 从五个维度评估 Executor 的结构化结果:
程序根据任务类型使用公开权重计算总分,并结合 Schema 与语义检查决定是否通过。每个任务最多进行一次带反馈修订,系统保留得分最高的有效结果。
高风险综合任务支持 collab=debate:
collab=debate
Executor 分析 ↓ Planner 红队质询 ↓ Executor 修订 ↓ Verifier 评分
当前 G3T1 跨领域比较和 G4T1 综合报告启用该流程。
flowchart TD O["OrchestratorDAG 调度"] B["Socket Broker握手、能力发现、路由"] A["五类 Agent 进程"] S["状态交换向量 + 共享内存"] M["共享记忆存储、检索、复用"] E["评测模块开销、质量、耗时"] O <--> B B <--> A A <--> S A <--> M O --> E A --> E
系统主要由以下模块组成:
业务层统一使用以下 canonical envelope:
from to action topic args result state_vector
协议处理流程:
to
协议版本为 v3,Broker 注册阶段会校验客户端协议版本并记录能力描述。
每个普通任务执行以下流程:
PLAN + RETRIEVE ↓ EXECUTE ↓ VERIFY ↓ SUMMARIZE
任务以 DAG 形式组织,后序任务会继承依赖任务的结构化结果。
每一轮包含 10 个基础任务:
默认 --rounds 2 会扩展为 20 个连续任务。后一轮根任务依赖上一轮汇点,保证任务按轮次连续执行。
--rounds 2
系统对 text 与 struct 模式执行严格配对实验。
每一对实验包括:
text 与 struct 共同读取同一个 SQLite 响应库,运行顺序逐对交替。公平性审计检查:
只有 fairness.comparison_valid == true 时,报告才生成通信和耗时节省率。
fairness.comparison_valid == true
msg_count
payload_bytes
wire_sender_bytes
wire_forward_bytes
wire_bytes
payload_token_estimate
llm_input_tokens
llm_output_tokens
vector_transfers
vector_consumed
vector_decisions
shm_logical_references
shm_unique_objects
shm_unique_bytes_written
shm_dedup_hits
memory_hit_rate
memory_precision_at_1
memory_recall_at_1
memory_avoided_retrievals
cross_agent_memory_reads
codeact_first_ok
codeact_final_ok
verifier_passed_count
task_success_count
task_avg_s
task_p95_s
仓库中的 outputs/experiment_latest.json 为 Linux(内核 5.15,x86_64)+ 真实 LLM(SiliconFlow)环境下的实测数据:20 个任务、3 对 A/B 实验,公平性审计通过。下表为逐指标取 3 对实验中位数的结果。
outputs/experiment_latest.json
完整数据和生成报告位于:
docs/03-实验报告.html
multiprocessing.shared_memory
运行时仅依赖 Python 标准库。
大模型与 Embedding 服务的统一配置入口位于:
src/config.py
模型配置的调用关系为:
src/config.py ↓ src/runtime.py ↓ src/agent.py ↓ src/llm.py
src/runtime.py
src/agent.py
src/llm.py
API Key 不应直接提交到公开仓库。推荐由环境变量提供,并在 src/config.py 中统一读取。
打开 src/config.py,定位 LLM 配置区域,填写或检查以下配置项:
api_key
sk-...
base_url
https://api.example.com/v1
model
model-name
timeout
120
temperature
0.2
max_tokens
4096
推荐先在终端设置环境变量,再启动程序:
export LLM_API_KEY="替换为实际 API Key" export LLM_BASE_URL="https://api.example.com/v1" export LLM_MODEL="替换为默认模型名称"
随后确认 src/config.py 中的 LLM 配置从对应环境变量读取。配置结构可参考:
import os LLM_API_KEY = os.getenv("LLM_API_KEY", "") LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://api.example.com/v1") LLM_MODEL = os.getenv("LLM_MODEL", "default-model")
如果服务商提供的是 OpenAI 兼容接口,只需要替换 LLM_BASE_URL、LLM_API_KEY 和模型名称,无需修改 src/llm.py 的请求流程。
LLM_BASE_URL
LLM_API_KEY
不同 Agent 的模型选择位置同样位于:
在角色模型映射中分别设置 Planner、Retriever、Executor、Verifier 和 Summarizer。示例:
AGENT_MODELS = { "planner": os.getenv("PLANNER_MODEL", LLM_MODEL), "retriever": os.getenv("RETRIEVER_MODEL", LLM_MODEL), "executor": os.getenv("EXECUTOR_MODEL", LLM_MODEL), "verifier": os.getenv("VERIFIER_MODEL", LLM_MODEL), "summarizer": os.getenv("SUMMARIZER_MODEL", LLM_MODEL), }
对应的终端配置示例:
export PLANNER_MODEL="规划模型名称" export RETRIEVER_MODEL="检索模型名称" export EXECUTOR_MODEL="代码与分析模型名称" export VERIFIER_MODEL="评审模型名称" export SUMMARIZER_MODEL="总结模型名称"
未单独设置的角色应回退到 LLM_MODEL。模型配置的实际传递位置为:
LLM_MODEL
src/config.py 中的角色模型映射 ↓ src/runtime.py 创建 Agent 进程时选择角色模型 ↓ src/agent.py 调用 LLM 客户端
建议的角色分工如下:
Embedding 服务也在 src/config.py 中配置。需要设置:
export EMBEDDING_API_KEY="替换为实际 API Key" export EMBEDDING_BASE_URL="https://api.example.com/v1" export EMBEDDING_MODEL="替换为 Embedding 模型名称"
对应配置结构可参考:
EMBEDDING_API_KEY = os.getenv("EMBEDDING_API_KEY", LLM_API_KEY) EMBEDDING_BASE_URL = os.getenv("EMBEDDING_BASE_URL", LLM_BASE_URL) EMBEDDING_MODEL = os.getenv("EMBEDDING_MODEL", "embedding-model")
当大模型和 Embedding 使用同一服务商时,可以复用 API Key 和 Base URL,仅分别指定模型名称。
完成设置后运行:
python3 env_check.py
正式运行前应确认:
SYNAPSE_OFFLINE
1
/v1
快速验证:
python3 run_demo.py \ --rounds 1 \ --repeat 1 \ --export outputs/model_config_check.json
如果只需要一个模型服务全部 Agent,可仅设置 LLM_MODEL;如果需要多模型协作,再设置五个角色模型变量。
python3 -m compileall -q src tasks tests tools run_demo.py env_check.py
python3 -m unittest discover -s tests -v
当前测试覆盖协议、状态、记忆、共享内存、CodeAct、Verifier、回放、公平性、辩论和报告生成。
python3 tools/codec_benchmark.py --rounds 10
该命令使用 50 条 canonical message 验证 text/struct 语义等价,并生成:
outputs/codec_benchmark.json
export SYNAPSE_OFFLINE=1 python3 tools/inprocess_pipeline_check.py --rounds 2
该命令执行 20 个连续任务,并验证五类 Agent、状态消费、共享记忆、CodeAct 和 Verifier 业务链。
export SYNAPSE_OFFLINE=1 export DASHBOARD=0 python3 run_demo.py \ --rounds 1 \ --repeat 1 \ --export outputs/experiment_offline.json \ --report
模型和 Embedding 服务配置位于 src/config.py。完成配置后运行:
python3 run_demo.py \ --rounds 2 \ --repeat 3 \ --min-success-rate 0.90 \ --export outputs/experiment_latest.json \ --report
bash scripts/openeuler_verify.sh
验收脚本依次执行:
设置以下环境变量可强制使用确定性 MockLLM:
export SYNAPSE_OFFLINE=1
关闭终端看板:
export DASHBOARD=0
调整共享内存外部化阈值:
export SHM_THRESHOLD_BYTES=512
调整记忆语义检索阈值:
export MEMORY_MIN_SEMANTIC_SCORE=0.45
调整 Executor CodeAct 输出预算:
export CODEACT_MAX_TOKENS=4500
SYNAPSE/ ├── README.md ├── LICENSE ├── requirements.txt ├── run_demo.py ├── env_check.py ├── src/ │ ├── agent.py │ ├── broker.py │ ├── config.py │ ├── dashboard.py │ ├── domain_analysis.py │ ├── evaluation.py │ ├── ipc.py │ ├── llm.py │ ├── memory.py │ ├── metrics.py │ ├── protocol.py │ ├── replay.py │ ├── report.py │ ├── runtime.py │ ├── sandbox.py │ ├── shm_kv.py │ ├── state_exchange.py │ └── transport.py ├── tasks/ │ └── sample_tasks.py ├── tests/ │ ├── test_core.py │ ├── test_dashboard.py │ ├── test_debate.py │ ├── test_report.py │ ├── test_shm_kv.py │ └── test_v4_regressions.py ├── tools/ │ ├── codec_benchmark.py │ └── inprocess_pipeline_check.py ├── scripts/ │ └── openeuler_verify.sh ├── docs/ │ ├── 01-设计方案.html │ ├── 02-实现方案.html │ ├── 03-实验报告.html │ └── log-candy of the history └── outputs/ ├── codec_benchmark.json ├── inprocess_pipeline_check.json ├── experiment_latest.json └── replay/
LICENSE
bae4a572b8f24f992307717f155c46fe25e6da49
面向多智能体协作的低开销通信、状态传递与共享记忆机制
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
<<<<<<< HEAD
SYNAPSE /Shared-memorY Native Agent Protocol for Stateful Exchange
SYNAPSE 是面向“第三届中国研究生操作系统开源创新大赛——一种面向多智能体协作的低开销通信、状态传递与共享记忆机制”赛题设计的 Linux 原型系统。
项目围绕三个核心目标展开:
系统包含 Planner、Retriever、Executor、Verifier 和 Summarizer 五个独立 Agent 进程,可完成调研、量化分析、策略生成、交叉比较和综合报告等多步骤关联任务,并提供 text 与 struct 两种协作模式的可复现 A/B 实验。
核心特性
五类 Agent 协作
task_decompose、planningknowledge_retrieval、memory_searchtool_execution、code_actquality_assessment、feedback_generationsummarization、memory_write每个 Agent 使用
multiprocessing的spawn模式启动,通过中心 Broker 完成注册、能力发现和消息路由。双模式通信
系统为同一份 canonical message 提供两种线上表示:
text:完整文本信封,参数、结果和状态向量全部内联;struct:紧凑短键映射,大正文使用共享内存引用,状态向量使用 float32 编码。两种模式在解码后恢复为相同的业务对象,Agent 业务逻辑不读取通信模式。
非文本状态交换
Retriever 根据任务查询生成语义向量,并将向量传递给 Executor 和 Summarizer。接收方使用该状态向量对候选证据片段执行余弦 Top-K,产生可审计的选择索引和相似度分数。
状态指标分别记录:
POSIX 共享内存
struct 模式将超过阈值的大字符串写入共享内存,并在线上消息中传递 descriptor:
相同正文通过 SHA-256 内容寻址复用。系统分别统计逻辑引用、唯一物理对象、唯一写入字节、descriptor 字节、读取字节和去重命中。
跨进程共享结构由
src/shm_kv.py实现,采用共享内存追加日志:日志由进程锁保护,每个进程维护本地物化视图,并按版本增量回放新记录。
共享记忆
每条记忆采用统一结构:
共享记忆支持:
系统包含两条跨任务复用路径:
CodeAct 执行
Executor 支持由 LLM 生成 Python 分析代码。代码通过 JSON stdin 读取任务、规划、证据、共享记忆和反馈,并在轻量沙箱中运行。
沙箱包含:
python -I隔离解释器;系统支持首次代码生成和一次带上下文的定向修复,并分别统计首次成功、修复成功和最终成功结果。
Verifier 质量门禁
Verifier 从五个维度评估 Executor 的结构化结果:
程序根据任务类型使用公开权重计算总分,并结合 Schema 与语义检查决定是否通过。每个任务最多进行一次带反馈修订,系统保留得分最高的有效结果。
辩论协作
高风险综合任务支持
collab=debate:当前 G3T1 跨领域比较和 G4T1 综合报告启用该流程。
系统架构
flowchart TD O["OrchestratorDAG 调度"] B["Socket Broker
握手、能力发现、路由"] A["五类 Agent 进程"] S["状态交换
向量 + 共享内存"] M["共享记忆
存储、检索、复用"] E["评测模块
开销、质量、耗时"] O <--> B B <--> A A <--> S A <--> M O --> E A --> E
系统主要由以下模块组成:
通信协议
业务层统一使用以下 canonical envelope:
协议处理流程:
to字段路由;协议版本为 v3,Broker 注册阶段会校验客户端协议版本并记录能力描述。
任务流程
每个普通任务执行以下流程:
任务以 DAG 形式组织,后序任务会继承依赖任务的结构化结果。
每一轮包含 10 个基础任务:
默认
--rounds 2会扩展为 20 个连续任务。后一轮根任务依赖上一轮汇点,保证任务按轮次连续执行。A/B 实验
系统对 text 与 struct 模式执行严格配对实验。
每一对实验包括:
text 与 struct 共同读取同一个 SQLite 响应库,运行顺序逐对交替。公平性审计检查:
只有
fairness.comparison_valid == true时,报告才生成通信和耗时节省率。主要指标
msg_countpayload_byteswire_sender_byteswire_forward_byteswire_bytespayload_token_estimatellm_input_tokensllm_output_tokensvector_transfersvector_consumedvector_decisionsshm_logical_referencesshm_unique_objectsshm_unique_bytes_writtenshm_dedup_hitsmemory_hit_ratememory_precision_at_1memory_recall_at_1memory_avoided_retrievalscross_agent_memory_readscodeact_first_okcodeact_final_okverifier_passed_counttask_success_counttask_avg_stask_p95_s示例实验结果
仓库中的
outputs/experiment_latest.json为 Linux(内核 5.15,x86_64)+ 真实 LLM(SiliconFlow)环境下的实测数据:20 个任务、3 对 A/B 实验,公平性审计通过。下表为逐指标取 3 对实验中位数的结果。完整数据和生成报告位于:
outputs/experiment_latest.jsondocs/03-实验报告.html环境要求
multiprocessing.shared_memory;运行时仅依赖 Python 标准库。
大模型 API 与多模型配置
配置文件位置
大模型与 Embedding 服务的统一配置入口位于:
模型配置的调用关系为:
src/config.py:设置 API Key、Base URL、默认大模型、Embedding 模型以及不同 Agent 使用的模型;src/runtime.py:创建五类 Agent,并把角色对应的模型配置传入各子进程;src/agent.py:根据 Agent 角色读取对应模型;src/llm.py:负责调用 OpenAI 兼容接口,通常不需要在此文件中填写 API Key。API Key 不应直接提交到公开仓库。推荐由环境变量提供,并在
src/config.py中统一读取。设置大模型 API
打开
src/config.py,定位 LLM 配置区域,填写或检查以下配置项:api_keysk-...base_urlhttps://api.example.com/v1modelmodel-nametimeout120temperature0.2max_tokens4096推荐先在终端设置环境变量,再启动程序:
随后确认
src/config.py中的 LLM 配置从对应环境变量读取。配置结构可参考:如果服务商提供的是 OpenAI 兼容接口,只需要替换
LLM_BASE_URL、LLM_API_KEY和模型名称,无需修改src/llm.py的请求流程。为不同 Agent 设置不同模型
不同 Agent 的模型选择位置同样位于:
在角色模型映射中分别设置 Planner、Retriever、Executor、Verifier 和 Summarizer。示例:
对应的终端配置示例:
未单独设置的角色应回退到
LLM_MODEL。模型配置的实际传递位置为:建议的角色分工如下:
设置 Embedding API
Embedding 服务也在
src/config.py中配置。需要设置:对应配置结构可参考:
当大模型和 Embedding 使用同一服务商时,可以复用 API Key 和 Base URL,仅分别指定模型名称。
配置检查
完成设置后运行:
正式运行前应确认:
SYNAPSE_OFFLINE未设置为1;/v1;快速验证:
如果只需要一个模型服务全部 Agent,可仅设置
LLM_MODEL;如果需要多模型协作,再设置五个角色模型变量。快速开始
环境检查
编译检查
单元测试
当前测试覆盖协议、状态、记忆、共享内存、CodeAct、Verifier、回放、公平性、辩论和报告生成。
codec 基准
该命令使用 50 条 canonical message 验证 text/struct 语义等价,并生成:
进程内连续任务检查
该命令执行 20 个连续任务,并验证五类 Agent、状态消费、共享记忆、CodeAct 和 Verifier 业务链。
离线完整 A/B
正式 A/B
模型和 Embedding 服务配置位于
src/config.py。完成配置后运行:openEuler 一键验收
验收脚本依次执行:
离线模式
设置以下环境变量可强制使用确定性 MockLLM:
关闭终端看板:
调整共享内存外部化阈值:
调整记忆语义检索阈值:
调整 Executor CodeAct 输出预算:
项目目录
License
本项目采用 MIT License,详见
LICENSE。SYNAPSE