This commit is contained in:
jinli.yl 2026-05-19 19:58:25 +08:00
parent d71e01d79f
commit 2847d81200

View file

@ -22,8 +22,8 @@
BM25+
图谱三路 RRF 融合,返回时通过 1-hop 邻居 meta 让 Agent"先看目录、再决定要不要展开正文",不像传统 RAG 那样一次性把 top-K
切片塞进上下文。
- **记忆分层(形态的物化)** → 记忆按层次分为四类:`resource/`(原始素材)、`daily/`(日记事件)、`knowledge/`(主题长期知识)、
`proactive/`Agent 主动洞察);正交地按内容性质又分个性化、程序化、知识类三种,写入策略和检索权重各有差异。
- **记忆分层(形态的物化)** → 记忆按"原始 → 加工"两层组织:`resource/`(原始素材)、`daily/`(日记事件)是只增不删的流水帐;
`digest/` 是加工层,下分 `personal/`(个性化)、`knowledge/`(主题知识)、`procedural/`Agent 任务经验)、`proactive/`(主动洞察)四个固定子目录,写入策略和检索权重各有差异。
- **被集成而非内置(分发形态)** → ReMe 不做独立 Agent 产品,而是作为**能力**被任意 Harness 调用SDK 深度集成qwenpaw /
AgentScope、MCP ToolClaude Code / Cursor / Cherry Studio、CLI + skill.md 三条路径并行,记忆跟着用户走,不绑定任何上层框架。
@ -54,7 +54,8 @@
│ BM25 倒排 · 向量索引 · Wiki Link 图谱 │
├─────────────────────────────────────────────────────────┤
│ 文件目录约定 │
│ resource/ · daily/ · knowledge/ · proactive/ │
│ resource/ · daily/ · digest/{personal,knowledge, │
│ procedural,proactive}/ │
└─────────────────────────────────────────────────────────┘
```
@ -70,7 +71,7 @@
**场景一:金融分析师的产业链知识库**
盘后,分析师和 Agent 对话讨论今天看到的几条新能源新闻。第二天打开知识库,发现昨天的对话已经被自动拆分成「钴价波动」「下游电池厂动向」「上游矿企并购」三条事件笔记,分别归档到
`knowledge/产业链/` 下相应主题;笔记之间通过 `[[钴]]` `[[宁德时代]]` 这样的 wikilink 互相串联。下周再问"钴的下游应用"ReMe
`digest/knowledge/financial/产业链/` 下相应主题;笔记之间通过 `[[钴]]` `[[宁德时代]]` 这样的 wikilink 互相串联。下周再问"钴的下游应用"ReMe
沿着图谱渐进展开,从一个节点跳到相关的全部上下文。
**场景二:个人工作 & 生活第二大脑**
@ -86,56 +87,66 @@
## 三、记忆模型ReMe 把什么存下来
### 3.1 四类记忆分层
### 3.1 两层记忆结构:原始素材 + 加工记忆
ReMe 不把对话一股脑塞进数据库,而是让记忆**像人脑一样有层次**
ReMe 不把对话一股脑塞进数据库,而是按"原始 → 加工"分两层组织
| 类型 | 存什么 | 典型场景 |
|---------------------|---------------------------|----------------------|
| **Resource原始资料** | 原始对话日志、上传的文件、网页 HTML、邮件附件 | 溯源 / 审计 / 二次加工 |
| **Daily日记记忆** | 每天的事件性记忆,主 Agent 实时写入 | "我今天和谁聊了什么"、"今天工作内容" |
| **Knowledge知识记忆** | 主题化、结构化的长期知识 | "光伏产业链"、"我的工作框架" |
| **Proactive主动推送** | Agent 给用户的分析、推荐、心路历程 | 主动提醒、复盘建议、洞察记录 |
| 层次 | 目录 | 存什么 | 典型场景 |
|----------|-------------|----------------------------------|-------------------------------|
| **原始素材** | `resource/` | 上传文件、抓取网页、PDF 研报、邮件附件 | 溯源 / 审计 / 二次加工 |
| **日记流水** | `daily/` | 每天的事件性记忆,主 Agent 实时写入 | "我今天和谁聊了什么"、"今天工作内容" |
| **加工记忆** | `digest/` | 经 Auto-Dream 整理后的长期记忆,下分四类(见 3.2 | "光伏产业链"、"webpack 排查路径"、"早间洞察" |
短期日记、长期知识、原始素材、主动洞察各司其职 —— 这是 ReMe 区别于"对话历史搜索"类方案的根本差异
`resource/``daily/` 是只增不删的"流水帐"——前者保留原始事实、后者保留事件级现场;`digest/` 才是被反复消费的精华层,也是 Auto-Dream / Auto-Link 持续打磨的主要产物
### 3.2 三种记忆的覆盖
### 3.2 digest 下的四种记忆
正交于上面的"层次",按"内容性质"也分三类
`digest/` 固定划分四个子目录,正交覆盖"用户 / 知识 / Agent / 主动"四个维度
- **个性化记忆** — 用户的偏好、习惯、个人事件("用户喜欢简洁回复"、"昨天去了上海"
- **程序化记忆** — Agent 完成任务的过程性经验("修这类 bug 通常先看日志"、"上次部署失败因为环境变量"
- **知识类记忆** — 客观知识、领域参考资料("产业链结构"、"框架文档"
| 子目录 | 内容性质 | 写入触发 | 检索权重 | 典型例子 |
|------------------------|---------------------|----------------------|-------------|---------------------------------------|
| **digest/personal/** | 个性化(用户偏好、习惯、人物档案) | 用户纠正 / 偏好表达 | 全场景常驻 | "用户不爱写注释"、"用户喜欢 pnpm" |
| **digest/knowledge/** | 知识类(客观知识、领域参考) | 主题对话 / Auto-Dream 归档 | 主题相关性匹配 | "光伏产业链"、"React Server Components" |
| **digest/procedural/** | 程序化Agent 任务经验) | 任务完成后归纳 | 任务相似度高时唤起 | "webpack 卡死的排查路径" |
| **digest/proactive/** | 主动推送Agent 输出的分析) | 定时 / 触发式生成 | 时效衰减 | 早间洞察、周复盘、热点跟踪 |
不同类型的记忆在写入策略、检索权重、过期规则上都会有差异化处理。
四类的"形状"刻意不同:
- `digest/knowledge/` 由用户自定义二级分类(如 `work/``financial/``life/`),下面层级随意展开。
- `digest/personal/``digest/proactive/` 保持扁平,便于全量加载或时序浏览。
- `digest/procedural/` 软链到 Harness Agent 的 skill 目录P0让 Agent 沉淀的"经验"直接成为可复用的 skill。
### 3.3 目录约定(用户可读、可备份、可迁移)
```
~/reme_workspace/
├── resource/ # 原始素材(按日期归档)
├── resource/ # 原始素材(按日期归档)
│ └── 20260518/
│ ├── 1430_xueqiu_comment.html # 雪球评论抓取
│ └── 1620_research_report.pdf # 研报原件
│ ├── 1430_xueqiu_comment.html # 雪球评论抓取
│ └── 1620_research_report.pdf # 研报原件
├── daily/
│ ├── 20260518.md # 当天主索引(兼容 write/edit
│ ├── 20260518.md # 当天主索引(兼容 write/edit
│ └── 20260518/
│ ├── meeting-with-alice.md
│ ├── debug-login.md
│ └── reading-paper.md
├── digest/
│ ├── personal/
knowledge/
└── digest/ # 固定四个子目录personal / knowledge / procedural / proactive
├── personal/ # 个性化记忆:偏好、习惯、个人事件
│ └── 用户偏好.md
├── knowledge/ # 知识类记忆用户自定义二级目录work / financial / ...
│ ├── work/
│ ├── financial/
│ │ ├── 光伏产业链.md
│ │ └── 钴.md
│ ├── procedural/(软链到harness agent的skill目录P0)
├── xxxx.md # Agent 完成的任务
│ ├── proactive各家的协议是不一样的/
├── 20260518.md # Agent 主动产出的建议
│ └── ...
├── procedural/ # 程序化记忆:软链到 harness agent 的 skill 目录P0
│ └── xxxx.md # Agent 完成任务沉淀的经验
└── proactive/ # 主动推送:各家协议不同
└── 20260518.md # Agent 主动产出的建议
```
> `digest/` 下固定为 **personal / knowledge / procedural / proactive** 四个子目录;其中 `knowledge/` 内部由用户自行扩展二级分类(如 `work/``financial/`),其余三类保持扁平结构。
**所有记忆都是普通 Markdown 文件**,用户随时可以:
- 用 Obsidian / Typora / VSCode 打开浏览编辑
@ -173,10 +184,10 @@ ReMe 不把对话一股脑塞进数据库,而是让记忆**像人脑一样有
借鉴人在睡眠中"记忆巩固"的机制:
- Agent 检测到空闲(夜晚、用户离开、长时间无交互)时触发。
- 把若干天的 daily 笔记按主题、实体重新组织到 `knowledge/{topic}/` 下
- 把若干天的 daily 笔记按主题、实体重新组织到 `digest/knowledge/{domain}/` 下;同时把对话里反复出现的偏好沉淀到 `digest/personal/`,把 Agent 完成任务的经验固化到 `digest/procedural/`
- 抽取共性、合并重复、生成总结。
**用户体验**:第二天打开知识库,会发现昨天散落在不同对话里的内容已经按"客户/项目/学习"自动归档,关键概念已经被抽成独立的主题笔记。
**用户体验**:第二天打开 `digest/`,会发现昨天散落在不同对话里的内容已经按"客户/项目/学习"自动归档`digest/knowledge/`,关键概念被抽成独立的主题笔记。
这是 ReMe 区别于"对话历史搜索"的关键 —— **它会自己整理**
@ -193,8 +204,8 @@ ReMe 不把对话一股脑塞进数据库,而是让记忆**像人脑一样有
### 4.4 三者协同:从对话到知识图谱的自然演化
```
[实时] [离线] [持续]
原始对话 ─Auto-Memory─► daily 事件 ─Auto-Dream─► knowledge 主题
[实时] [离线] [持续]
原始对话 ─Auto-Memory─► daily 事件 ─Auto-Dream─► digest/{personal,knowledge,procedural}
Auto-Link
@ -236,23 +247,23 @@ ReMe 同时跑三种检索通路,结果通过 RRFReciprocal Rank Fusion
**一个具体例子:分析师查询"钴的下游应用"**
第一跳直接命中 `knowledge/产业链/钴.md` 的某一段切片answer 里这一段长这样:
第一跳直接命中 `digest/knowledge/financial/产业链/钴.md` 的某一段切片answer 里这一段长这样:
```
========== knowledge/产业链/钴.md:42-78 [score=0.0234 vector=0.0123 keyword=0.0111] ==========
========== digest/knowledge/financial/产业链/钴.md:42-78 [score=0.0234 vector=0.0123 keyword=0.0111] ==========
# 钴
## 应用
钴是锂电正极材料的关键原料,主要用于动力电池、消费电子和储能……
→ outlinks (3):
→ knowledge/矿产/刚果(金).md title="刚果(金) - 钴矿主产区" tags=['矿产', '非洲']
digest/knowledge/financial/矿产/刚果(金).md title="刚果(金) - 钴矿主产区" tags=['矿产', '非洲']
via predicate=producer, anchor=#钴矿带
→ knowledge/公司/嘉能可.md title="嘉能可 Glencore" tags=['矿企', '海外']
digest/knowledge/financial/公司/嘉能可.md title="嘉能可 Glencore" tags=['矿企', '海外']
via plain
→ knowledge/产品/三元正极.md title="三元正极材料" tags=['锂电', '正极']
digest/knowledge/financial/产品/三元正极.md title="三元正极材料" tags=['锂电', '正极']
via predicate=downstream
← inlinks (2):
← knowledge/产业链/锂电产业链.md title="锂电产业链总览" tags=['新能源', '锂电']
digest/knowledge/financial/产业链/锂电产业链.md title="锂电产业链总览" tags=['新能源', '锂电']
via predicate=upstream
← daily/20260318/宁德调研纪要.md title="宁德时代调研纪要" tags=['公司调研']
via plain
@ -495,13 +506,13 @@ daily/20260518/
**Day 3周三夜间 Auto-Dream**:把多天 daily 里**反复出现的实体**聚合成实体笔记——只做归并,不做总览。
```
knowledge/公司/
digest/knowledge/financial/公司/
├── 嘉能可.md ← 新建:聚合 day1/day2 提到嘉能可的 4 个事件
├── 洛阳钼业.md ← 新建
└── 宁德时代.md ← 已有,本次新增「高镍化决策」一节
knowledge/原料/
digest/knowledge/financial/原料/
└── 钴.md ← 新建:聚合 3 天里所有提到「钴」的内容
knowledge/产品/
digest/knowledge/financial/产品/
└── 三元正极.md ← 新建:技术路线变化
```
@ -522,37 +533,37 @@ ReMe 走多模融合(向量 + BM25 + 图谱),命中 3 天来 Auto-Dream
```
========== 第一跳直接命中5 个节点)==========
knowledge/原料/钴.md:42-78 [score=0.0234]
digest/knowledge/financial/原料/钴.md:42-78 [score=0.0234]
# 钴 / ## 应用
钴是锂电正极材料的关键原料,主要用于动力电池……
→ outlinks (4):
→ knowledge/产品/三元正极.md via predicate=downstream
→ knowledge/公司/嘉能可.md via predicate=producer
→ knowledge/公司/洛阳钼业.md via predicate=producer
→ daily/20260518/三元正极高镍化趋势.md via plain
digest/knowledge/financial/产品/三元正极.md via predicate=downstream
digest/knowledge/financial/公司/嘉能可.md via predicate=producer
digest/knowledge/financial/公司/洛阳钼业.md via predicate=producer
→ daily/20260518/三元正极高镍化趋势.md via plain
← inlinks (2):
← daily/20260318/宁德调研纪要.md via plain
← daily/20260512/亿纬电话会.md via plain
knowledge/产品/三元正极.md:15-44 [score=0.0211]
digest/knowledge/financial/产品/三元正极.md:15-44 [score=0.0211]
# 三元正极 / ## 高镍低钴路线
2025 年起主流厂商加速 8 系/9 系产品……
→ outlinks (2):
→ knowledge/公司/宁德时代.md via predicate=used_by
→ knowledge/原料/钴.md via predicate=upstream
digest/knowledge/financial/公司/宁德时代.md via predicate=used_by
digest/knowledge/financial/原料/钴.md via predicate=upstream
knowledge/公司/宁德时代.md:88-120 [score=0.0193]
digest/knowledge/financial/公司/宁德时代.md:88-120 [score=0.0193]
# 宁德时代 / ## 高镍化决策
本季度切换到 9 系三元为主……
knowledge/公司/嘉能可.md:5-30 [score=0.0167]
knowledge/公司/洛阳钼业.md:1-22 [score=0.0152]
digest/knowledge/financial/公司/嘉能可.md:5-30 [score=0.0167]
digest/knowledge/financial/公司/洛阳钼业.md:1-22 [score=0.0152]
========== 第二跳Agent 主动展开邻居 meta不取正文==========
共 9 个邻居节点,按预测相关度排序:
- knowledge/公司/亿纬锂能.md ← 三元正极 used_by 反链
- daily/20260512/亿纬电话会.md ← 宁德时代 inlinks
- daily/20260318/宁德调研纪要.md ← 钴 inlinks
- digest/knowledge/financial/公司/亿纬锂能.md ← 三元正极 used_by 反链
- daily/20260512/亿纬电话会.md ← 宁德时代 inlinks
- daily/20260318/宁德调研纪要.md ← 钴 inlinks
...
```
@ -561,7 +572,7 @@ Agent 不需要把这些邻居正文都拉回来——光看"路径 + title + pr
###### Step 2Agent 基于检索结果合成总览,写回知识库
```
knowledge/产业链/
digest/knowledge/financial/产业链/
└── 锂电产业链.md ← 由 Day 5 query 触发合成
内容来源:上一步检索命中的 5 个节点 + 关系
不引入任何 daily 之外的"想象"
@ -602,7 +613,7 @@ generated_from:
Agent 拿这份合成结果,给王分析师的回复直接带**上下游骨架 + 公司归属 + 历史调研引用**
> "锂电产业链分三段:上游钴矿(嘉能可、洛阳钼业,刚果金集中)、中游三元正极(高镍化加速)、下游电池厂(宁德/亿纬)。这周您提到的事件分别落在:嘉能可三季报 → 上游产能;高镍化趋势 → 中游路线切换;宁德 9 系切换 → 下游产品验证。详细引用见 [[knowledge/产业链/锂电产业链]]。"
> "锂电产业链分三段:上游钴矿(嘉能可、洛阳钼业,刚果金集中)、中游三元正极(高镍化加速)、下游电池厂(宁德/亿纬)。这周您提到的事件分别落在:嘉能可三季报 → 上游产能;高镍化趋势 → 中游路线切换;宁德 9 系切换 → 下游产品验证。详细引用见 [[digest/knowledge/financial/产业链/锂电产业链]]。"
**关键差异**:传统 RAG 会一股脑塞 5 个文件正文进上下文ReMe 是"先看 5 个节点的目录骨架 → 拼出总览 → 落盘成可被反复消费的笔记"。下次再问"锂电下游有谁",直接命中这份总览,不用再走一遍合成。
@ -638,7 +649,7 @@ Agent 拿这份合成结果,给王分析师的回复直接带**上下游骨架
#### proactive主动洞察推送
每天早上 9:00ReMe 在 `proactive/20260519.md` 里写:
每天早上 9:00ReMe 在 `digest/proactive/20260519.md` 里写:
```markdown
---
@ -716,8 +727,8 @@ tags: [daily]
#### Day 30Auto-Dream 已经把主题归档好了
```
knowledge/
├── personal/
digest/knowledge/
├── life/ ← 用户自定义二级分类:生活
│ ├── 跑步训练日志.md ← 把 1 个月的「配速训练」事件聚合
│ ├── 阅读笔记/
│ │ ├── 深度工作.md ← 全书要点(从多次 daily 阅读片段汇总)
@ -725,16 +736,16 @@ knowledge/
│ └── 徒步路线/
│ ├── 莫干山线.md
│ └── 千岛湖环湖线.md
├── work/
├── work/ ← 用户自定义二级分类:工作
│ ├── 前端调试技巧.md ← 「调试登录页面 CSS」「修复 z-index」等事件聚合
│ ├── 包管理工具切换决策.md ← 「pnpm vs npm」讨论沉淀
│ └── 团队会议纪要/
└── parenting/
└── parenting/ ← 用户自定义二级分类:育儿
├── 英语启蒙书单.md
└── 与孩子沟通技巧.md
```
李工没有手动建过任何一个 `knowledge/` 下的文件——它们都是 Agent 在他睡觉时从 daily 里"梦出来"的。
李工没有手动建过任何一个 `digest/knowledge/` 下的文件——它们都是 Agent 在他睡觉时从 daily 里"梦出来"的。同时 Agent 在 `digest/personal/` 沉淀着对李工的画像("偏前端"、"早睡"、"周末徒步"),但这一层用户不会主动浏览。
#### Day 90Obsidian Graph View 打开是这样
@ -769,12 +780,12 @@ daily/20260420/与 Alice 周末聚餐.md
> ……Alice 推荐了一本讲注意力的书,标题里有「深度」两个字……
← inlinks:
knowledge/personal/阅读笔记/深度工作.md via plain
digest/knowledge/life/阅读笔记/深度工作.md via plain
→ outlinks:
people/Alice.md via mention
digest/personal/Alice.md via mention
========== 第二跳Agent 顺藤摸瓜 ==========
knowledge/personal/阅读笔记/深度工作.md
digest/knowledge/life/阅读笔记/深度工作.md
> 卡尔·纽波特2016 年出版……
```
@ -802,11 +813,11 @@ Agent 回:"**《深度工作》,卡尔·纽波特著。** 您在 4/20 周末
└──────┬──────┘ └──────┬──────┘
│ 写入 │ 直接套用
▼ ▼
knowledge/agent/ 跳过踩坑1 步解决
├── 调试经验/
│ └── webpack 编译卡死.md
└── 用户偏好/
└── 代码风格.md
digest/ 跳过踩坑1 步解决
├── procedural/
│ └── webpack 编译卡死.md ← Agent 任务经验
└── personal/
└── 代码风格.md ← 用户偏好画像
```
#### 程序化记忆的真实例子
@ -824,7 +835,7 @@ knowledge/agent/ 跳过踩坑1 步解决
ReMe 的 Auto-Dream 当晚把这次会话沉淀到:
```markdown
# knowledge/agent/调试经验/webpack 编译卡死.md
# digest/procedural/webpack 编译卡死.md
---
title: webpack 编译卡死的排查路径
tags: [agent_memory, programmatic, webpack]
@ -841,7 +852,7 @@ build 卡在 92%chunk asset optimization 阶段)。
3. ❌ 升级 terser-webpack-plugin仅特定版本相关
## 关联
- 用户偏好:[[knowledge/agent/用户偏好/代码风格#TypeScript]] 启用了 strict 模式,
- 用户偏好:[[digest/personal/代码风格#TypeScript]] 启用了 strict 模式,
类型检查负担大,更易触发 OOM
- 历史事件:[[daily/20260310/webpack 卡死排查]]
```
@ -852,7 +863,7 @@ build 卡在 92%chunk asset optimization 阶段)。
用户:"vite build 也卡在打包阶段,是同一类问题吗?"
Agent 内部检索 ReMe
========== 命中:knowledge/agent/调试经验/webpack 编译卡死.md ==========
========== 命中:digest/procedural/webpack 编译卡死.md ==========
关键词匹配编译卡死、build 阶段
向量相似vite build ≈ webpack build
@ -866,10 +877,10 @@ vite 的 esbuild 阶段也吃内存,先试 NODE_OPTIONS=--max-old-space-size=8
#### 用户偏好的"自我画像"
`knowledge/agent/用户偏好/` 下随时间长出的画像:
`digest/personal/` 下随时间长出的画像:
```markdown
# knowledge/agent/用户偏好/代码风格.md
# digest/personal/代码风格.md
---
type: personalization
tags: [user_profile]
@ -893,15 +904,15 @@ tags: [user_profile]
**意义**:这不是 Agent 在 system prompt 里写死的"用户喜欢简洁",而是**从用户实际行为里被动观察到的、可追溯到具体对话的偏好画像**。每条偏好都有 `[[daily/...]]` 反向链接,用户可以审视、可以修正。
#### 三种记忆类型的差异化处理
#### 三类记忆在 Agent 陪伴里的分工
回到 [3.2](#32-三种记忆的覆盖) 提到的三类记忆,在 Agent 陪伴场景下各司其职
回到 [3.2](#32-digest-下的四种记忆) 中 `digest/` 的四个子目录本场景主要由其中三类共同支撑proactive 已在 9.1 主动推送场景演示)
| 记忆类型 | 写入触发 | 检索权重 | 实际表现 |
| digest 子目录 | 写入触发 | 检索权重 | 实际表现 |
|----------------------------|----------------|----------|---------------------------------------|
| **个性化personalization** | 用户纠正 / 偏好表达 | 全场景常驻 | "我懂你不爱写注释" |
| **程序化programmatic** | 任务完成后归纳成功/失败路径 | 任务相似度高时高 | "上次这类 bug 你这样解决过" |
| **知识类knowledge** | 学习对话、文档阅读 | 主题相关时高 | "你之前学过的 React Server Components" |
| **digest/personal/** | 用户纠正 / 偏好表达 | 全场景常驻 | "我懂你不爱写注释" |
| **digest/procedural/** | 任务完成后归纳成功/失败路径 | 任务相似度高时高 | "上次这类 bug 你这样解决过" |
| **digest/knowledge/** | 学习对话、文档阅读 | 主题相关时高 | "你之前学过的 React Server Components" |
三类共同织成一个"懂用户 + 会做事 + 有知识"的长期陪伴 Agent——**差异化体验来自 ReMe 维护的个人记忆,而不是模型本身**。换言之,同一个 Claude / Qwen 模型,套上不同用户的 ReMe会变成完全不同的 Agent。