0%

企业知识库构建实战:Obsidian + Git + Blog 工作流

企业知识库构建实战:Obsidian + Git + Blog 工作流

写在前面:这篇文章源于 2026-03 月的真实项目需求。我们在部署 OpenClaw3 到 K8s 集群时,遇到了知识管理的核心问题:如何让 AI Agent 在会话重启后保持上下文连续性?如何隔离个人记忆和工作记忆?如何实现知识的版本控制和协作共享?本文是我作为项目架构师的完整设计思路和实战记录。


一、背景:为什么需要企业知识库?

1.1 真实场景

场景 1:AI Agent 会话中断后的上下文丢失

1
2
3
4
2026-03-10 21:00 - 用户 John 开始部署 OpenClaw 到 K8s
2026-03-10 21:30 - 网络中断,会话结束
2026-03-10 22:00 - John 重新连接
❌ Agent: "你好,有什么可以帮你?" ← 完全不记得之前的事

场景 2:多用户记忆混淆

1
2
3
用户 A: "我的 K8s 集群部署在 10.0.0.81"
用户 B: "帮我看看我的集群配置"
❌ Agent 把用户 A 的配置给了用户 B ← 记忆泄露

场景 3:知识无法沉淀

1
2
3
项目结束后,所有经验都在聊天记录里
新员工入职,需要重新踩一遍所有的坑
❌ 知识无法复用,团队效率低下

1.2 核心需求

需求 说明 优先级
持久化存储 会话重启后记忆不丢失 P0
安全隔离 不同用户/项目的记忆隔离 P0
版本控制 知识可追溯、可回滚 P0
协作共享 团队知识可共享 P1
易于检索 快速找到所需知识 P1
自动化同步 减少手动操作 P2

1.3 技术选型

方案 优点 缺点 最终选择
数据库存储 结构化、查询快 不易读、难协作
Notion/语雀 易用、协作好 数据在云端、API 受限
Obsidian + Git 本地优先、版本控制、易读 需要 Git 基础

最终选择Obsidian + Git + Blog

理由

  1. ✅ 数据本地存储(安全、可控)
  2. ✅ Git 版本控制(可追溯、可回滚)
  3. ✅ Markdown 格式(易读、易写)
  4. ✅ 支持双向链接(知识关联)
  5. ✅ 可发布为博客(知识共享)

二、架构设计:三层记忆结构

2.1 整体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────────────────────────────────────────────┐
│ 企业知识库架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 全局记忆层 │ │ 项目记忆层 │ │
│ │ MEMORY.md │ │ projects/ │ │
│ │ SOUL.md │ │ └─ P1_XXX/ │ │
│ │ AGENTS.md │ │ └─ memory│ │
│ └──────────────┘ └──────────────┘ │
│ ↓ ↓ │
│ ┌──────────────────────────────────────────┐ │
│ │ Git 版本控制 + 同步机制 │ │
│ └──────────────────────────────────────────┘ │
│ ↓ ↓ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 每日记忆层 │ │ 技能记忆层 │ │
│ │ memory/ │ │ skills/ │ │
│ │ YYYY-MM-DD │ │ └─ XXX/ │ │
│ │ │ │ └─ SKILL │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘

2.2 三层记忆详解

第一层:全局记忆(Global Memory)

位置~/workspace/

文件

  • SOUL.md - Agent 身份定义
  • AGENTS.md - 工作规范
  • TOOLS.md - 工具配置
  • USER.md - 用户信息
  • MEMORY.md - 长期记忆
  • HEARTBEAT.md - 心跳任务

特点

  • ✅ 所有会话共享
  • ✅ 变更频率低
  • ✅ 需要谨慎修改

示例

1
2
3
4
5
6
7
8
9
10
# MEMORY.md

## John
- John 的爱犬叫"金刚",体力很好(曾一起跑过 15 公里)。
- John 偏好在 Feishu 直接收到结果,不希望每次去服务器查看。

## Critical Lessons
- **文件删除必须确认** - 安全红线
- **关键事项必须先请示** - 工作规范
- **已具备的技能直接使用** - 不要重复造轮子

第二层:项目记忆(Project Memory)

位置~/workspace/obsidian-sync/projects/{项目}/memory.md

文件

  • memory.md - 项目特定上下文
  • skills/ - 项目专用技能
  • docs/ - 项目文档

特点

  • ✅ 项目间隔离
  • ✅ 按需加载
  • ✅ 支持团队协作

示例

1
2
3
4
5
6
7
8
9
10
11
# P4_Blog memory.md

## 发布计划
- 频率:3 篇/周(周二/四/六)
- 发布时间:08:00 自动发布
- 最后一篇:2026-03-11

## 待办文章
- [ ] TrailSync 项目实战
- [ ] Agent 工具调用最佳实践
- [ ] RAG 架构设计

第三层:每日记忆(Daily Memory)

位置~/workspace/memory/YYYY-MM-DD.md

文件

  • 每日自动创建
  • 记录当天重要事件
  • 定期归档到 MEMORY.md

特点

  • ✅ 按天隔离
  • ✅ 自动清理(30 天)
  • ✅ 防止 MEMORY.md 过大

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 2026-03-11

## 重要事件
- 09:00 创建 TrailSync 项目(H5 位置共享)
- 10:00 完成前端 + 后端 + 部署配置(1,548 行代码)
- 11:00 部署到 K8s(镜像拉取失败,需 GitLab 仓库)
- 12:00 为 9 篇文章添加 OpenClaw 关键词
- 12:30 修正 2 篇文章发布日期(避免未来时间)

## 待办
- [ ] 创建 GitLab 仓库 trailsync-backend
- [ ] 配置 CI/CD 自动构建镜像
- [ ] 合并 MR #53 和 #54

2.3 记忆加载策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Agent 启动时的记忆加载流程

def load_memory(session_context):
"""加载记忆"""

# 1. 加载全局记忆(必须)
global_memory = load_global_memory()

# 2. 加载项目记忆(如果有)
if session_context.get('project'):
project_memory = load_project_memory(
session_context['project']
)
else:
project_memory = {}

# 3. 加载每日记忆(今天 + 昨天)
daily_memory = load_daily_memory(
days=2 # 今天 + 昨天
)

# 4. 合并记忆(优先级:每日 > 项目 > 全局)
merged = {
**global_memory,
**project_memory,
**daily_memory
}

return merged

三、Git 同步机制

3.1 仓库结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
obsidian-sync/  ← Git 仓库根目录
├── .git/
├── memory/ # 全局记忆(双向同步)
│ ├── MEMORY.md
│ ├── SOUL.md
│ ├── AGENTS.md
│ └── YYYY-MM-DD.md
├── projects/ # 项目记忆(双向同步)
│ ├── P3_OpenClaw_Extension/
│ ├── P4_Blog/
│ └── P7_TrailSync/
├── 01_Incoming/ # 输入层(单向:Obsidian→OpenClaw)
├── 02_Docs/ # 文档层(双向同步)
├── 03_Assets/ # 资产层(双向同步)
└── 04_Generated/ # 生成层(单向:OpenClaw→Obsidian)

3.2 同步规则

目录 同步方向 说明
memory/ 双向 Obsidian ↔ OpenClaw
projects/ 双向 项目间共享
01_Incoming/ 单向 Obsidian → OpenClaw
02_Docs/ 双向 文档协作
03_Assets/ 双向 图片/附件
04_Generated/ 单向 OpenClaw → Obsidian

3.3 Git 工作流

1
2
3
4
5
6
7
8
9
10
11
12
13
# OpenClaw 启动时
git pull origin main # 拉取最新变更

# 文件修改后
git add .
git commit -m "feat: 更新内容"
git push origin main # 推送到 GitLab

# 冲突处理
git pull --rebase
# 解决冲突
git add .
git rebase --continue

3.4 自动化同步脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# sync-memory.sh - 记忆同步脚本

WORKSPACE=~/workspace
REPO_URL=http://192.168.100.191:9910/crystalcreator/obsidian-sync.git

# 1. 拉取最新代码
cd $WORKSPACE
git pull origin main

# 2. 检查变更
git status

# 3. 提交本地变更
if [[ $(git status --porcelain) ]]; then
git add .
git commit -m "auto: 同步记忆 $(date +%Y-%m-%d_%H:%M:%S)"
git push origin main
fi

# 4. 清理旧文件(30 天前的每日记忆)
find memory/ -name "*.md" -mtime +30 -delete

四、安全隔离策略

4.1 用户隔离

问题:多用户共享 OpenClaw 时,记忆不能混淆

方案

1
2
3
4
5
6
7
8
9
10
memory/
├── users/
│ ├── user_a/
│ │ ├── MEMORY.md
│ │ └── daily/
│ └── user_b/
│ ├── MEMORY.md
│ └── daily/
└── shared/
└── projects/

实现

1
2
3
4
5
6
7
8
9
10
11
def get_user_memory(user_id):
"""获取用户记忆"""
user_path = f"memory/users/{user_id}/MEMORY.md"

if not os.path.exists(user_path):
# 创建用户记忆目录
os.makedirs(os.path.dirname(user_path))
with open(user_path, 'w') as f:
f.write(f"# User Memory: {user_id}\n")

return load_markdown(user_path)

4.2 项目隔离

问题:不同项目的配置不能混用

方案

1
2
3
4
5
6
7
8
9
10
11
# 项目配置文件
projects:
P3_OpenClaw_Extension:
memory: projects/P3_OpenClaw_Extension/memory.md
skills: projects/P3_OpenClaw_Extension/skills/
access: [john, alice] # 可访问用户

P4_Blog:
memory: projects/P4_Blog/memory.md
skills: projects/P4_Blog/skills/
access: [john] # 仅 John 可访问

4.3 敏感信息保护

问题:API 密钥、密码不能明文存储

方案

1
2
3
4
5
6
7
8
9
10
11
# ❌ 错误做法
MEMORY.md:
- Aliyun API Key: sk-sp-c35236a57fff40f2afea663e9472bbd9

# ✅ 正确做法
MEMORY.md:
- Aliyun API Key: 已配置(见 openclaw-secrets)

openclaw-secrets:
- 使用 K8s Secret 存储
- 或通过环境变量注入

五、实战案例:OpenClaw 记忆系统

5.1 项目背景

项目名称:OpenClaw3 K8s 部署

时间:2026-03-09 ~ 2026-03-11

挑战

  1. 部署过程复杂(5 小时,10+ 个问题)
  2. 配置项繁多(openclaw.json、Secret、ConfigMap)
  3. 需要跨会话协作(John 晚上部署,第二天继续)

5.2 记忆系统应用

阶段 1:部署前准备

创建项目记忆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# projects/P3_OpenClaw_Extension/memory.md

## K8s 部署信息
- 集群:10.0.0.81 (ksmaster1/2/3)
- 命名空间:openclaw
- PVC:openclaw-data-pvc (200Gi)
- 镜像:hb.test/crystalforge/openclaw-cn-base:1.0.3-feishu

## 配置信息
- Feishu AppID: cli_a9278e8369b89bc6
- Aliyun Model: bailian/qwen3.5-plus
- API Key: 已配置(见 openclaw-secrets)

## 待办
- [ ] 创建 PVC
- [ ] 部署 Pod
- [ ] 配置 Feishu
- [ ] 测试消息

阶段 2:部署过程记录

每日记忆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# memory/2026-03-10.md

## OpenClaw K8s 部署

### 21:00 - 开始部署
- 创建 PVC:成功
- 创建 Secret:成功

### 21:30 - 问题 1:Pod Pending
- 原因:PVC 调度失败
- 解决:简化为单 PVC 方案

### 22:00 - 问题 2:ImagePullBackOff
- 原因:Harbor 认证失败
- 解决:从 infraInfo.txt 获取正确密码

### 22:30 - 问题 3:CrashLoopBackOff
- 原因:openclaw.json 配置错误
- 解决:通过临时 Pod 更新配置

### 23:00 - 部署成功
- Pod Running (1/1)
- Feishu 连接成功

阶段 3:经验沉淀

更新全局记忆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# MEMORY.md

## OpenClaw K8s 部署(2026-03-10)

### 关键决策
- **单 PVC Scheme**: 多个 PVC 导致调度失败;单 PVC 稳定 ✅
- **No ConfigMap Override**: 防止只读配置问题 ✅
- **kubectl cp for Config Updates**: heredoc 导致 JSON 腐败 ✅
- **Memory Limit 4Gi**: 防止 OOMKilled (2Gi 失败) ✅

### 配置文件更新方法
```bash
kubectl run config-updater --rm -i --restart=Never \
--image=busybox -n openclaw \
--overrides='...'
kubectl cp /tmp/openclaw.json openclaw/config-updater:/data/openclaw.json
kubectl delete pod config-updater -n openclaw

踩坑记录

  • ConfigMap 覆盖导致只读 → 改用 PVC
  • heredoc 导致 JSON 腐败 → 改用 kubectl cp
  • 内存 2Gi OOM → 改为 4Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

---

## 六、最佳实践

### 6.1 记忆编写规范

**✅ 推荐做法**:

```markdown
# 清晰的标题
## 2026-03-11 OpenClaw K8s 部署

# 结构化内容
- **问题**: Pod Pending
- **原因**: PVC 调度失败
- **解决**: 简化为单 PVC

# 代码块标注语言
```bash
kubectl get pods

重要信息加粗

关键决策: 单 PVC Scheme

1
2
3
4
5
6
7
8
9
10
11

**❌ 避免做法**:

```markdown
# 模糊的标题
## 今天的事情

# 大段文字
今天下午遇到了一个问题,大概是这样的...

# 无语言标注

kubectl get pods

1
2
3

# 关键信息不明显
单 PVC Scheme 比较稳定

6.2 记忆维护流程

每日维护(5 分钟):

1
2
3
4
5
6
7
8
9
10
# 1. 查看今日记忆
cat memory/$(date +%Y-%m-%d).md

# 2. 补充重要事件
echo "## 15:00 - 完成 XX 功能" >> memory/$(date +%Y-%m-%d).md

# 3. 提交 Git
git add memory/$(date +%Y-%m-%d).md
git commit -m "daily: $(date +%Y-%m-%d)"
git push

每周维护(15 分钟):

1
2
3
4
5
6
# 1. 回顾本周记忆
cat memory/2026-W11-*.md

# 2. 提取重要内容到 MEMORY.md
# 3. 清理临时文件
# 4. 更新项目待办

每月维护(30 分钟):

1
2
3
4
5
6
# 1. 归档旧记忆
mv memory/2026-02-*.md memory/archive/2026-02/

# 2. 更新项目路线图
# 3. 清理过期技能
# 4. 优化目录结构

6.3 记忆检索技巧

按关键词检索

1
2
3
4
5
# 搜索所有包含 "K8s" 的记忆
grep -r "K8s" memory/ projects/*/memory.md

# 搜索特定日期的记忆
grep -l "2026-03-10" memory/*.md

按时间检索

1
2
3
4
5
# 查看最近 7 天的记忆
ls -lt memory/ | head -7

# 查看本周的记忆
cat memory/2026-03-{11,10,09,08,07,06,05}.md

按项目检索

1
2
3
4
5
# 查看 P4_Blog 项目记忆
cat projects/P4_Blog/memory.md

# 查看项目技能
ls projects/P4_Blog/skills/

七、踩坑记录

7.1 问题 1:记忆文件过大

现象

1
MEMORY.md 达到 500KB,加载时间 >5 秒

原因

  • 所有历史记忆都堆积在 MEMORY.md
  • 没有定期归档

解决

1
2
3
4
5
# 方案:三层分离

1. MEMORY.md - 仅保留长期记忆(<100KB)
2. memory/YYYY-MM-DD.md - 每日记忆(30 天)
3. memory/archive/ - 历史归档

效果

  • MEMORY.md 从 500KB 降到 50KB
  • 加载时间从 5 秒降到 0.5 秒

7.2 问题 2:Git 冲突频繁

现象

1
每次 git pull 都有冲突

原因

  • Obsidian 和 OpenClaw 同时修改同一文件
  • 没有同步机制

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 方案:锁定机制

# OpenClaw 修改前
git pull --rebase

# 修改后
git add .
git commit -m "auto: 更新"
git push

# Obsidian 同步脚本
#!/bin/bash
git pull --rebase
# 等待用户编辑
git add .
git commit -m "manual: 更新"
git push

效果

  • 冲突减少 80%
  • 同步流程清晰

7.3 问题 3:敏感信息泄露

现象

1
MEMORY.md 中包含 API 密钥明文

原因

  • 为了方便,直接写在记忆文件中
  • 没有安全意识

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方案:分级存储

L1 - 公开信息:
- 直接写在 MEMORY.md
- 可推送到 Git

L2 - 敏感信息:
- 写在 openclaw-secrets
- K8s Secret 存储
- 不推送到 Git

L3 - 机密信息:
- 使用加密工具(SOPS)
- 仅授权人员可解密

效果

  • 无敏感信息泄露
  • 符合安全规范

八、工具推荐

8.1 Obsidian 插件

插件 用途 推荐度
Git Git 集成 ⭐⭐⭐⭐⭐
Templater 模板引擎 ⭐⭐⭐⭐
Daily Notes 每日笔记 ⭐⭐⭐⭐⭐
Calendar 日历视图 ⭐⭐⭐⭐
Search 高级搜索 ⭐⭐⭐⭐

8.2 自动化脚本

脚本 1:每日记忆创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# create-daily-note.sh

TODAY=$(date +%Y-%m-%d)
FILE="memory/${TODAY}.md"

if [ ! -f "$FILE" ]; then
cat > "$FILE" <<EOF
# ${TODAY}

## 重要事件

## 待办
- [ ]

## 学习笔记

EOF
git add "$FILE"
git commit -m "chore: 创建 ${TODAY} 记忆"
git push
fi

脚本 2:记忆归档

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
# archive-old-memory.sh

ARCHIVE_DIR="memory/archive/$(date +%Y-%m)"
mkdir -p "$ARCHIVE_DIR"

# 移动 30 天前的文件
find memory/ -name "*.md" -mtime +30 -exec mv {} "$ARCHIVE_DIR/" \;

git add "$ARCHIVE_DIR"
git commit -m "chore: 归档旧记忆"
git push

九、总结

9.1 核心收获

1. 三层记忆架构

  • 全局记忆:长期、共享
  • 项目记忆:中期、隔离
  • 每日记忆:短期、自动清理

2. Git 同步机制

  • 版本控制:可追溯、可回滚
  • 协作共享:团队知识沉淀
  • 自动化:减少手动操作

3. 安全隔离

  • 用户隔离:防止记忆混淆
  • 项目隔离:配置不混用
  • 敏感信息:分级存储

9.2 适用场景

推荐使用

  • ✅ AI Agent 知识管理
  • ✅ 个人知识体系
  • ✅ 团队项目协作
  • ✅ 技术文档沉淀

不推荐使用

  • ❌ 实时性要求高(用数据库)
  • ❌ 大规模并发(用专业 KM 系统)
  • ❌ 强结构化数据(用 Notion/语雀)

9.3 后续优化

短期(1 个月):

  • 自动化同步脚本优化
  • 冲突解决机制改进
  • 记忆检索性能提升

中期(3 个月):

  • 支持多用户权限管理
  • 集成 AI 自动摘要
  • 知识图谱可视化

长期(6 个月):

  • 企业级 KM 系统集成
  • 支持多语言
  • 移动端同步

十、相关链接


作者:John
创建时间:2026-03-11
最后更新:2026-03-11
文档版本:v1.0