第16章 共享记忆与持续改进
本章前置检查:
- □ 已完成OpenClaw与Hermes的ACP连接配置(第14章)
- □ 理解双Agent协作的几种模式(第15章)
- □ 熟悉Hermes的三层记忆系统(第9章)
- □ 了解OpenClaw的RAG知识库配置(第3.4节)
本章预估总时长:3.5小时
本章难点提示:
- 16.1节(共享记忆架构)是本章的理论基础,建议先建立整体框架再动手实践。
- 16.2节(运行时传递)是最简单的共享方式,优先掌握;16.3节(外部提供商)属于进阶内容,可以先跳过。
- 16.5节(冲突解决与版本控制)是生产环境必备,建议至少完成一次手动合并练习。
- 16.6节(团队级知识蒸馏)适合多人协作场景,个人开发者可先了解概念。
🎯 本章教学目标:掌握OpenClaw与Hermes共享记忆的三种架构方案,能够根据场景选择合适的共享模式,熟悉团队级知识蒸馏流程,掌握记忆冲突解决与版本控制方法。
![图片[1]-双 Agent 共享记忆实战:冲突解决机制 + 团队级知识蒸馏](http://www.ifisme.cn/wp-content/uploads/2026/05/教材1601.png)
16.1 共享记忆架构设计
🎯 本节目标:理解共享记忆的核心价值,掌握三层架构设计原则。
预计时长:0.5小时
16.1.1 为什么需要共享记忆?
在第13章中,我们看到了OpenClaw和Hermes如何通过ACP协议交换消息。但如果没有共享记忆,每次协作都像是“初次见面”——Hermes不知道OpenClaw之前和用户聊过什么,OpenClaw也不知道Hermes上周总结出的优化技巧。
共享记忆解决的核心问题是:让两个Agent在长期协作中积累共同的理解和知识,而不是每次都从零开始。
典型场景:
- 用户在飞书中告诉OpenClaw:“以后所有代码生成,请遵循PEP8标准,行宽120字符。”OpenClaw将这个偏好写入共享记忆。第二天用户让Hermes重构代码时,Hermes从共享记忆中读取到该偏好,生成符合规范的代码。
- Hermes通过深度研究总结出一套“因子挖掘最佳实践”,写入共享记忆。另一名用户通过OpenClaw询问类似问题时,OpenClaw可以直接从记忆中检索并回答,无需再次委托Hermes。
16.1.2 共享记忆的三层架构
我们将共享记忆分为三个逻辑层次,分别存储不同粒度的信息:
| 层级 | 存储内容 | 访问频率 | 示例 |
|---|---|---|---|
| L1:运行时传递 | 当前会话的临时偏好、上下文片段 | 每次请求 | “这次报告请用英文输出” |
| L2:中间共享库 | 跨会话的用户偏好、项目规范 | 中频(每小时数次) | “用户偏好PEP8” |
| L3:外部记忆提供商 | 团队知识库、历史决策记录 | 低频(按需检索) | “因子挖掘方法论v2.3” |
数据流向:
- 用户消息 → OpenClaw → 查询L2/L3获取相关记忆 → 构造增强提示 → 委托Hermes(可选传递L1/L2片段) → Hermes执行 → 将新学到的知识写回L2/L3
龙马注:不要一开始就追求L3。对于个人开发者或小团队,L1 + L2(共享文件或Redis)足够覆盖90%的场景。L3的外部提供商(如Hindsight)等团队规模达到5人以上、记忆量超过10万条时再考虑引入。
🛠️ 实践任务(本节):画出你的个人/团队的共享记忆架构图,标注每层使用什么技术实现。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
16.2 知识共享机制
🎯 本节目标:掌握三种知识共享方式,能够根据场景选择并实现。
预计时长:1小时
16.2.1 方式一:运行时传递(L1)
原理:OpenClaw在向Hermes发送ACP请求时,在context字段中附带必要的记忆片段。
实现示例(OpenClaw侧,通过Agent工作流):
python
# 伪代码:在委托前检索共享记忆
memory_fragments = memory_search("用户偏好 代码风格")
context = {"preferences": memory_fragments}
acp_delegate(
task="重构auth.py",
context=context, # 传递给Hermes
callback_uri="..."
)
Hermes侧接收:ACP请求中的context会被注入到当前会话的系统提示词中,Agent可以直接遵循。
适用场景:
- 一次性指令(“这次用英文回答”)
- 当前会话的临时状态
优点:简单、实时、无额外存储开销。
缺点:不持久化,下次会话需要重新传递。
16.2.2 方式二:中间共享库(L2)
原理:OpenClaw和Hermes共同读写一个外部存储(文件、SQLite、Redis),通过约定格式交换记忆。
方案对比:
| 存储类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 共享文件(JSON/Markdown) | 简单、可读、易于版本控制 | 并发写入需加锁 | 小团队、个人 |
| SQLite | 支持并发、FTS检索 | 需要管理连接 | 中等规模 |
| Redis | 高性能、支持过期 | 额外依赖、内存成本 | 高频访问、临时记忆 |
实战:使用共享JSON文件
- 创建共享目录(例如
/mnt/shared_memory/),OpenClaw和Hermes都能访问。 - 定义记忆格式:json复制下载{ “user_preferences”: { “code_style”: “pep8”, “line_width”: 120 }, “project_context”: { “repo_path”: “/home/user/project”, “main_branch”: “main” }, “lessons_learned”: [ “使用`requests`库时要设置超时参数” ] }
- OpenClaw在收到用户偏好时,写入该文件。
- Hermes在执行任务前,读取该文件获取上下文。
并发控制:使用文件锁(fcntl.flock)或写入临时文件后原子替换。
16.2.3 方式三:外部记忆提供商(L3)
当共享记忆需要支持复杂查询(语义搜索)、自动实体抽取、多租户隔离时,可以考虑使用外部记忆提供商。
推荐方案:Hindsight(详见第9.7节),因为它支持本地PostgreSQL部署,无云依赖。
集成步骤:
- 在OpenClaw和Hermes中同时启用Hindsight Provider(各自配置,但连接到同一个PostgreSQL实例)。
- 配置共享schema/表,例如
shared_memories。 - 通过API写入/检索。
数据一致性:使用数据库事务保证原子性。
沈飞注:在我们的量化团队中,L2(Redis + SQLite混合)是最常用的。Redis存储高频访问的用户偏好和实时风控参数;SQLite存储因子元数据、回测历史等结构化数据。外部提供商(Hindsight)仅用于跨季度策略复盘时的语义搜索,按需付费。
🛠️ 实践任务(本节):
- 使用共享JSON文件实现一个简单的记忆存储:OpenClaw写入“用户偏好简洁回复”,Hermes读取并应用。
- (可选)安装Redis,实现L2共享记忆(Python脚本示例可在附录中找到)。
- (可选)配置Hindsight,让OpenClaw和Hermes都连接到同一个数据库。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
16.3 知识检索与复用
🎯 本节目标:掌握从共享记忆中高效检索知识的方法,并将检索结果用于增强Agent决策。
预计时长:0.5小时
16.3.1 检索策略
| 检索类型 | 方法 | 适用场景 |
|---|---|---|
| 精确匹配 | 关键词搜索、标签过滤 | 查找特定配置项(如“数据库端口”) |
| 语义检索 | 向量嵌入 + 相似度计算 | 查找“类似问题的解决方案” |
| 时间范围 | 基于时间戳过滤 | 查询“最近一周的新知识” |
16.3.2 在OpenClaw中集成共享记忆检索
OpenClaw可以通过自定义工具或MCP Server访问共享记忆库。推荐创建一个shared_memory_search工具,封装对共享存储的查询。
实现思路(伪代码):
python
# 注册为OpenClaw工具
def shared_memory_search(query: str, memory_type: str = "all"):
if memory_type == "preferences":
return redis.hgetall("user_prefs")
elif memory_type == "lessons":
return sqlite_query("SELECT * FROM lessons WHERE content MATCH ?", query)
# ... 其他
配置后,OpenClaw的Agent可以在需要时调用该工具。
16.3.3 检索结果的使用
检索到的知识可以用于:
- 增强用户提示:在转发给Hermes前,将相关记忆片段附在
context中。 - 直接回答:如果共享记忆中已经包含答案,OpenClaw可以直接回复,无需委托Hermes。
- 辅助决策:根据历史经验决定采用哪种协作模式(如“之前类似任务耗时较长,改用异步委托”)。
✏️ 即时自测:在什么情况下,OpenClaw应该直接从共享记忆中回答,而不委托给Hermes?
✏️ 自测答案:当用户问题是重复性的(例如“数据库端口是多少”),且共享记忆中已有确切答案时。
🛠️ 实践任务(本节):
- 向共享记忆中添加一条常见问题(FAQ),然后通过OpenClaw提问,观察是否能直接从记忆中找到答案。
- 尝试使用语义检索(可使用Python的
chromadb或faiss)实现简单的相似问题匹配。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
16.4 持续改进的工作流闭环
🎯 本节目标:设计一个自我优化的流程,让共享记忆随着使用越来越丰富、准确。
预计时长:0.5小时
16.4.1 闭环流程
执行任务 → 记录经验 → 共享记忆 → 学习优化 → 执行任务(重复)
关键环节:
- 执行任务:OpenClaw与Hermes协作完成任务。
- 记录经验:Hermes在任务结束后,判断哪些信息值得长期保留(复用第9章的记忆筛选机制),写入共享记忆。
- 共享记忆:新的记忆被持久化。
- 学习优化:OpenClaw定期分析共享记忆中的模式(如“最近一周用户频繁问数据库问题”),调整路由策略或预加载相关Skill。
16.4.2 实现持续改进的自动化
- 定期回顾:使用OpenClaw的Cron任务,每周日凌晨触发Hermes执行一次“记忆审查”,检查共享记忆中的陈旧条目并标记。
- 反馈循环:当用户明确纠正Agent的回答时(“不对,应该是5432端口”),OpenClaw应自动触发记忆更新,修正共享存储中的错误信息。
- 性能度量:记录每次从共享记忆中检索的命中率、响应时间等指标,用于优化检索策略。
龙马注:持续改进的“记录经验”环节最容易被人忽略。很多团队搭建了共享记忆,但从不主动记录新的经验,导致记忆库停留在项目第一周的状态。建议在每个重要任务完成后,养成习惯说一句:“Hermes,把这个解决方案记到共享记忆里。”或者配置自动化规则:当任务涉及5次以上工具调用且最终成功时,自动触发记录。
🛠️ 实践任务(本节):
- 设计一个简单的反馈机制:当用户说“不对,应该是XXX”时,OpenClaw自动修正共享记忆中的对应条目。
- 创建一个Cron任务,每周日输出一份共享记忆的统计报告(条目数、最常查询的类别等)。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
16.5 共享记忆冲突解决与版本控制
🎯 本节目标:掌握多Agent同时写入共享记忆时的冲突处理方法,学会使用版本控制追溯记忆变更。
预计时长:0.5小时
16.5.1 冲突场景
当OpenClaw和Hermes同时尝试修改同一条记忆(例如同时更新“用户偏好代码风格”)时,可能发生写写冲突。典型场景:
- 用户在飞书中告诉OpenClaw“喜欢用tab缩进”,同一分钟在Telegram中告诉Hermes“喜欢用空格缩进”。
- 两个Agent各自从不同渠道获得矛盾的指令。
16.5.2 冲突解决策略
| 策略 | 描述 | 适用场景 |
|---|---|---|
| 最后写入胜利(Last Write Wins) | 以最后时间戳为准 | 非关键配置、可覆盖 |
| 版本号+乐观锁 | 写入时检查版本号,冲突则重试 | 关键配置(如API密钥) |
| 人工仲裁 | 冲突时写入待处理队列,通知人工处理 | 高价值、不可自动合并 |
乐观锁实现示例(基于Redis):
python
# 写入时检查版本号
current_version = redis.get("memory:user_pref:code_style:version") or 0
if current_version == expected_version:
redis.set("memory:user_pref:code_style", "spaces")
redis.incr("memory:user_pref:code_style:version")
else:
# 冲突,重新读取并合并
resolve_conflict()
16.5.3 版本控制:Git作为共享记忆后端
将共享记忆目录初始化为Git仓库,可以获得完整的变更历史、分支管理和冲突合并能力。
步骤:
- 在共享目录中运行
git init。 - 每次Agent写入记忆后,自动执行
git add . && git commit -m "Update memory"。 - 定期拉取远程仓库(如果多机部署)。
优点:
- 完整的审计日志(谁在什么时候改了哪条记忆)
- 可以回滚到任意历史状态
- 支持分支隔离(例如“实验性偏好”分支)
缺点:不适合高频写入(每秒数百次),但对于记忆共享(每分钟几次)完全足够。
沈飞注:我们在量化系统中使用Git作为共享记忆的底层存储。每次风控参数变更都会产生一条commit,关联到对应的Jira工单号。审计时可以直接 git log -p查看哪次变更导致了策略回测结果变化,责任清晰。
🛠️ 实践任务(本节):
- 模拟一个冲突场景:两个终端同时修改同一个共享记忆条目,观察冲突并手动解决。
- 将共享记忆目录初始化为Git仓库,提交几次变更,查看
git log。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
16.6 团队级记忆与知识蒸馏:走向群体智能
🎯 本节目标:了解如何将个人Agent的经验提炼为团队共享的高阶知识,实现“1+1>2”的群体智能。
预计时长:0.5小时
16.6.1 从个体经验到团队共识
单个Agent(无论是OpenClaw还是Hermes)积累的记忆是“个体经验”。当团队中有多个Agent、多个用户时,需要将这些经验蒸馏为团队共识——经过验证、适用于所有人的最佳实践。
蒸馏流程:
- 收集:从各Agent的共享记忆中提取高频出现、高价值的条目。
- 评估:通过交叉验证(例如,用同一问题测试多个Agent的答案)判断可靠性。
- 泛化:将具体场景的经验抽象为通用规则(例如将“修复了utils.py的bug”泛化为“Python函数应包含类型注解”)。
- 固化:写入团队知识库,并标记为
verified。
16.6.2 社区工具:魔搭Ultron与记忆蒸发器
- 魔搭Ultron:阿里开源的多Agent群体智能框架,支持自动经验蒸馏和团队技能沉淀。可以集成到共享记忆架构中,定期运行蒸馏任务。
- 记忆蒸发器(Memory Evaporator) :一个轻量级脚本,分析共享记忆中的重复模式,生成高阶摘要。
集成思路:
- 使用Cron每日凌晨运行记忆蒸发器,扫描过去24小时的共享记忆变更。
- 提取其中被多次引用或反复验证的条目。
- 调用Hermes的
skill_manage工具,自动生成或更新团队级Skill。
16.6.3 群体技能复用案例
假设团队中有三个量化研究员,各自让Hermes生成了不同的因子挖掘Skill:
- 研究员A:
momentum_factor(动量因子) - 研究员B:
reversal_factor(反转因子) - 研究员C:
volatility_factor(波动率因子)
通过知识蒸馏,团队可以提炼出一个master_factor_selector Skill,它综合三个子Skills的建议,给出因子组合权重建议。
实现:将三个Skill的描述和适用市场条件写入共享记忆,然后让Hermes生成一个“因子融合”Skill(可用skill_manage工具)。
龙马注:群体智能是未来的方向,但目前工具链还不成熟。对于大多数团队,先从“共享记忆”+“定期人工回顾”做起,每个月开一次会,把Agent们学到的最佳实践经验整理成文档(或Skill),比直接追求自动化蒸馏更务实。
🛠️ 实践任务(本节):
- (概念验证)收集你自己在过去一周中让Hermes完成的5个任务,提炼出2个通用的“技巧”,手动写成Skill。
- (可选)研究魔搭Ultron的文档,尝试在测试环境中运行一次蒸馏任务。
💭 本节总结(不看书写3行):
📊 用时记录:计划____min → 实际____min → 偏差原因:________
第16章 参考资料与扩展阅读
- Mesh Memory Protocol —— 去中心化共享记忆设计 https://vectorize.io/articles/mesh-memory-hermes-openclaw
- Redis官方文档 —— 乐观锁实现 https://redis.io/docs/manual/transactions/
- Git作为共享记忆后端的最佳实践 https://www.volcengine.com/docs/87732/2277060
- 魔搭Ultron群体智能框架 https://modelscope.cn/ultron/README
- Hindsight多Agent共享记忆配置指南 https://vectorize.io/docs/hindsight-multi-agent
- 知识蒸馏在AI Agent中的应用 https://hermes-agent.nousresearch.com/blog/knowledge-distillation
第三篇综合任务(第16章完成后)
任务:完成以下所有检查项,并记录输出。
- 实现一种L2共享记忆方案(共享JSON文件或Redis),并验证OpenClaw和Hermes能同时读写。
- 通过OpenClaw向共享记忆中写入一条用户偏好,然后让Hermes执行一个相关任务,确认读取成功。
- 模拟一次记忆冲突,测试乐观锁或人工仲裁流程。
- 设计一个持续改进的闭环(如:用户纠正 → 自动更新共享记忆 → 下次回答正确)。
- (可选)使用Git记录共享记忆的变更历史,尝试回滚到之前的状态。
完成后,保存共享记忆配置和测试日志,命名为chapter16_shared_memory_setup.txt。
龙马的评审:
16.5节的冲突解决在生产环境中经常被忽视。我最开始只用“最后写入胜利”,结果有一次用户改了两次偏好,最后存下来的是错误的那条。后来加了版本号+乐观锁,并且把关键配置的变更通知飞书群人工确认,再也没出过问题。
对于Git作为共享记忆后端,建议在 .gitignore中排除高频变更的临时文件(如日志),否则commit历史会非常臃肿。另外,设置每小时自动git push到远程仓库,防止本地磁盘损坏导致记忆丢失。
沈飞的评审:
团队级知识蒸馏(16.6节)在我们内部还处于半自动阶段。每个季度,我们会让Hermes分析过去三个月的共享记忆,自动生成一份“经验报告”,然后研究员开会投票哪些可以固化为团队级Skill。这个过程虽然有人参与,但效率已经比全部手工整理高出很多。
另外,共享记忆中的敏感数据(如API密钥、交易账号)必须加密存储。我们使用 sops对共享JSON文件中的特定字段加密,只有OpenClaw和Hermes进程持有解密密钥。这一点在多人共享记忆时尤其重要。
下一章预告:第17章 多Agent系统性能调优与调试 —— 当你的Agent团队规模扩大、任务量增加时,如何定位瓶颈、优化通信、降低成本。这是第三篇的收官章节,也是从“能跑”到“跑得好”的进阶之路。























暂无评论内容