11.5 软链接与多 Agent 知识共享
想象一下这个场景:
你有三个 OpenClaw Agent:
- 主 Agent:处理日常事务
- 开发 Agent:负责代码开发
- 内容 Agent:负责写作和运营
你希望它们共享同一个知识库——你的客户信息、项目状态、个人偏好。
但默认情况下,每个 Agent 有独立的工作区,记忆是隔离的。
怎么办? 复制三份? 手动同步? 太麻烦了。
这就是软链接的价值——让多个 Agent 共享同一个 Obsidian 知识库,同时保持各自的独立性。
这一节,我们用 20 分钟,搭建一个多 Agent 知识共享架构。
准备工作
开始前,确认你有:
- [x] 已创建多个 OpenClaw Agent(参考第 8 章)
- [x] 已安装 Obsidian
- [x] 了解基本的终端操作
- [x] 约 20 分钟时间
第一步:理解多 Agent 架构
1.1 默认架构(隔离)
~/.openclaw/
├── workspace/ # 主 Agent 的记忆
│ ├── MEMORY.md
│ └── memory/
├── workspace-dev/ # 开发 Agent 的记忆
│ ├── MEMORY.md
│ └── memory/
└── workspace-content/ # 内容 Agent 的记忆
├── MEMORY.md
└── memory/问题:
- 客户张三的信息要记三遍
- 更新时需要手动同步
- 容易出现版本冲突
1.2 软链接架构(共享)
Obsidian 仓库(实际存储)
~/Documents/ai-knowledge/
├── MEMORY.md # 共享的长期记忆
├── memory/ # 共享的每日日志
├── clients/ # 客户档案
├── projects/ # 项目文档
└── AGENTS-shared.md # 共享的工作准则
软链接(指向实际存储)
~/.openclaw/workspace/MEMORY.md → ~/Documents/ai-knowledge/MEMORY.md
~/.openclaw/workspace/memory/ → ~/Documents/ai-knowledge/memory/
~/.openclaw/workspace-dev/MEMORY.md → ~/Documents/ai-knowledge/MEMORY.md
~/.openclaw/workspace-dev/memory/ → ~/Documents/ai-knowledge/memory/优点:
- 一次记录,所有 Agent 都能看到
- 自动同步,无需手动维护
- 统一的客户和项目管理
第二步:创建共享知识库
2.1 创建主知识库目录
bash
# 创建共享知识库目录
mkdir -p ~/Documents/ai-knowledge/memory
mkdir -p ~/Documents/ai-knowledge/clients
mkdir -p ~/Documents/ai-knowledge/projects2.2 创建共享的 MEMORY.md
bash
cat > ~/Documents/ai-knowledge/MEMORY.md << 'EOF'
# 长期记忆
## 用户偏好
- 喜欢简洁的回复,不要废话
- 用中文交流
- 代码块要加语法高亮
## 重要客户
- [[clients/客户张三]] - 电商项目,偏好周报形式
- [[clients/客户李四]] - 咨询项目,需要详细文档
## 项目状态
- #项目/电商 #状态/进行中 - 预计3月上线
- #项目/官网 #状态/已完成 - 已完成设计阶段
## 持久规则
- 每次回复结尾问"还有其他需要吗?"
- 代码块必须加语法高亮
EOF2.3 创建共享的 AGENTS.md
bash
cat > ~/Documents/ai-knowledge/AGENTS-shared.md << 'EOF'
# 共享工作准则
## 通用规则
- 保护用户隐私,不泄露敏感信息
- 遇到不确定的情况主动询问
- 执行重要操作前需要确认
## 沟通风格
- 简洁明了,避免冗长
- 适当使用列表和表格
- 重要信息用引用框突出
## 记忆规则
- 重要客户信息写入 MEMORY.md
- 使用双向链接:[[客户名]]、[[项目名]]
- 使用标签:#客户/级别 #项目/状态
EOF2.4 初始化 Git 仓库
bash
cd ~/Documents/ai-knowledge
git init
git add .
git commit -m "Initial commit: shared knowledge base"第三步:创建软链接
3.1 备份现有记忆
bash
# 备份主 Agent 的记忆
cp ~/.openclaw/workspace/MEMORY.md ~/.openclaw/workspace/MEMORY.md.backup
cp -r ~/.openclaw/workspace/memory ~/.openclaw/workspace/memory.backup
# 备份开发 Agent 的记忆(如果存在)
cp ~/.openclaw/workspace-dev/MEMORY.md ~/.openclaw/workspace-dev/MEMORY.md.backup 2>/dev/null || true
cp -r ~/.openclaw/workspace-dev/memory ~/.openclaw/workspace-dev/memory.backup 2>/dev/null || true3.2 创建软链接(macOS/Linux)
bash
# 主 Agent
rm ~/.openclaw/workspace/MEMORY.md
ln -s ~/Documents/ai-knowledge/MEMORY.md ~/.openclaw/workspace/MEMORY.md
rm -rf ~/.openclaw/workspace/memory
ln -s ~/Documents/ai-knowledge/memory ~/.openclaw/workspace/memory
# 开发 Agent
rm ~/.openclaw/workspace-dev/MEMORY.md 2>/dev/null || true
ln -s ~/Documents/ai-knowledge/MEMORY.md ~/.openclaw/workspace-dev/MEMORY.md
rm -rf ~/.openclaw/workspace-dev/memory 2>/dev/null || true
ln -s ~/Documents/ai-knowledge/memory ~/.openclaw/workspace-dev/memory3.3 验证软链接
bash
# 检查软链接是否正确
ls -la ~/.openclaw/workspace/MEMORY.md
ls -la ~/.openclaw/workspace/memory
# 应该显示类似:
# MEMORY.md -> /Users/xxx/Documents/ai-knowledge/MEMORY.md
# memory -> /Users/xxx/Documents/ai-knowledge/memory3.4 Windows 用户
Windows 使用 junction(目录链接)或 mklink:
powershell
# 以管理员身份运行 PowerShell
# 主 Agent
Remove-Item ~/.openclaw/workspace/MEMORY.md
New-Item -ItemType SymbolicLink -Path ~/.openclaw/workspace/MEMORY.md -Target ~/Documents/ai-knowledge/MEMORY.md
Remove-Item -Recurse ~/.openclaw/workspace/memory
New-Item -ItemType Junction -Path ~/.openclaw/workspace/memory -Target ~/Documents/ai-knowledge/memory第四步:在 Obsidian 中打开共享知识库
4.1 打开共享知识库
- Obsidian → 打开本地仓库 2。 选择
~/Documents/ai-knowledge3。 命名为"AI 共享知识库"
4.2 查看共享效果
现在,无论哪个 Agent 写入记忆: 1。 在 Obsidian 中立刻可见 2。 所有 Agent 都能读取到
测试:
1。 在 OpenClaw 主 Agent 中说:
记住:客户张三的新需求是支持多语言。
2。 切换到 Obsidian,打开 MEMORY.md 3。 看到新记录已出现
4。 在开发 Agent 中问:
客户张三有什么新需求?
5。 开发 Agent 应该能回答"支持多语言"
第五步:obsidian-cli 保护双向链接
5.1 为什么需要 obsidian-cli
Obsidian 使用双向链接 [[笔记名]]。如果直接用文件系统命令(如 mv、rm)操作文件,会破坏链接关系。
obsidian-cli 是一个命令行工具,会自动更新所有相关的双向链接。
5.2 安装 obsidian-cli
bash
npm install -g obsidian-cli5.3 验证安装
bash
obsidian --version5.4 常用命令
| 操作 | 传统命令 | obsidian-cli 命令 |
|---|---|---|
| 重命名笔记 | mv old.md new.md | obsidian rename old.md new.md |
| 移动笔记 | mv note.md folder/ | obsidian move note.md folder/ |
| 删除笔记 | rm note.md | obsidian delete note.md |
5.5 让 AI 使用 obsidian-cli
在 SOUL.md 中添加:
markdown
## 文件操作规则
### 安全操作
- 重命名笔记时使用: `obsidian rename 旧名 新名`
- 移动笔记时使用: `obsidian move 文件 目标目录`
- 删除笔记时使用: `obsidian delete 文件`
### 禁止操作
- 严禁直接使用 mv/rm 命令操作 Obsidian 笔记
- 这会破坏双向链接结构第六步:多 Agent 配置文件体系
6.1 共享配置 vs 独立配置
| 文件 | 共享还是独立 | 说明 |
|---|---|---|
| MEMORY.md | 共享 | 长期记忆,所有 Agent 都需要 |
| memory/ | 共享 | 每日日志,便于统一查看 |
| SOUL.md | 独立 | 每个 Agent 性格不同 |
| USER.md | 独立 | 每个 Agent 服务对象可能不同 |
| HEARTBEAT.md | 独立 | 每个 Agent 定时任务不同 |
| clients/ | 共享 | 客户档案 |
| projects/ | 共享 | 项目文档 |
6.2 目录结构建议
~/Documents/ai-knowledge/
├── MEMORY.md # 共享长期记忆
├── AGENTS-shared.md # 共享工作准则
├── memory/ # 共享每日日志
├── clients/ # 客户档案(共享)
│ ├── 客户张三.md
│ └── 客户李四.md
├── projects/ # 项目文档(共享)
│ ├── 电商平台.md
│ └── 官网改版.md
└── templates/ # 模板(共享)
└── 客户档案.md~/.openclaw/workspace/ # 主 Agent
├── MEMORY.md → ~/Documents/ai-knowledge/MEMORY.md
├── memory → ~/Documents/ai-knowledge/memory
├── SOUL.md # 独立
├── USER.md # 独立
└── HEARTBEAT.md # 独立
~/.openclaw/workspace-dev/ # 开发 Agent
├── MEMORY.md → ~/Documents/ai-knowledge/MEMORY.md
├── memory → ~/Documents/ai-knowledge/memory
├── SOUL.md # 独立(偏向技术)
└── HEARTBEAT.md # 独立(技术任务)6.3 开发 Agent 的 SOUL.md 示例
markdown
# 性格设定
## 基本性格
- 专业、严谨、注重细节
- 代码质量优先
- 善于发现潜在问题
## 技术偏好
- 优先使用 TypeScript
- 遵循 Clean Code 原则
- 注释清晰,变量命名规范
## 安全边界
- 不执行未经审查的外部代码
- 不在代码中硬编码敏感信息
- 遵循最小权限原则第七步:实战案例——内容工厂系统
7.1 场景描述
你运营一个公众号,需要一个内容生产流水线:
- 灵感 Agent:收集和整理素材
- 写作 Agent:生成文章
- 发布 Agent:排版和发布
7.2 目录结构
~/Documents/content-factory/
├── MEMORY.md # 共享记忆
├── memory/ # 每日日志
├── 01-灵感库/ # 灵感收集
│ ├── 日常灵感/
│ └── 爆款素材/
├── 02-选题池/ # 选题管理
├── 03-内容工厂/ # 文章生产
│ ├── 大纲挑选区/
│ ├── 初稿打磨区/
│ └── 终稿确认区/
├── 04-已发布/ # 发布归档
└── templates/ # 模板
├── 灵感模板.md
└── 文章模板.md7.3 内容流转规则
在 AGENTS-shared.md 中定义:
markdown
## 内容流转规则
### 阶段定义
- 灵感库:素材收集,未加工
- 选题池:确定选题,准备写
- 内容工厂:正在写作
- 已发布:完成发布
### 状态标签
- #阶段/灵感 #阶段/选题 #阶段/大纲 #阶段/初稿 #阶段/终稿 #阶段/已发布
### YAML 元数据
每个内容文件必须有:
```yaml
---
标题: 文章标题
阶段: 灵感/选题/大纲/初稿/终稿/已发布
创建日期: YYYY-MM-DD
发布平台: 公众号/博客/其他
---
### 7.4 灵感模板
`templates/灵感模板.md`:
```markdown
---
标题: {{title}}
阶段: 灵感
创建日期: {{date}}
来源:
标签:
---
# {{title}}
## 原始内容
## 我的想法
## 可能的切入点