
同时用 OpenClaw 和 Hermes 两个 AI 助手,最大的问题是什么?它们各记各的,互相不知道对方学了什么。于是我搭了一套共享记忆系统,让两个 AI 读同一份资料、写同一个文件,还不会互相覆盖。
📑 目录
1️⃣ 为什么需要共享记忆
2️⃣ 整体架构设计
3️⃣ 目录结构
4️⃣ merge.sh 核心脚本
5️⃣ Cron 自动合并
6️⃣ 敏感内容过滤
7️⃣ 验证结果
8️⃣ 踩坑总结
9️⃣ 你可以直接抄的方案
01
为什么需要共享记忆?
我在同一台 VPS 上跑着两个 AI 助手:
🦞
OpenClaw
大龙虾 / 猪玉
🐴
Hermes
爱马仕 / 卡妮妮
两个助手都接入同一个 工作群,各自有独立的会话记忆。但问题是:服务器信息、域名列表、项目资料这些长期数据,不能各存一份。否则更新一个忘改另一个,很快就乱了。
02
整体架构设计
💡 核心思路:三个关键词
inbox 中转 → 各写各的,互不干扰
merge 合并 → 只追加,不覆盖
flock 文件锁 → 防并发写乱
两个 AI 不直接改共享文件,而是各自把新内容写到自己的 inbox 目录。一个定时脚本每 5 分钟跑一次,用 flock 加锁后把 inbox 里的内容追加到共享 MEMORY.md。
03
目录结构
# /root/ai-shared/ 目录结构
ai-shared/
├── memory/ # 合并后的共享记忆
│ └── MEMORY.md
├── inbox/
│ ├── openclaw/ # OpenClaw 只写这里
│ └── hermes/ # Hermes 只写这里
├── secrets/ # 敏感配置(权限 700)
├── rejected/ # 被过滤的敏感内容
├── backups/ # 自动备份
├── logs/ # 合并日志
└── bin/
└── merge.sh # 核心合并脚本
⚠️ 关键规则
▪ OpenClaw 只写 inbox/openclaw/,不碰 hermes/
▪ Hermes 只写 inbox/hermes/,不碰 openclaw/
▪ secrets 权限 700,密钥不进普通 memory
▪ 合并只追加,不覆盖
04
merge.sh 核心脚本
#!/bin/bash
# flock 防并发
exec 200>locks/.merge.lock
flock -n 200 || exit 1
# 合并前备份
cp memory/MEMORY.md backups/MEMORY.md.$(date +%s)
# 敏感词扫描
SENSITIVE="(token|api.?key|secret|password)"
# 只追加,不覆盖
for file in inbox/$1/*.md; do
if grep -qiE "$SENSITIVE" "$file"; then
mv "$file" rejected/
else
cat "$file" >> memory/MEMORY.md
mv "$file" inbox/$1/.done/
fi
done
05
Cron 自动合并
⏰ 每 5 分钟自动执行一次
*/5 * * * * /root/ai-shared/bin/merge.sh openclaw
*/5 * * * * /root/ai-shared/bin/merge.sh hermes
写入 inbox → 等 5 分钟 → 自动合并到 memory → 完成
06
敏感内容过滤
merge.sh 会自动扫描关键词:token、api key、secret、password、cookie、private key...
命中的文件不会进入 MEMORY.md,而是移到 rejected/ 目录,并记录日志。
07
验证结果
✅ OpenClaw 写入测试 → cron 合并 → Hermes 读到
✅ Hermes 写入测试 → cron 合并 → OpenClaw 读到
✅ 两条记录都在同一文件,有来源标记和时间戳
✅ 敏感词文件被正确拦截到 rejected/
✅ flock 无并发冲突
08
踩坑总结
⚠️ 坑1:直接用 > 覆盖会丢数据 → 必须用 >> 追加
⚠️ 坑2:两个脚本同时写会交叉 → 必须 flock
⚠️ 坑3:规则文档提到 token 字段名也会被过滤 → 后续优化关键词匹配
⚠️ 坑4:Bot 之间看不到对方消息 → 文件共享是唯一可靠方案
📌 方案总结
inbox 中转 + flock 锁 + 只追加 + 敏感过滤
= 简单、稳定、不乱
不需要数据库,不需要消息队列,不需要 Redis。
一个目录 + 一个脚本 + 一条 cron,搞定。
—— END ——
👆 觉得有用?点个「关注」让更多人看到
有问题欢迎留言讨论 💬
夜雨聆风