第16章 共享记忆与持续改进

第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 共享记忆实战:冲突解决机制 + 团队级知识蒸馏

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文件

  1. 创建共享目录(例如/mnt/shared_memory/),OpenClaw和Hermes都能访问。
  2. 定义记忆格式:json复制下载{ “user_preferences”: { “code_style”: “pep8”, “line_width”: 120 }, “project_context”: { “repo_path”: “/home/user/project”, “main_branch”: “main” }, “lessons_learned”: [ “使用`requests`库时要设置超时参数” ] }
  3. OpenClaw在收到用户偏好时,写入该文件。
  4. Hermes在执行任务前,读取该文件获取上下文。

并发控制:使用文件锁(fcntl.flock)或写入临时文件后原子替换。

16.2.3 方式三:外部记忆提供商(L3)

当共享记忆需要支持复杂查询(语义搜索)、自动实体抽取、多租户隔离时,可以考虑使用外部记忆提供商。

推荐方案:Hindsight(详见第9.7节),因为它支持本地PostgreSQL部署,无云依赖。

集成步骤

  1. 在OpenClaw和Hermes中同时启用Hindsight Provider(各自配置,但连接到同一个PostgreSQL实例)。
  2. 配置共享schema/表,例如shared_memories
  3. 通过API写入/检索。

数据一致性:使用数据库事务保证原子性。

沈飞注:在我们的量化团队中,L2(Redis + SQLite混合)是最常用的。Redis存储高频访问的用户偏好和实时风控参数;SQLite存储因子元数据、回测历史等结构化数据。外部提供商(Hindsight)仅用于跨季度策略复盘时的语义搜索,按需付费。

🛠️ 实践任务(本节)

  1. 使用共享JSON文件实现一个简单的记忆存储:OpenClaw写入“用户偏好简洁回复”,Hermes读取并应用。
  2. (可选)安装Redis,实现L2共享记忆(Python脚本示例可在附录中找到)。
  3. (可选)配置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 检索结果的使用

检索到的知识可以用于:

  1. 增强用户提示:在转发给Hermes前,将相关记忆片段附在context中。
  2. 直接回答:如果共享记忆中已经包含答案,OpenClaw可以直接回复,无需委托Hermes。
  3. 辅助决策:根据历史经验决定采用哪种协作模式(如“之前类似任务耗时较长,改用异步委托”)。

✏️ 即时自测:在什么情况下,OpenClaw应该直接从共享记忆中回答,而不委托给Hermes?

✏️ 自测答案:当用户问题是重复性的(例如“数据库端口是多少”),且共享记忆中已有确切答案时。

🛠️ 实践任务(本节)

  1. 向共享记忆中添加一条常见问题(FAQ),然后通过OpenClaw提问,观察是否能直接从记忆中找到答案。
  2. 尝试使用语义检索(可使用Python的chromadbfaiss)实现简单的相似问题匹配。

💭 本节总结(不看书写3行):

    📊 用时记录:计划____min → 实际____min → 偏差原因:________

    16.4 持续改进的工作流闭环

    🎯 本节目标:设计一个自我优化的流程,让共享记忆随着使用越来越丰富、准确。

    预计时长:0.5小时

    16.4.1 闭环流程

    执行任务 → 记录经验 → 共享记忆 → 学习优化 → 执行任务(重复)

    关键环节

    1. 执行任务:OpenClaw与Hermes协作完成任务。
    2. 记录经验:Hermes在任务结束后,判断哪些信息值得长期保留(复用第9章的记忆筛选机制),写入共享记忆。
    3. 共享记忆:新的记忆被持久化。
    4. 学习优化:OpenClaw定期分析共享记忆中的模式(如“最近一周用户频繁问数据库问题”),调整路由策略或预加载相关Skill。

    16.4.2 实现持续改进的自动化

    • 定期回顾:使用OpenClaw的Cron任务,每周日凌晨触发Hermes执行一次“记忆审查”,检查共享记忆中的陈旧条目并标记。
    • 反馈循环:当用户明确纠正Agent的回答时(“不对,应该是5432端口”),OpenClaw应自动触发记忆更新,修正共享存储中的错误信息。
    • 性能度量:记录每次从共享记忆中检索的命中率、响应时间等指标,用于优化检索策略。

    龙马注:持续改进的“记录经验”环节最容易被人忽略。很多团队搭建了共享记忆,但从不主动记录新的经验,导致记忆库停留在项目第一周的状态。建议在每个重要任务完成后,养成习惯说一句:“Hermes,把这个解决方案记到共享记忆里。”或者配置自动化规则:当任务涉及5次以上工具调用且最终成功时,自动触发记录。

    🛠️ 实践任务(本节)

    1. 设计一个简单的反馈机制:当用户说“不对,应该是XXX”时,OpenClaw自动修正共享记忆中的对应条目。
    2. 创建一个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仓库,可以获得完整的变更历史、分支管理和冲突合并能力。

      步骤

      1. 在共享目录中运行git init
      2. 每次Agent写入记忆后,自动执行git add . && git commit -m "Update memory"
      3. 定期拉取远程仓库(如果多机部署)。

      优点

      • 完整的审计日志(谁在什么时候改了哪条记忆)
      • 可以回滚到任意历史状态
      • 支持分支隔离(例如“实验性偏好”分支)

      缺点:不适合高频写入(每秒数百次),但对于记忆共享(每分钟几次)完全足够。

      沈飞注:我们在量化系统中使用Git作为共享记忆的底层存储。每次风控参数变更都会产生一条commit,关联到对应的Jira工单号。审计时可以直接git log -p查看哪次变更导致了策略回测结果变化,责任清晰。

      🛠️ 实践任务(本节)

      1. 模拟一个冲突场景:两个终端同时修改同一个共享记忆条目,观察冲突并手动解决。
      2. 将共享记忆目录初始化为Git仓库,提交几次变更,查看git log

      💭 本节总结(不看书写3行):

      📊 用时记录:计划____min → 实际____min → 偏差原因:________

      16.6 团队级记忆与知识蒸馏:走向群体智能

      🎯 本节目标:了解如何将个人Agent的经验提炼为团队共享的高阶知识,实现“1+1>2”的群体智能。

      预计时长:0.5小时

      16.6.1 从个体经验到团队共识

      单个Agent(无论是OpenClaw还是Hermes)积累的记忆是“个体经验”。当团队中有多个Agent、多个用户时,需要将这些经验蒸馏为团队共识——经过验证、适用于所有人的最佳实践。

      蒸馏流程

      1. 收集:从各Agent的共享记忆中提取高频出现、高价值的条目。
      2. 评估:通过交叉验证(例如,用同一问题测试多个Agent的答案)判断可靠性。
      3. 泛化:将具体场景的经验抽象为通用规则(例如将“修复了utils.py的bug”泛化为“Python函数应包含类型注解”)。
      4. 固化:写入团队知识库,并标记为verified

      16.6.2 社区工具:魔搭Ultron与记忆蒸发器

      • 魔搭Ultron:阿里开源的多Agent群体智能框架,支持自动经验蒸馏和团队技能沉淀。可以集成到共享记忆架构中,定期运行蒸馏任务。
      • 记忆蒸发器(Memory Evaporator) :一个轻量级脚本,分析共享记忆中的重复模式,生成高阶摘要。

      集成思路

      1. 使用Cron每日凌晨运行记忆蒸发器,扫描过去24小时的共享记忆变更。
      2. 提取其中被多次引用或反复验证的条目。
      3. 调用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),比直接追求自动化蒸馏更务实。

      🛠️ 实践任务(本节)

      1. (概念验证)收集你自己在过去一周中让Hermes完成的5个任务,提炼出2个通用的“技巧”,手动写成Skill。
      2. (可选)研究魔搭Ultron的文档,尝试在测试环境中运行一次蒸馏任务。

      💭 本节总结(不看书写3行):

        📊 用时记录:计划____min → 实际____min → 偏差原因:________

        第16章 参考资料与扩展阅读

        1. Mesh Memory Protocol —— 去中心化共享记忆设计 https://vectorize.io/articles/mesh-memory-hermes-openclaw
        2. Redis官方文档 —— 乐观锁实现 https://redis.io/docs/manual/transactions/
        3. Git作为共享记忆后端的最佳实践 https://www.volcengine.com/docs/87732/2277060
        4. 魔搭Ultron群体智能框架 https://modelscope.cn/ultron/README
        5. Hindsight多Agent共享记忆配置指南 https://vectorize.io/docs/hindsight-multi-agent
        6. 知识蒸馏在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团队规模扩大、任务量增加时,如何定位瓶颈、优化通信、降低成本。这是第三篇的收官章节,也是从“能跑”到“跑得好”的进阶之路。

        © 版权声明
        THE END
        喜欢就支持一下吧
        点赞12 分享
        评论 抢沙发

        请登录后发表评论

          暂无评论内容