在同一台 VPS 上运行多个 AI 助手时,一个常见问题是:它们各自有自己的记忆系统,互相不知道对方在做什么。本文介绍一套基于共享目录的轻量级方案,让 OpenClaw 和 Hermes 共享长期记忆。
背景
- OpenClaw:AI 运维助手,负责服务器管理、网站运营、自动化任务
- Hermes:另一个 AI 助手,能力互补
- 两者运行在同一台 VPS 上,都接入 Telegram 群
- 需要共享:服务器资料、域名资产、项目进度、运营规则
核心设计原则
- 简单:不引入数据库、消息队列,只用文件系统
- 安全:敏感内容(Key/Token/Secret)单独存放
- 防冲突:每个助手只写自己的 inbox,不直接改共享 memory
- 可回滚:每次合并前自动备份
目录结构
/root/ai-shared/
├── memory/ # 长期共享资料(Markdown)
│ ├── user.md # 用户资料
│ ├── servers.md # 服务器资产
│ ├── domains.md # 域名资产
│ ├── projects.md # 项目资料
│ ├── rules.md # 通用规则
│ └── group-rules.md # 群聊协作规则
├── secrets/ # 敏感配置(权限 700)
├── inbox/
│ ├── openclaw/ # OpenClaw 新增暂存
│ └── hermes/ # Hermes 新增暂存
├── rejected/ # 命中敏感词的内容
├── locks/ # flock 文件锁
├── logs/ # 合并日志
├── backups/ # 修改前自动备份
└── bin/
└── merge.sh # 合并脚本
Step 1:创建目录
mkdir -p /root/ai-shared/{memory,secrets/{telegram,wechat,gsc,ssh},inbox/{openclaw,hermes},rejected,locks,logs,backups,bin}
chmod -R 700 /root/ai-shared/secrets
Step 2:编写 merge.sh
这是整个方案的核心脚本,负责把 inbox 内容合并到 memory。
#!/bin/bash
set -euo pipefail
BOT="${1:?用法: merge.sh <openclaw|hermes>}"
BASE="/root/ai-shared"
INBOX="$BASE/inbox/$BOT"
MEMORY="$BASE/memory"
BACKUP="$BASE/backups"
REJECTED="$BASE/rejected"
LOCKFILE="$BASE/locks/merge.lock"
LOGFILE="$BASE/logs/merge.log"
# 敏感关键词
SENSITIVE_KEYWORDS=(
'token' 'secret' 'password' 'api_key'
'cookie' 'private_key' 'access_token'
'refresh_token' 'BEGIN OPENSSH' 'BEGIN RSA'
)
mkdir -p "$MEMORY" "$BACKUP" "$REJECTED" "$INBOX/.done"
# flock 文件锁
exec 200>"$LOCKFILE"
if ! flock -n 200; then
echo "获取锁失败" >> "$LOGFILE"
exit 1
fi
for file in "$INBOX"/*.md; do
[ -f "$file" ] || continue
filename=$(basename "$file")
target="$MEMORY/$filename"
# 敏感扫描
hit=false
for kw in "${SENSITIVE_KEYWORDS[@]}"; do
grep -qi "$kw" "$file" && hit=true && break
done
if $hit; then
mv "$file" "$REJECTED/${filename}.$(date +%Y%m%d_%H%M%S).rejected"
echo "[REJECTED] $filename" >> "$LOGFILE"
continue
fi
# 备份 + 追加
[ -f "$target" ] && cp "$target" "$BACKUP/${filename}.$(date +%Y%m%d_%H%M%S).bak"
echo -e "
---
> 来源: $BOT | $(date '+%Y-%m-%d %H:%M:%S')
" >> "$target"
cat "$file" >> "$target"
mv "$file" "$INBOX/.done/"
echo "[OK] $filename → $target" >> "$LOGFILE"
done
flock -u 200
Step 3:设置 cron 定时合并
# 每 5 分钟自动合并两个助手的 inbox
*/5 * * * * /root/ai-shared/bin/merge.sh openclaw >> /root/ai-shared/logs/cron-merge.log 2>&1
*/5 * * * * /root/ai-shared/bin/merge.sh hermes >> /root/ai-shared/logs/cron-merge.log 2>&1
Step 4:同步已有资料
从 OpenClaw 和 Hermes 的原始记忆中提取安全的 Markdown 文件,复制到 memory/:
- USER.md → memory/user.md
- MEMORY.md → memory/openclaw-memory.md
- docs/servers.md → memory/servers.md
- docs/domains.md → memory/domains.md
注意:只同步 Markdown 文本文件,不同步 .json、.env、.key、.pem 等敏感文件。
Step 5:验证测试
# OpenClaw 写入测试
echo "OpenClaw 测试内容" > /root/ai-shared/inbox/openclaw/projects.md
# Hermes 写入测试
echo "Hermes 测试内容" > /root/ai-shared/inbox/hermes/projects.md
# 手动执行合并
bash /root/ai-shared/bin/merge.sh openclaw
bash /root/ai-shared/bin/merge.sh hermes
# 检查结果
cat /root/ai-shared/memory/projects.md
两条内容都在 memory/projects.md 中,带来源标记和时间戳。
安全设计
- secrets/ 目录权限 700,只有 root 可读
- merge.sh 内置敏感关键词扫描,命中则不合并进 memory,移到 rejected
- 群聊禁止明文输出 Key/Token/Secret
- 每个助手只写自己的 inbox,不直接改 memory
- 合并前自动备份,随时可回滚
这个方案的优缺点
优点:
- 简单,不需要额外依赖
- 稳定,文件系统是最可靠的存储
- 安全,敏感内容自动拦截
- 可回滚,每次操作都有备份
局限:
- 只支持追加,不能更新已有内容
- 文件会随时间增长变大
- 没有冲突解决机制(但 inbox 机制避免了冲突)
适用场景
- 同一台 VPS 上运行多个 AI 助手
- 需要共享服务器资料、项目进度、运营规则
- 不想引入复杂基础设施
- 追求简单、稳定、可维护
总结
这套方案的核心思想是:共享目录 + inbox 机制 + 定时合并。没有数据库,没有消息队列,就是一个 shell 脚本加一个 cron 任务。对于同一台 VPS 上的多 AI 助手协作来说,够用了。
如果你也在搭建类似的 AI 助手协作环境,可以参考这个思路。重点是:简单、安全、可回滚。
相关链接: