flowchart LR
T[Task] --> B[Runtime Broker]
B --> P[Planner]
P --> R[Retriever]
R --> E[Executor]
E --> S[Summarizer]
S --> B
R <--> M[(SQLite Memory)]
S --> M
P <--> A[(Artifact Store)]
R <--> A
E <--> A
S <--> A
在 proto 模式下,Agent 之间传递的是序列化后的 AgentEnvelope。运行 trace 只用于记录和评测,不参与业务数据传递。
Proto Agents
Proto Agents 是一个基于 AutoGen Core 和 Protobuf 的多智能体协作项目,用于比较纯文本与结构化消息的通信开销,并验证向量状态传递和历史执行结果复用。
系统包含 Planner、Retriever、Executor 和 Summarizer 四个 Agent。仓库同时提供纯文本通信基线,便于在相同任务、工具和记忆策略下与 Protobuf 模式做对比。
实现内容
text和proto两种通信模式SingleThreadedAgentRuntimeref、float16、float32三种向量状态编码系统结构
flowchart LR T[Task] --> B[Runtime Broker] B --> P[Planner] P --> R[Retriever] R --> E[Executor] E --> S[Summarizer] S --> B R <--> M[(SQLite Memory)] S --> M P <--> A[(Artifact Store)] R <--> A E <--> A S <--> A在
proto模式下,Agent 之间传递的是序列化后的AgentEnvelope。运行 trace 只用于记录和评测,不参与业务数据传递。环境要求
创建虚拟环境并安装依赖:
requirements.txt包含运行、Protobuf 代码生成和质量检查所需依赖。只安装项目及质量工具时,也可以执行:快速开始
从项目根目录运行一轮本地 Protobuf 流程:
其他运行方式:
未配置模型服务时,程序使用确定性的本地模板和 32 维 hashing embedding,不需要联网。运行指标和 trace 写入
experiments/results/,共享记忆写入data/。配置模型服务
项目支持 OpenAI-compatible 的 chat completions 和 embeddings 接口。可以在项目根目录创建
.env,也可以直接设置同名环境变量;环境变量的优先级更高。.env已加入.gitignore,不要提交真实密钥。只有 URL 和 key 同时存在时才会请求远端接口;调用失败会回退到本地实现。向量状态的线路编码由
PROTO_STATE_ENCODING控制:reffloat16float32repeated float例如:
运行对比实验
下面的命令会让 text 和 proto 模式分别运行 10 轮。
run-id必须唯一,已有结果不会被覆盖。每种模式使用独立的 SQLite 数据库。运行成功后,结果位于:
结果目录包括运行清单、指标汇总、对比报告、逐轮指标和 Agent trace。默认实验使用本地模板模型;只有直接调用
experiments/run_benchmark.py并传入--online时,才会启用已配置的远端接口。基准结果
仓库内附的离线基准在 openEuler 24.03 LTS-SP3、Local runtime、
ref编码下完成,text 和 proto 各运行 10 轮。以下为每轮平均值:在这组任务上,proto 模式的数据面字节数减少 81.34%;计入握手、能力发现和动作请求后,总线路字节数减少 37.00%。两种模式各有 2 轮执行实际工具和 CodeAct,其余 8 轮复用共享记忆。
这些数据用于比较通信与复用机制,不代表公网模型的响应速度。原始指标和计算口径见 基准报告 和运行清单。
测试与检查
运行单元测试和静态检查:
修改
protos/agent_protocol.proto后重新生成 Python 代码:在 openEuler 24.03 LTS-SP3 上执行完整质量门禁:
该脚本会检查系统和依赖版本、编译 Protobuf schema、运行测试与静态检查,并验证 Local/AutoGen runtime 和 Bubblewrap 隔离。
外层容器不允许 user namespace 时,可使用
--no-require-bubblewrap做非严格检查。该结果不能替代正式隔离验收。目录说明