OpenClaw 与 Hermes 如何共享长期记忆?一套简单稳定的 VPS 实践方案

在同一台 VPS 上运行多个 AI 助手时,一个常见问题是:它们各自有自己的记忆系统,互相不知道对方在做什么。本文介绍一套基于共享目录的轻量级方案,让 OpenClaw 和 Hermes 共享长期记忆。

背景

  • OpenClaw:AI 运维助手,负责服务器管理、网站运营、自动化任务
  • Hermes:另一个 AI 助手,能力互补
  • 两者运行在同一台 VPS 上,都接入 Telegram 群
  • 需要共享:服务器资料、域名资产、项目进度、运营规则

核心设计原则

  1. 简单:不引入数据库、消息队列,只用文件系统
  2. 安全:敏感内容(Key/Token/Secret)单独存放
  3. 防冲突:每个助手只写自己的 inbox,不直接改共享 memory
  4. 可回滚:每次合并前自动备份

目录结构

/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 助手协作环境,可以参考这个思路。重点是:简单、安全、可回滚。

相关链接:

相关链接


已发布

分类

来自

标签: