Obsidian Brain — Agent 大脑系统
借鉴 Mem0/Letta/Zep/Cognee/Memobase 的 agent 记忆设计模式,适配 Obsidian 文件系统。
核心概念
| 组件 | 作用 | 来源 |
|---|---|---|
| agent memory/ | 执行反馈碎片,跨会话知识 | Memobase Episodic Memory |
| 知识库笔记 | 概念/某物/skill/关系(KG结构) | 自建 |
| Skill L0 (agent_trigger) | agent 可触发的技能摘要 | 自创 |
L0/L1/L2 分层加载
借鉴 Letta 的 OS 式内存管理:L0=inode/L1=读入内存/L2=预取关联页。
| 层级 | 内容 | 加载 | 类比 |
|---|---|---|---|
| L0 | frontmatter: summary/abstract/agent_trigger/tags/importance | 搜到即加载 | 文件系统 inode |
| L1 | 正文 + ## 关键发现/## 核心规则/## 执行清单 | L0 确认相关后 | 读入 RAM |
| L2 | related_fragments 关联链 + 全文 | L1不够时展开 | 预取内存页 |
主动翻页机制(Letta): L1加载后如果信息不足,agent 主动沿 related_fragments 链展开 L2,而非一次性全加载。
L0 批量 grep:
VAULT="/d/App/Obsidian/RealGhost"
for f in 匹配文件; do
head -12 "$f" | grep -E "^(summary|abstract|agent_trigger|tags|importance|project|type):"
done
agent memory 碎片格式
/d/App/Obsidian/RealGhost/agent memory/{项目} - {YYYY-MM-DD} - {描述}.md
---
tags: [agent-memory]
project: 充电站项目
date: 2026-05-05
summary: 叮叮vs驴充充报价对比,叮叮1200/桩售后慢,驴充充1500/桩售后当天→选驴充充
type: 决策记录
importance: 0.8
confidence: 0.9
related_fragments:
- 充电站 - 2026-05-03 - 物业合作条件初探.md
- 充电站 - 2026-05-01 - 充电桩市场调研.md
source: conversation
version: 1
---
# 充电站 - 2026-05-05 - 供应商对比
## 决策
选择驴充充,多花300但售后可靠
## 关键发现
- 叮叮充电:1200/桩,售后3天才上门
- 驴充充:1500/桩,售后当天上门
## 待查
- [ ] 驴充充分期付款
- [ ] 物业合同模板
字段说明:
| 字段 | 必填 | 作用 |
|---|---|---|
summary | ✅ | L0 扫描摘要(一句话) |
importance | ✅ | 0~1,LLM打分,决定加载优先级和保留 |
type | ✅ | 决策记录/调研结果/待查事项/经验教训/搜索结果 |
related_fragments | 推荐 | L2 关联链,构建隐式知识图谱(Cognee模式) |
confidence | 推荐 | 0~1,信息可靠度 |
source | 推荐 | conversation/observation/inference/research |
version | 自动 | 每次更新递增 |
写入策略(借鉴 Mem0 + Zep)
写入流程:
1. LLM 从任务结果中提取关键事实(不是存整个对话)
2. 哈希去重:搜索已有碎片,MD5相同→跳过
3. 语义相似检查:相似度>0.8→合并更新(增加version)而非新建
4. LLM 生成 frontmatter(summary + importance + type)
5. 查找 related_fragments(同project或同tags的碎片)
6. 写入 .md 文件
写入判断(什么该记):
- ✅ 决策、结论、价格数据 → 写入(importance ≥ 0.5)
- ✅ 经验教训、踩坑 → 写入(importance ≥ 0.6)
- ✅ 调研发现、待查事项 → 写入
- ❌ 临时计算、一次性信息 → 不写
- ❌ 重复信息(哈希命中或相似度>0.9)→ 合并更新
检索策略(借鉴 Zep MMR + CrewAI 时间衰减)
三层搜索:
- Tag 精准匹配 —
search_files+ greptags:(最快) - 全文关键词 — ripgrep 搜索正文内容
- 语义相似 — 可选,需向量嵌入支持
融合排序公式:
score = 相关性×0.5 + importance×0.3 + 时间衰减×0.2
时间衰减 = e^(-λ × days_since_update) # λ=0.01, ~半年降到0.5
MMR 多样性控制(Zep): 当返回Top-K中有高度相似的碎片(同一主题重复),保留最完整的一条,其余降权。
读取优先级
任务前搜索顺序:
agent memory/— 碎片(最新上下文,时间衰减加权)- 知识库 Skill 笔记 — agent_trigger L0 匹配
- 知识库概念/某物笔记 — abstract L0 匹配
- 网络搜索
碎片维护
老化策略
| 条件 | 处理 |
|---|---|
| importance < 0.3 且 90天未访问 | 归档到 agent memory/_archive/ |
| related_fragments 指向已删除文件 | 清理失效引用 |
| 同一 project 碎片 > 20 个 | LLM 生成 {project} - 摘要 - L2总结.md 合并旧碎片 |
L2 总结文件
当同 project 碎片过多时,生成一个高层摘要:
---
tags: [agent-memory, l2-summary]
project: 充电站项目
summary: 充电站项目全貌:已对比3家供应商选驴充充,物业合作分成60/40,青岛目标小区23个,待启动
importance: 0.9
covers_fragments:
- 充电站 - 2026-05-01 - ...
- 充电站 - 2026-05-03 - ...
- 充电站 - 2026-05-05 - ...
---
# 充电站项目 - L2 项目摘要
## 当前进度
- 供应商:已选驴充充(1500/桩)
- 物业合作:60/40分成模式
- 目标市场:青岛23个小区已标注
- 下一步:签物业合同
## 关键决策
(按时间线列出关键决策)
执行流程
收到任务
│
├─ 1. 提取关键词
├─ 2. 搜 agent memory/ → L0 (grep summary: + importance:)
├─ 3. 搜知识库 → L0 (grep abstract: + agent_trigger:)
├─ 4. 按 score 排序(相关性+importance+时间衰减)
├─ 5. L1 加载 Top-K 正文
├─ 6. 不足 → L2 沿 related_fragments 展开
├─ 7. 补充网络搜索
├─ 8. 执行任务
└─ 9. ⚠️ 强制步骤:判断 → 写 agent memory(不可跳过)
每次任务结束,问自己:
- 有没有新决策/结论/发现?
- 有没有踩坑/经验教训?
- 下个会话还需要这个信息吗?
有任一"是" → 立即写入。不要等、不要拖。
速查卡片
┌────────────────────────────────────────────┐
│ 读: agent memory → 知识库 L0 → L1 → L2 │
│ 写: LLM提取 → 哈希去重 → 合并/新建 │
│ 排: 相关性×0.5 + importance×0.3 + 时间×0.2│
│ 关: related_fragments 隐式图谱链 │
│ importance<0.3 + 90天 → _archive/ │
│ 同project>20碎片 → L2总结合并 │
└────────────────────────────────────────────┘
常见陷阱
- 不是存整个对话 — LLM提取关键事实后碎片化存储
- 相似不重复建 — 相似度>0.8合并更新,version+1
- L0不够就翻页 — 别硬撑,主动展开L2
- related_fragments 要及时维护 — 目标文件删了要清理
- 任务结束忘了写 agent memory ← 最严重陷阱。写完skill/改完笔记/做完调研,直接结束没走第9步。解决:任务收尾时先弹"要不要写agent memory?"三问(决策?踩坑?下次需要?),有任一"是"就写,不拖