更新 README 作品说明 Co-authored-by: Cursor cursoragent@cursor.com
更新 README 作品说明
Co-authored-by: Cursor cursoragent@cursor.com
作品名称: 面向多智能体协作的低开销通信、状态传递与共享记忆机制业务锚点: 项目管理系统(PMS)智慧园区分包结算 → 预算校验 → 付款资金协同参赛团队: 开心向前飞队赛题方向: 多智能体协作基础设施(协议 / 状态传递 / 共享记忆)
本目录 competition/ 是可独立演示与评测的赛题实现单元:不依赖 PMS 前端页面,可在 Windows / Linux / openEuler 24.03-LTS-SP3 上单独运行。评测脚本 不强制 LLM API Key;PMS Java 后端不可用时自动回退内置 mock 数据。
competition/
多智能体系统在规划、检索、执行、总结等角色分工时,主流框架常以自然语言或长 JSON作为 Agent 间通信媒介,带来三类系统层瓶颈:
本作品将研究重心放在协作基础设施,而非单纯增强模型能力,提出并实现:
state_ref
项目管理系统(PMS)天然具备多域、多单据、强规则校验特征:采购合同、项目预算、分包结算、财务资金计划分属不同业务域,却在真实交付中必须串联。用「分包结算是否超预算 → 再申请付款是否够资金」这一连续链路,可以同时验证:
业务数据对齐仓库内 PMS 智慧园区样例项目(项目编码 PP2026000001、合同 PC2026000001)。
PP2026000001
PC2026000001
PMS(Project Management System,项目管理系统)覆盖智慧园区类工程项目的采购—项目—财务协同。本赛题不展开完整 ERP,只抽取与多智能体协作强相关的一条真实业务链:
采购合同签订 │ ▼ 分包结算申报(本期结算金额) │ ▼ 对照项目分包预算 / 成本限额(是否超预算) │ ▼ 写入/沉淀校验结论(可供后续任务复用) │ ▼ 分包付款申请(本月拟付金额) │ ▼ 对照财务资金计划剩余额度(是否够付)
演示与评测使用的样例数据定义在 competition/tasks.py,含义如下:
competition/tasks.py
DXJX20260605105142826
ZJ2026000001
金额单位均为万元(与 mock / 校验规则一致)。
任务组 A — 分包结算预算校验
settlement_amount = 30
结算金额 ≤ 成本限额 − 累计已结算
30 ≤ 200 − 30 = 170
ready: true
任务组 B — 分包付款资金校验
payment_amount = 20
2026-07
付款金额 ≤ 本月资金计划剩余
20 ≤ 50
reuse_memory_topic = subcontract_settlement_validate
memory_hit_count
Agent 能力按业务域发现与路由,对应项管真实分工:
四角色 Agent(Planner / Retriever / Executor / Summarizer)无状态,上下文由编排器注入;Planner 只编排 capability 名,Retriever 按后缀路由取数。
competition/datasource.py 实现 PmsDataSource:
competition/datasource.py
PMS_API_BASE_URL
http://localhost:8081
tasks.py
可用 python -m competition.run probe 探测后端是否连通。
python -m competition.run probe
任务定义见 competition/task_groups.py。
competition/task_groups.py
group_id
group_a
task_type
subcontract_settlement_validate
project_code=PP2026000001
document_no=DXJX…
settlement_amount=30
contract_no=PC2026000001
结构化模式下典型步骤:取结算 → 取预算执行 → 规则校验 → 总结并按 task_topic 写入共享记忆。
task_topic
group_b
subcontract_payment_apply
payment_amount=20
payment_month=2026-07
reuse_memory_topic=subcontract_settlement_validate
B 强制依赖 A 的主题记忆:用于证明跨任务共享记忆真实生效,而不是两次互不相干的独立任务。
# 连续执行 A → B(结构化模式) python -m competition.run demo # 单任务 / 指定模式 python -m competition.run task -t subcontract_settlement_validate -m structured python -m competition.run task -t subcontract_payment_apply -m text
统一 AgentMessage schema,以 mode 切换载荷语义:
AgentMessage
mode
action
capability
params
summary
memory_refs
text_payload
同一 Orchestrator、同一任务定义与校验规则,保证:业务结论一致,仅通信开销可对照。
评测分别统计 vector_pass_count 与 memory_hit_count,避免两种机制边界混淆。
vector_pass_count
CLI / HTTP → Orchestrator → Planner(拆步骤) → Retriever(取数 + 写 state_ref / 记忆) → Executor(读引用 / 解析载荷 + 规则校验) → Summarizer(结论 + 主题持久化) ← MetricsCollector(token / 命中 / 时延)
competition/ ├── README.md # 本文件(提交说明) ├── run.py # CLI:handshake / demo / benchmark / probe … ├── benchmark.py # 双模式对照基准 ├── task_groups.py # 任务组 A / B 定义 ├── tasks.py # 校验规则 + mock 业务数据 ├── datasource.py # PMS API 客户端(失败回退 mock) ├── ask.py # 辅助问答入口(如有) ├── results/ # 评测输出(如 benchmark-10.json) ├── scripts/ # 打包脚本 └── docs/ # 设计文档、实验报告、演示 PPT ├── 00-学习导读.md ├── 01-系统架构.md ├── 02-结构化通信协议.md ├── 03-状态传递与共享记忆.md ├── 04-实验与评测指南.md ├── 05-openEuler部署.md ├── 06-demo答辩讲解稿.md ├── experiment-report.md ├── 作品设计书.md └── figures/ # 架构图 / 时序图 / 指标图
运行时依赖 pms-agent/app/ 中的自研协作栈(随仓库一并提交):
pms-agent/app/
app/protocol/
app/runtime/agents/
app/runtime/orchestrator.py
app/state/exchange.py
app/memory/store.py
原创边界: 协议、编排、状态交换、共享记忆、Benchmark 与 A→B 任务链为团队自研;FastAPI / Pydantic / Embedding / SQLite / httpx 等仅作基础运行支撑。
8081
在 pms-agent 根目录执行:
pms-agent
cd pms-agent python3 -m venv .venv # Linux / openEuler source .venv/bin/activate # Windows PowerShell # .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt # 国内镜像示例: # pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
可选配置:
cp .env.example .env # PMS_API_BASE_URL=http://127.0.0.1:8081
不启动 Java 后端亦可完整跑通;数据源将自动使用 mock。
# 0)可选:探测后端 python -m competition.run probe # 1)握手:应看到 4 个 Agent 已注册 python -m competition.run handshake # 2)演示:任务组 A → B(结算校验 + 付款校验与记忆复用) python -m competition.run demo # 3)基准:结构化 vs 纯文本,默认建议 10 轮 python -m competition.run benchmark -n 10 # 保存结果到文件 python -m competition.run benchmark -n 10 --save competition/results/benchmark-10.json
Windows 也可使用:competition\run_competition.bat(若已提供)。
competition\run_competition.bat
python -m competition.run discover --domain finance python -m competition.run task -t subcontract_settlement_validate -m structured
message_count
estimated_tokens
elapsed_ms
results/benchmark-10.json
说明:本地 structured 时延可能略高于 text,主因是 embedding 计算;主评测口径看通信载荷(Token)与机制计数,业务结论(结算 / 付款是否通过)在双模式下保持一致。
在 openEuler 上请复跑 benchmark -n 10,用新 JSON 覆盖或附录到实验报告。
benchmark -n 10
uvicorn app.main:app --host 0.0.0.0 --port 8090
常用接口示例:
curl http://127.0.0.1:8090/competition/health curl -X POST "http://127.0.0.1:8090/competition/benchmark?rounds=10"
(具体路径以 app/main.py 中 competition 路由为准。)
app/main.py
赛题要求最终代码可在 openEuler 24.03-LTS-SP3 编译、运行与测试。摘要步骤:
sudo dnf install -y python3 python3-pip python3-devel git sqlite cd pms-agent python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple python3 -m competition.run handshake python3 -m competition.run demo python3 -m competition.run benchmark -n 10
详细步骤与排错见 docs/05-openEuler部署.md。
运行后可检查本地库文件(路径以配置为准),例如:
ls -la data/memory/shared_memory.db ls -la data/state/state_vectors.db
本作品在 PMS 智慧园区分包结算与付款 真实业务链上,用 结构化协议 + 状态引用 + 共享记忆 降低多智能体协作开销,并以 双模式 10 轮基准 给出可复现的 Token / 命中 / 引用证据;业务结论可人工按预算与资金计划规则核验,机制收益可按指标拆分证伪。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
赛题作品说明(competition)
本目录
competition/是可独立演示与评测的赛题实现单元:不依赖 PMS 前端页面,可在 Windows / Linux / openEuler 24.03-LTS-SP3 上单独运行。评测脚本 不强制 LLM API Key;PMS Java 后端不可用时自动回退内置 mock 数据。目录
1. 作品简介
1.1 要解决什么问题
多智能体系统在规划、检索、执行、总结等角色分工时,主流框架常以自然语言或长 JSON作为 Agent 间通信媒介,带来三类系统层瓶颈:
本作品将研究重心放在协作基础设施,而非单纯增强模型能力,提出并实现:
state_ref引用传递1.2 为什么选 PMS 项管场景
项目管理系统(PMS)天然具备多域、多单据、强规则校验特征:采购合同、项目预算、分包结算、财务资金计划分属不同业务域,却在真实交付中必须串联。用「分包结算是否超预算 → 再申请付款是否够资金」这一连续链路,可以同时验证:
业务数据对齐仓库内 PMS 智慧园区样例项目(项目编码
PP2026000001、合同PC2026000001)。2. 项管业务背景(PMS)
2.1 PMS 在本作品中的定位
PMS(Project Management System,项目管理系统)覆盖智慧园区类工程项目的采购—项目—财务协同。本赛题不展开完整 ERP,只抽取与多智能体协作强相关的一条真实业务链:
2.2 关键业务对象
演示与评测使用的样例数据定义在
competition/tasks.py,含义如下:PP2026000001· 智慧园区数字化平台PC2026000001· 系统集成分包采购合同DXJX20260605105142826ZJ2026000001· 计划月 2026-07金额单位均为万元(与 mock / 校验规则一致)。
2.3 业务校验规则(可人工核验)
任务组 A — 分包结算预算校验
settlement_amount = 30结算金额 ≤ 成本限额 − 累计已结算(即 ≤ 预算余额)30 ≤ 200 − 30 = 170→ 通过(ready: true)任务组 B — 分包付款资金校验
payment_amount = 20,月份2026-07付款金额 ≤ 本月资金计划剩余20 ≤ 50→ 通过reuse_memory_topic = subcontract_settlement_validate,优先检索 A 的结论记忆;命中后摘要可出现「记忆复用」类标记,memory_hit_count可统计2.4 多域能力映射
Agent 能力按业务域发现与路由,对应项管真实分工:
四角色 Agent(Planner / Retriever / Executor / Summarizer)无状态,上下文由编排器注入;Planner 只编排 capability 名,Retriever 按后缀路由取数。
2.5 数据源策略
competition/datasource.py实现 PmsDataSource:PMS_API_BASE_URL,如http://localhost:8081)tasks.py中的 mock可用
python -m competition.run probe探测后端是否连通。3. 赛题任务设计
任务定义见
competition/task_groups.py。3.1 任务组 A:分包结算预算校验
group_idgroup_atask_typesubcontract_settlement_validateproject_code=PP2026000001,document_no=DXJX…,settlement_amount=30,contract_no=PC2026000001结构化模式下典型步骤:取结算 → 取预算执行 → 规则校验 → 总结并按
task_topic写入共享记忆。3.2 任务组 B:分包付款资金校验(关联复用)
group_idgroup_btask_typesubcontract_payment_applypayment_amount=20,payment_month=2026-07,reuse_memory_topic=subcontract_settlement_validateB 强制依赖 A 的主题记忆:用于证明跨任务共享记忆真实生效,而不是两次互不相干的独立任务。
3.3 演示命令
4. 核心机制
4.1 PMS-ACP 结构化通信
统一
AgentMessageschema,以mode切换载荷语义:action/capability/params/summary+state_ref/memory_refs;text_payload为空text_payload,模拟传统多 Agent「互抄全文」同一 Orchestrator、同一任务定义与校验规则,保证:业务结论一致,仅通信开销可对照。
4.2 state_ref 与共享记忆的边界
评测分别统计
vector_pass_count与memory_hit_count,避免两种机制边界混淆。4.3 四角色协同
5. 目录结构与代码边界
5.1 competition 目录
5.2 与主工程模块关系
运行时依赖
pms-agent/app/中的自研协作栈(随仓库一并提交):app/protocol/app/runtime/agents/app/runtime/orchestrator.pyapp/state/exchange.pystate_refapp/memory/store.pycompetition/原创边界: 协议、编排、状态交换、共享记忆、Benchmark 与 A→B 任务链为团队自研;FastAPI / Pydantic / Embedding / SQLite / httpx 等仅作基础运行支撑。
6. 环境与快速开始
6.1 环境要求
8081)6.2 安装
在
pms-agent根目录执行:可选配置:
不启动 Java 后端亦可完整跑通;数据源将自动使用 mock。
6.3 一键验证(评测最小路径)
Windows 也可使用:
competition\run_competition.bat(若已提供)。6.4 其它子命令
7. 评测指标与实测结果
7.1 指标含义
message_countestimated_tokensvector_pass_countstate_ref传递次数memory_hit_countelapsed_ms7.2 Windows 实测摘要(10 轮,见
results/benchmark-10.json)说明:本地 structured 时延可能略高于 text,主因是 embedding 计算;主评测口径看通信载荷(Token)与机制计数,业务结论(结算 / 付款是否通过)在双模式下保持一致。
在 openEuler 上请复跑
benchmark -n 10,用新 JSON 覆盖或附录到实验报告。8. HTTP API(可选)
常用接口示例:
(具体路径以
app/main.py中 competition 路由为准。)9. openEuler 部署要点
赛题要求最终代码可在 openEuler 24.03-LTS-SP3 编译、运行与测试。摘要步骤:
详细步骤与排错见 docs/05-openEuler部署.md。
运行后可检查本地库文件(路径以配置为准),例如:
10. 文档索引
一句话总结
本作品在 PMS 智慧园区分包结算与付款 真实业务链上,用 结构化协议 + 状态引用 + 共享记忆 降低多智能体协作开销,并以 双模式 10 轮基准 给出可复现的 Token / 命中 / 引用证据;业务结论可人工按预算与资金计划规则核验,机制收益可按指标拆分证伪。