修改视频
面向多智能体协作的轻量运行时:让控制消息更规范,让数值状态少搬运,让已经验证的结果可以安全复用。
memlink 是一个面向 openEuler / Linux 环境的多 Agent 运行时原型。项目关注的不是“如何再做一个 Agent 框架”,而是多 Agent 在真实运行过程中经常出现的三个系统问题:
memlink 因此把系统拆成三条独立但可以组合的路径:
Control Plane AgentEnvelope + ArtifactRef State Plane StateRef + SharedMemory Reuse Plane MemoryService + Evaluator-Validated Fast Path
memlink 的目标不是替代 LangGraph、AutoGen 等编排框架,而是在多 Agent 协作链路中验证一组更偏“系统层”的机制:
系统默认提供 Planner、Retriever、Executor、Summarizer 四个角色,用于形成稳定、可追踪的实验链路。
User Task │ ▼ Planner │ ▼ Retriever │ ▼ Executor │ ▼ Summarizer │ ▼ Final Result
memlink 适用于需要多个 Agent 协同完成规划、检索、执行和总结的任务场景,重点面向:
项目重点验证系统层通信、状态与复用机制,不以替代通用 Agent 编排框架为目标。
Agent 间消息统一使用 AgentEnvelope 表达。Envelope 中记录:
AgentEnvelope
message_id / trace_id / task_id / step_id
sender / receiver
message_type / action / capability
args / result
state_refs / artifact_refs / memory_refs
status / metrics
结构化协议的首要作用是统一协作语义、约束字段并增强可观测性,而不是简单宣称“结构化消息一定比文本更小”。
对于不适合直接放入消息的大对象,memlink 使用 ArtifactRef:
ArtifactRef
Large Object │ ▼ ArtifactStore │ └── ArtifactRef ──► AgentEnvelope
控制链路只携带引用和必要元数据,实际对象独立保存。
核心代码:
src/agentipc/protocol/ src/agentipc/artifacts/
对于 NumPy 数组、计划向量等数值状态,memlink 不要求将数组内容重新展开到 Agent 消息中。
NumPy ndarray │ ▼ StateHub.put_array(...) │ ├── inproc └── Linux SharedMemory │ ▼ StateRef │ ▼ AgentEnvelope │ ▼ StateHub.resolve_array(...)
StateRef 保存状态定位和校验所需的元数据,例如:
StateRef
uri kind shape dtype nbytes checksum transport summary
接收端根据引用恢复状态,并校验 shape、dtype、nbytes 和 checksum。
当前实现不宣称完全 zero-copy:SharedMemory 可以避免在控制链路中传输完整数值内容,但 resolve_array() 返回独立 NumPy 数组时仍会产生一次数据复制。
resolve_array()
src/agentipc/state/hub.py src/agentipc/state/shared_memory.py src/agentipc/protocol/refs.py
memlink 将普通“记忆检索”和“直接复用结果”分成两件事。
普通检索可以综合:
semantic similarity + keyword overlap + tag overlap
但检索命中本身不会让系统跳过正常 Agent 链路。
只有满足严格条件的历史结果才允许进入 Fast Path:
Exact Task Match + MemoryType.RESULT + External Evaluator Passed + 可用的结果内容 │ ▼ Validated Memory Fast Path
如果不满足条件,系统继续执行正常 Planner → Retriever → Executor → Summarizer 链路。
这样做的重点不是“尽可能多地命中记忆”,而是减少相似任务误复用带来的错误传播。
src/agentipc/memory/service.py src/agentipc/memory/sqlite_store.py src/agentipc/memory/vector_index.py
项目保留四种运行模式用于逐层开启机制:
A/B/C/D 用于观察不同基础设施机制是否真正进入执行链路,并记录:
离线 mock benchmark 主要用于稳定、确定性地复现执行链路;真实模型正式实验与冻结结果应以 tests/evidence/、正式报告和项目说明书中的记录为准。
mock
tests/evidence/
项目将关键能力拆成独立实验,避免仅凭一个端到端数字解释所有收益。
E6 验证“只有经过 evaluator 验证的精确历史 RESULT 才能跳过重复执行”。
已保存的正式结果中:
E6 的重点是安全复用,而不是把普通语义相似度命中当作可直接复用结果。
E7 使用独立进程验证真实 SharedMemory 状态交换。
代表性正式结果:
该实验同时体现一个边界:SharedMemory 有固定管理开销,因此小状态的时延收益有限;状态规模增大后收益才更加明显。
E8 在完整链路上验证协议、状态和安全复用机制组合后的效果。
正式结果包含 120 / 120 条成功记录,Evaluation Pass 为 **100%**。在该实验设置的 50% 新任务 + 50% evaluator-validated exact-repeat 工作负载下:
这些整体收益与实验中的 exact-repeat 比例密切相关,不应泛化为所有未知新任务都固定获得约 50% 的性能提升。
memlink 提供本地 Dashboard,用于查看:
Dashboard 的目标不是生成新的实验结论,而是让系统运行路径和正式结果更容易被检查。
启动:
agentipc dashboard \ --host 0.0.0.0 \ --port 8000 \ --results-dir results
浏览器访问:
http://127.0.0.1:8000/dashboard/
推荐环境:
基础依赖:
pydantic >= 2.0, < 3.0 numpy >= 1.24 psutil >= 5.9 PyYAML >= 6.0
Dashboard 可选依赖:
fastapi uvicorn httpx
真实模型路径可选使用:
openai-compatible provider sentence-transformers tiktoken
Windows 可用于开发与部分调试;正式 SharedMemory 与 openEuler 验证以 Linux 环境为准。
比赛评审版本以当前 GitLink 比赛仓库 master 分支为准。获取仓库后进入项目根目录即可安装。
master
推荐在 openEuler / Linux 环境中使用项目脚本创建独立虚拟环境:
bash demo/scripts/install.sh source .venv/bin/activate
确认 CLI:
agentipc version
也可以手动创建环境并安装:
python3 -m venv .venv source .venv/bin/activate python -m pip install -U pip python -m pip install -e ".[dev,dashboard]"
.venv/ 为本地运行环境,不纳入比赛仓库。
.venv/
完成第 8 节的构建与安装后,即可使用以下命令运行、测试和验证项目。
agentipc doctor
正常环境下应看到:
Overall: PASS
agentipc demo --provider mock
该命令不需要外部模型 API,适合快速确认 A/B/D 基础链路能够工作。
agentipc benchmark \ --suite smoke \ --repeat 3 \ --seed 42 \ --provider mock \ --results-root results
结果目录包含:
environment.json raw.jsonl report.md summary.json
Knowledge:
agentipc run-scenario knowledge \ --provider mock \ --seed 42 \ --results-root results \ --scenario-root tests/scenarios
CodeAct:
agentipc run-scenario codeact \ --provider mock \ --seed 42 \ --results-root results \ --scenario-root tests/scenarios
完整测试:
bash tests/scripts/run_tests.sh
或:
python -m pytest -q
按模块测试:
bash tests/scripts/run_tests.sh tests/protocol bash tests/scripts/run_tests.sh tests/state bash tests/scripts/run_tests.sh tests/memory
openEuler 一键验证:
bash demo/scripts/verify_openeuler.sh
验证流程包括:
Environment Check │ ▼ agentipc doctor │ ▼ pytest │ ▼ offline demo │ ▼ benchmark │ ▼ output validation
决赛版本按照赛事要求整理为以下主目录结构:
memlink/ ├── README.md ├── src/ │ └── agentipc/ │ ├── agents/ │ ├── artifacts/ │ ├── dashboard/ │ │ └── static/ │ ├── evaluation/ │ ├── experiments/ │ ├── memory/ │ ├── protocol/ │ ├── providers/ │ ├── resources/ │ │ └── configs/ │ ├── runtime/ │ ├── sandbox/ │ └── state/ ├── docs/ │ ├── 项目说明书.pdf │ ├── 项目创新说明.pdf │ ├── 成员分工及主要贡献说明.pdf │ └── 人工智能及第三方工具使用说明.pdf ├── tests/ │ ├── scenarios/ │ ├── scripts/ │ └── evidence/ ├── demo/ │ ├── README.md │ └── scripts/ ├── presentation/ │ ├── 决赛现场演示PPT.pptx │ └── 决赛演示视频.mp4 ├── 作品原创承诺书.pdf ├── pyproject.toml ├── .env.example └── .gitignore
其中:
src/agentipc/
src/agentipc/resources/configs/
src/agentipc/dashboard/static/
tests/scenarios/
tests/scripts/
demo/scripts/
docs/
presentation/
pyproject.toml、.env.example 和 .gitignore 为项目构建与运行所需的工程元文件,因此保留在根目录。
pyproject.toml
.env.example
.gitignore
仓库提供 .env.example。真实 .env 和 API Key 不应提交到 Git。
.env
常用离线变量:
export AGENTIPC_PYTHON=python3 export AGENTIPC_VENV_DIR=.venv export AGENTIPC_BENCHMARK_PROVIDER=mock export AGENTIPC_BENCHMARK_SEED=42 export AGENTIPC_BENCHMARK_REPEAT=3 export AGENTIPC_RESULTS_ROOT=results
OpenAI-compatible provider 可参考:
OPENAI_API_KEY OPENAI_BASE_URL AGENTIPC_LLM_MODEL AGENTIPC_EMBEDDING_MODEL AGENTIPC_EMBEDDING_DIM
项目实验遵循以下原则:
结构化协议不保证所有消息都比文本更小。 其主要价值是消息契约、路由、引用和可观测性;大对象优化依赖 ArtifactRef / StateRef。
StateRef 不是完全 zero-copy。 SharedMemory 避免了控制消息中反复展开数组,但当前 resolve_array() 仍返回独立 NumPy 数组。
SharedMemory 对小状态存在固定开销。 因此不能仅凭大状态实验结论推断所有状态规模都能降低时延。
语义记忆命中不等于 Fast Path。 普通 retrieval 只提供上下文;未经 evaluator 验证的结果不会直接跳过执行。
E8 的整体收益与工作负载有关。 50% exact-repeat 是实验设计的一部分,不代表任意新任务都具有同样收益。
当前目标环境是单机 openEuler / Linux。 项目没有宣称已经完成多机分布式调度、Kubernetes 编排或外部向量数据库部署。
决赛材料按照赛事规定放置:
docs/ ├── 项目说明书.pdf ├── 项目创新说明.pdf ├── 成员分工及主要贡献说明.pdf └── 人工智能及第三方工具使用说明.pdf presentation/ ├── 决赛现场演示PPT.pptx └── 决赛演示视频.mp4 项目根目录/ └── 作品原创承诺书.pdf
评审时建议按以下顺序查看:
README.md ↓ docs/项目说明书.pdf ↓ docs/项目创新说明.pdf ↓ tests/evidence/ ↓ demo/ ↓ presentation/
比赛提交材料遵循匿名要求,不应在公开代码、文档、PPT、视频和截图中保留学校、指导老师或参赛人员身份信息。
作品名称:
memlink
为保持历史工程兼容,以下内部名称继续保留:
Python package: src/agentipc CLI: agentipc Env prefix: AGENTIPC_*
它们仅属于工程内部接口命名,不改变参赛作品名称和技术内容。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
memlink
memlink 是一个面向 openEuler / Linux 环境的多 Agent 运行时原型。项目关注的不是“如何再做一个 Agent 框架”,而是多 Agent 在真实运行过程中经常出现的三个系统问题:
memlink 因此把系统拆成三条独立但可以组合的路径:
1. 项目定位
memlink 的目标不是替代 LangGraph、AutoGen 等编排框架,而是在多 Agent 协作链路中验证一组更偏“系统层”的机制:
系统默认提供 Planner、Retriever、Executor、Summarizer 四个角色,用于形成稳定、可追踪的实验链路。
2. 应用场景
memlink 适用于需要多个 Agent 协同完成规划、检索、执行和总结的任务场景,重点面向:
项目重点验证系统层通信、状态与复用机制,不以替代通用 Agent 编排框架为目标。
3. 三个核心机制
3.1 AgentEnvelope:控制链路的数据契约
Agent 间消息统一使用
AgentEnvelope表达。Envelope 中记录:message_id / trace_id / task_id / step_idsender / receivermessage_type / action / capabilityargs / resultstate_refs / artifact_refs / memory_refsstatus / metrics结构化协议的首要作用是统一协作语义、约束字段并增强可观测性,而不是简单宣称“结构化消息一定比文本更小”。
对于不适合直接放入消息的大对象,memlink 使用
ArtifactRef:控制链路只携带引用和必要元数据,实际对象独立保存。
核心代码:
3.2 StateRef + SharedMemory:跨进程非文本状态交换
对于 NumPy 数组、计划向量等数值状态,memlink 不要求将数组内容重新展开到 Agent 消息中。
StateRef保存状态定位和校验所需的元数据,例如:接收端根据引用恢复状态,并校验 shape、dtype、nbytes 和 checksum。
当前实现不宣称完全 zero-copy:SharedMemory 可以避免在控制链路中传输完整数值内容,但
resolve_array()返回独立 NumPy 数组时仍会产生一次数据复制。核心代码:
3.3 Evaluator-Validated Memory Fast Path:只复用被验证过的结果
memlink 将普通“记忆检索”和“直接复用结果”分成两件事。
普通检索可以综合:
但检索命中本身不会让系统跳过正常 Agent 链路。
只有满足严格条件的历史结果才允许进入 Fast Path:
如果不满足条件,系统继续执行正常 Planner → Retriever → Executor → Summarizer 链路。
这样做的重点不是“尽可能多地命中记忆”,而是减少相似任务误复用带来的错误传播。
核心代码:
4. A/B/C/D 实验模式
项目保留四种运行模式用于逐层开启机制:
A/B/C/D 用于观察不同基础设施机制是否真正进入执行链路,并记录:
离线
mockbenchmark 主要用于稳定、确定性地复现执行链路;真实模型正式实验与冻结结果应以tests/evidence/、正式报告和项目说明书中的记录为准。5. 正式实验验证
项目将关键能力拆成独立实验,避免仅凭一个端到端数字解释所有收益。
E6:Validated Memory Fast Path
E6 验证“只有经过 evaluator 验证的精确历史 RESULT 才能跳过重复执行”。
已保存的正式结果中:
E6 的重点是安全复用,而不是把普通语义相似度命中当作可直接复用结果。
E7:Linux SharedMemory + StateRef
E7 使用独立进程验证真实 SharedMemory 状态交换。
代表性正式结果:
该实验同时体现一个边界:SharedMemory 有固定管理开销,因此小状态的时延收益有限;状态规模增大后收益才更加明显。
E8:完整系统
E8 在完整链路上验证协议、状态和安全复用机制组合后的效果。
正式结果包含 120 / 120 条成功记录,Evaluation Pass 为 **100%**。在该实验设置的 50% 新任务 + 50% evaluator-validated exact-repeat 工作负载下:
这些整体收益与实验中的 exact-repeat 比例密切相关,不应泛化为所有未知新任务都固定获得约 50% 的性能提升。
6. Dashboard 与运行证据
memlink 提供本地 Dashboard,用于查看:
Dashboard 的目标不是生成新的实验结论,而是让系统运行路径和正式结果更容易被检查。
启动:
浏览器访问:
7. 运行环境
推荐环境:
基础依赖:
Dashboard 可选依赖:
真实模型路径可选使用:
Windows 可用于开发与部分调试;正式 SharedMemory 与 openEuler 验证以 Linux 环境为准。
8. 获取与安装
比赛评审版本以当前 GitLink 比赛仓库
master分支为准。获取仓库后进入项目根目录即可安装。推荐在 openEuler / Linux 环境中使用项目脚本创建独立虚拟环境:
确认 CLI:
也可以手动创建环境并安装:
.venv/为本地运行环境,不纳入比赛仓库。9. 快速运行
完成第 8 节的构建与安装后,即可使用以下命令运行、测试和验证项目。
9.1 环境检查
正常环境下应看到:
9.2 离线 Demo
该命令不需要外部模型 API,适合快速确认 A/B/D 基础链路能够工作。
9.3 Smoke Benchmark
结果目录包含:
9.4 连续任务
Knowledge:
CodeAct:
10. 测试与 openEuler 验证
完整测试:
或:
按模块测试:
openEuler 一键验证:
验证流程包括:
11. 项目结构
决赛版本按照赛事要求整理为以下主目录结构:
其中:
src/agentipc/:项目运行时代码;src/agentipc/resources/configs/:运行配置资源;src/agentipc/dashboard/static/:Dashboard 静态资源;tests/scenarios/:Knowledge / CodeAct 等场景输入;tests/scripts/:测试、benchmark 与正式实验相关脚本;tests/evidence/:测试验证材料及冻结实验依据;demo/scripts/:安装、openEuler 检查和一键验证脚本;docs/:赛事要求的四份 PDF 文档;presentation/:决赛现场 PPT 与演示视频。pyproject.toml、.env.example和.gitignore为项目构建与运行所需的工程元文件,因此保留在根目录。12. 配置说明
仓库提供
.env.example。真实.env和 API Key 不应提交到 Git。常用离线变量:
OpenAI-compatible provider 可参考:
13. 复现原则
项目实验遵循以下原则:
14. 已知边界
结构化协议不保证所有消息都比文本更小。 其主要价值是消息契约、路由、引用和可观测性;大对象优化依赖
ArtifactRef/StateRef。StateRef 不是完全 zero-copy。 SharedMemory 避免了控制消息中反复展开数组,但当前
resolve_array()仍返回独立 NumPy 数组。SharedMemory 对小状态存在固定开销。 因此不能仅凭大状态实验结论推断所有状态规模都能降低时延。
语义记忆命中不等于 Fast Path。 普通 retrieval 只提供上下文;未经 evaluator 验证的结果不会直接跳过执行。
E8 的整体收益与工作负载有关。 50% exact-repeat 是实验设计的一部分,不代表任意新任务都具有同样收益。
当前目标环境是单机 openEuler / Linux。 项目没有宣称已经完成多机分布式调度、Kubernetes 编排或外部向量数据库部署。
15. 比赛材料
决赛材料按照赛事规定放置:
评审时建议按以下顺序查看:
比赛提交材料遵循匿名要求,不应在公开代码、文档、PPT、视频和截图中保留学校、指导老师或参赛人员身份信息。
16. 名称说明
作品名称:
为保持历史工程兼容,以下内部名称继续保留:
它们仅属于工程内部接口命名,不改变参赛作品名称和技术内容。