@smyslenny/agent-memory 4.2.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,228 +0,0 @@
1
- # DD-0016: AgentMemory v4.1 — Warm Boot + Surface CLI + Emotion Tags
2
-
3
- **Status:** Approved
4
- **Author:** Noah
5
- **Date:** 2026-03-10
6
- **Repo:** /tmp/agent-memory-dd
7
-
8
- ---
9
-
10
- ## 1. Background / 背景
11
-
12
- v4.0 完成了核心重构(向量检索、语义去重、HTTP API、文档泛化),但缺少三个常被请求的能力:
13
-
14
- 1. `boot` 只返回 JSON 数组——agent 醒来没有"记忆的温度"。
15
- 2. 没有 CLI 命令直接输出 Markdown 用于 `RECENT.md` 自动注入。
16
- 3. emotion 类型记忆只有 `emotion_val` 数值,没有可检索的情感标签。
17
-
18
- 这三个功能共享一些底层改动(列记忆时的分层过滤、schema 升级、MCP/CLI 参数扩展),适合合在一个 DD 里做。
19
-
20
- ## 2. Goals / 目标
21
-
22
- - G1: `boot` 支持 `format=narrative`,输出分层叙事 Markdown(纯模板,不依赖 LLM)
23
- - G2: 新增 `agent-memory surface` CLI 命令,输出 Markdown 并支持 `--out FILE`
24
- - G3: memories 表新增 `emotion_tag TEXT` 列(schema v6),贯通 remember/recall/surface/MCP/CLI
25
-
26
- ## 3. Non-Goals / 非目标
27
-
28
- - 不做 LLM 驱动的叙事生成
29
- - 不做自动关联(links 自动建边留 v4.2)
30
- - 不改 surface 的评分公式
31
- - 不做统一搜索入口(qmd + recall 合并留后续)
32
-
33
- ## 4. Proposal / 方案
34
-
35
- ### 4.1 Feature 1: Warm Boot
36
-
37
- **改动文件:** `src/sleep/boot.ts`, `src/mcp/server.ts`, `src/bin/agent-memory.ts`
38
-
39
- #### 接口变更
40
-
41
- ```typescript
42
- export interface WarmBootOptions {
43
- agent_id?: string;
44
- corePaths?: string[];
45
- format?: "json" | "narrative"; // 新增,默认 "json"
46
- agent_name?: string; // narrative 模板用,默认 "Agent"
47
- }
48
-
49
- export interface WarmBootResult extends BootResult {
50
- narrative?: string; // format=narrative 时填充
51
- }
52
- ```
53
-
54
- #### 分层拉取策略
55
-
56
- | 层 | 类型 | 拉取策略 | Markdown 标题 |
57
- |----|------|----------|-------------|
58
- | 核心身份 | identity (P0) | 全部 | `## 我是谁` |
59
- | 近期情感 | emotion (P1) | 最近 5 条 by updated_at | `## 最近的心情` |
60
- | 近期事件 | event (P3) | 最近 7 条 by updated_at | `## 最近发生的事` |
61
- | 鲜活知识 | knowledge (P2) | vitality > 0.5, top 10 | `## 还记得的知识` |
62
-
63
- #### 时间格式化
64
-
65
- ```typescript
66
- function relativeTime(isoDate: string): string {
67
- const diffMs = Date.now() - new Date(isoDate).getTime();
68
- const diffDays = Math.floor(diffMs / 86_400_000);
69
- if (diffDays === 0) return "今天";
70
- if (diffDays === 1) return "昨天";
71
- if (diffDays <= 7) return `${diffDays}天前`;
72
- return isoDate.slice(0, 10); // YYYY-MM-DD
73
- }
74
- ```
75
-
76
- #### Narrative 模板
77
-
78
- ```markdown
79
- # {agent_name}的回忆
80
-
81
- ## 我是谁
82
- - {identity_content_1}
83
- - {identity_content_2}
84
-
85
- ## 最近的心情
86
- - {emotion_content} ({emotion_tag}, {relative_time})
87
-
88
- ## 最近发生的事
89
- - {event_content} ({relative_time})
90
-
91
- ## 还记得的知识
92
- - {knowledge_content}
93
- ```
94
-
95
- emotion 条目如果有 `emotion_tag` 则显示 `(标签, 时间)`,否则只显示 `(时间)`。
96
-
97
- #### MCP / CLI
98
-
99
- - MCP `boot` tool: 新增 `format` 参数(枚举 `json|narrative`)和 `agent_name` 参数
100
- - CLI: `agent-memory boot --format narrative --agent-name Noah`
101
-
102
- ### 4.2 Feature 2: Surface CLI Command
103
-
104
- **改动文件:** `src/bin/agent-memory.ts`(主要),复用 `src/app/surface.ts` 里已有的 `surfaceMemories()`
105
-
106
- #### CLI 接口
107
-
108
- ```bash
109
- agent-memory surface [--out FILE] [--days N] [--limit N] [--min-vitality F] [--types T1,T2]
110
- ```
111
-
112
- | 参数 | 默认值 | 说明 |
113
- |------|--------|------|
114
- | `--out` | stdout | 输出到文件路径 |
115
- | `--days` | 7 | 时间窗口(天)|
116
- | `--limit` | 50 | 最大条目数 |
117
- | `--min-vitality` | 0.1 | vitality 下限 |
118
- | `--types` | 全部 | 逗号分隔的类型过滤 |
119
-
120
- #### 输出 Markdown 格式
121
-
122
- ```markdown
123
- # Recent Memories
124
-
125
- > Auto-generated by AgentMemory surface. Last updated: {ISO_DATE}
126
-
127
- ## Identity
128
- - {content} (vitality: {v})
129
-
130
- ## Emotion
131
- - {content} ({emotion_tag}, {relative_time})
132
-
133
- ## Knowledge
134
- - {content} ({relative_time}, vitality: {v})
135
-
136
- ## Events
137
- - {content} ({relative_time})
138
- ```
139
-
140
- 按 type 分组,每组内按 score 降序。需要先构造一个 surface 调用——使用 `task: "context loading"` + `intent: "temporal"` 作为默认参数。
141
-
142
- **对于 `--days` 过滤:** surface 本身不支持时间窗口,在 surface 返回后按 `memory.updated_at` 过滤。
143
-
144
- #### MCP tool
145
-
146
- MCP 也新增 `surface` tool(当前只有 HTTP endpoint):
147
- - 参数:`days`, `limit`, `min_vitality`, `types`, `format` (`json|markdown`)
148
- - `json` 返回现有 SurfaceResponse
149
- - `markdown` 返回格式化的 Markdown 文本
150
-
151
- ### 4.3 Feature 3: Emotion Tags
152
-
153
- **改动文件:** `src/core/db.ts` (schema), `src/core/memory.ts` (CRUD), `src/app/remember.ts`, `src/app/recall.ts`, `src/app/surface.ts`, `src/mcp/server.ts`, `src/bin/agent-memory.ts`, `src/transports/http.ts`
154
-
155
- #### Schema v6 迁移
156
-
157
- ```sql
158
- ALTER TABLE memories ADD COLUMN emotion_tag TEXT;
159
- ```
160
-
161
- - 向后兼容,不破坏已有数据
162
- - `SCHEMA_VERSION` 从 5 → 6
163
- - 迁移逻辑加在 `initDatabase()` 的 migration 链里
164
-
165
- #### Memory 接口扩展
166
-
167
- ```typescript
168
- export interface Memory {
169
- // ... existing fields ...
170
- emotion_tag: string | null; // 新增
171
- }
172
-
173
- export interface CreateMemoryInput {
174
- // ... existing fields ...
175
- emotion_tag?: string; // 新增
176
- }
177
- ```
178
-
179
- #### 过滤支持
180
-
181
- - `listMemories()`: 新增可选 `emotion_tag` 过滤
182
- - `searchBM25()`: 不变(emotion_tag 不进 FTS)
183
- - `surfaceMemories()`: SurfaceInput 新增可选 `emotion_tag` 过滤
184
- - `recall`: RecallInput 新增可选 `emotion_tag` 过滤
185
-
186
- #### MCP / CLI / HTTP
187
-
188
- - MCP `remember`: 新增 `emotion_tag` 参数
189
- - MCP `recall`: 新增 `emotion_tag` 过滤参数
190
- - CLI `remember`: 新增 `--emotion-tag` 选项
191
- - CLI `recall`: 新增 `--emotion-tag` 过滤选项
192
- - HTTP POST `/v1/memories`: body 接受 `emotion_tag`
193
- - HTTP POST `/v1/recall`: body 接受 `emotion_tag` 过滤
194
- - HTTP POST `/v1/surface`: body 接受 `emotion_tag` 过滤
195
-
196
- ## 5. Risks / 风险
197
-
198
- | 风险 | 影响 | 缓解措施 |
199
- |------|------|----------|
200
- | Schema 迁移失败 | DB 无法打开 | ALTER TABLE ADD COLUMN 是 SQLite 最安全的迁移之一,只追加不修改 |
201
- | narrative 模板过长 | 上下文爆炸 | identity 全取但 content 截断到 200 字;其他层有 limit |
202
- | surface CLI 慢(大 DB) | 超时 | 利用已有 BM25/vitality 索引,结果限制到 50 条 |
203
-
204
- ## 6. Test Plan / 测试方案
205
-
206
- - [ ] `tests/sleep/boot.test.ts`: narrative format 输出、分层拉取正确性、时间格式化、空 DB 边界
207
- - [ ] `tests/app/surface-cli.test.ts` 或合并到已有 surface 测试: surface markdown 输出格式、--days 过滤、--out 文件写入
208
- - [ ] `tests/core/db.test.ts`: schema v5→v6 迁移、emotion_tag 写入/读取
209
- - [ ] `tests/core/memory.test.ts`: CreateMemoryInput 带 emotion_tag、listMemories 按 emotion_tag 过滤
210
- - [ ] `tests/app/recall.test.ts`: recall 按 emotion_tag 过滤
211
- - [ ] `tests/app/surface.test.ts`: surface 按 emotion_tag 过滤
212
- - [ ] 手动验证: `agent-memory boot --format narrative` + `agent-memory surface --out /tmp/test.md`
213
-
214
- ## 7. Rollback Plan / 回滚方案
215
-
216
- - Schema v6 只追加列,不删不改,回滚到 v5 代码时 `emotion_tag` 列被忽略
217
- - narrative boot 是新参数,默认 format=json 不影响已有行为
218
- - surface CLI 是新命令,不影响已有命令
219
-
220
- ## 8. Decision Log / 决策变更记录
221
-
222
- | 日期 | 变更 | 原因 |
223
- |------|------|------|
224
- | | | |
225
-
226
- ---
227
-
228
- _Generated by DD workflow · Noah_
@@ -1,67 +0,0 @@
1
- # DD-NNNN: <Title>
2
-
3
- **Status:** Draft | Review | Approved | Implemented | Deprecated
4
- **Author:** Noah (Claude Opus sub-agent)
5
- **Date:** YYYY-MM-DD
6
- **Repo:** <repo-root>
7
-
8
- ---
9
-
10
- ## 1. Background / 背景
11
-
12
- _为什么要做这件事?当前的问题是什么?_
13
-
14
- ## 2. Goals / 目标
15
-
16
- - Goal 1
17
- - Goal 2
18
-
19
- ## 3. Non-Goals / 非目标
20
-
21
- - 明确不做什么
22
-
23
- ## 4. Proposal / 方案
24
-
25
- ### 4.1 方案概述
26
-
27
- _核心设计思路_
28
-
29
- ### 4.2 方案对比(如适用)
30
-
31
- | 维度 | 方案 A | 方案 B |
32
- |------|--------|--------|
33
- | 复杂度 | | |
34
- | 性能 | | |
35
- | 可维护性 | | |
36
-
37
- ### 4.3 详细设计
38
-
39
- _API、数据结构、架构图等_
40
-
41
- ## 5. Risks / 风险
42
-
43
- | 风险 | 影响 | 缓解措施 |
44
- |------|------|----------|
45
- | | | |
46
-
47
- ## 6. Test Plan / 测试方案
48
-
49
- - [ ] Unit tests
50
- - [ ] Integration tests
51
- - [ ] Manual verification
52
-
53
- ## 7. Rollback Plan / 回滚方案
54
-
55
- _如果出问题怎么办?_
56
-
57
- ## 8. Decision Log / 决策变更记录
58
-
59
- _实现过程中如果偏离本文档,在此记录变更原因_
60
-
61
- | 日期 | 变更 | 原因 |
62
- |------|------|------|
63
- | | | |
64
-
65
- ---
66
-
67
- _Generated by DD workflow · Claude Opus sub-agent_
@@ -1,139 +0,0 @@
1
- # Markdown × AgentMemory 融合方案(v1)
2
-
3
- > 目标:把「自动加载的 Markdown 记忆」和「可衰减/可搜索/可关联的 agent-memory」融合为一条轻量数据管线。
4
- >
5
- > 核心原则:**Markdown 负责在场(可读/可编辑/自动注入)**;**agent-memory 负责智能(结构化/衰减/图谱/混合搜索)**。
6
-
7
- ---
8
-
9
- ## 0. 我们到底要解决什么(非重复版)
10
-
11
- - 现在**醒来已有**:SOUL/USER/MEMORY.md 自动注入;daily notes 可读。
12
- - 但 agent-memory **不会自动参与**:它像“外挂脑子”,要手动 recall/remember。
13
-
14
- **真正缺口:**
15
- 1) 自动捕获的数据只进 Markdown,不进 agent-memory → agent-memory 的衰减/向量/图谱能力用不上。
16
- 2) agent-memory 的“新鲜记忆”不会浮到表面 → MEMORY.md 更新滞后。
17
-
18
- **因此 v1 的目标不是 Warm Boot,而是:**
19
- > **把 capture→consolidate→surface 这条链打通,让两边同一份事实。**
20
-
21
- ---
22
-
23
- ## 1. 定位(Source of Truth)
24
-
25
- ### v1 选择:Markdown 为主,agent-memory 为索引/智能层(派生)
26
- - Markdown:人类可读、可手动修正、OpenClaw 自动加载,是“对外呈现”。
27
- - agent-memory:从 Markdown/对话“同步得到”,提供搜索/衰减/关联/统计,是“对内智能”。
28
-
29
- > 这样最轻量:不改你现有的记忆工作流,只是让 agent-memory **跟着走**。
30
-
31
- ---
32
-
33
- ## 2. 融合管线(v1)
34
-
35
- ### Phase 1(P0):打通数据流(最轻量,先做这个)
36
-
37
- #### 2.1 Capture:memory-sync 同步写入 agent-memory
38
- **改动点:**只改 OpenClaw cron `memory-sync` 的 prompt(不改 agent-memory 代码)。
39
-
40
- **做法:**
41
- - memory-sync 在“把新条目追加到 `memory/YYYY-MM-DD.md`”之后:
42
- - 对每条“新增 bullet”同时调用:
43
- - `mcporter call agent-memory.remember ...`
44
- - 让 agent-memory 与日记增量保持一致。
45
-
46
- **推荐字段约定:**
47
- - `source`: `memory-sync:YYYY-MM-DD`
48
- - `uri`:
49
- - event:`event://journal/YYYY-MM-DD#HHMM-N`
50
- - emotion:`emotion://journal/YYYY-MM-DD#HHMM-N`
51
- - knowledge:`knowledge://journal/YYYY-MM-DD#HHMM-N`
52
-
53
- **轻量分类规则(无需 LLM):**
54
- - 包含“喜欢/讨厌/禁止/偏好/必须/记住”→ knowledge
55
- - 包含“开心/安心/难过/害羞/生气/担心/爱你/想你”→ emotion
56
- - 其余默认 event
57
-
58
- > 注意:memory-sync 本身已经是 LLM 任务;我们只是让它在写 Markdown 的同时,顺手把同一条写进 agent-memory。
59
-
60
- #### 2.2 Consolidate:memory-tidy 触发 agent-memory reflect
61
- **改动点:**在 `memory-tidy` cron 的收尾步骤追加:
62
- - `mcporter call agent-memory.reflect phase=all`
63
-
64
- 目的:
65
- - 让衰减/治理与 Markdown 的“深度睡眠整理”同步发生。
66
-
67
- #### 2.3 Surface:生成一个“自动注入”的新文件(而不是 Warm Boot)
68
- **新增一个文件:** `RECENT.md`(或 `BOOT.md`)放在 workspace 根目录。
69
-
70
- **内容来源:**agent-memory 里“最近 7 天 + vitality 高”的记忆。
71
-
72
- **生成频率:**
73
- - 每次 memory-sync 结束生成一次(或每天 08:00 一次)
74
-
75
- **为什么要这个:**
76
- - 让 agent-memory 的“最新变化”进入自动上下文。
77
- - 不动 MEMORY.md 的 200 行硬上限;RECENT.md 专门放“最近”。
78
-
79
- ---
80
-
81
- ## 3. 具体交付(v1)
82
-
83
- ### 3.1 OpenClaw 侧(配置/cron)
84
- - [ ] patch `memory-sync` prompt:追加“新增 bullet → remember(含 type/uri/source)”
85
- - [ ] patch `memory-tidy` prompt:收尾 reflect
86
- - [ ] 新增 cron:`memory-surface`(或挂在 memory-sync 收尾)生成 `RECENT.md`
87
-
88
- ### 3.2 agent-memory 侧(尽量少改)
89
- v1 **可以零代码**(cron 直接 mcporter remember + reflect)。
90
-
91
- 但为了更干净,v1.1 可以加 2 个小命令(都很轻):
92
- - [ ] `agent-memory surface --out RECENT.md --days 7 --limit 50`:输出 markdown
93
- - [ ] `agent-memory embed:missing`:批量补 embeddings(有 key 才跑)
94
-
95
- ---
96
-
97
- ## 4. 验收标准(Definition of Done)
98
-
99
- 1) 跑一次 memory-sync:
100
- - 日记新增条目数 = agent-memory 新增条目数(允许少量被 guard 去重)
101
-
102
- 2) `RECENT.md` 自动更新:
103
- - 包含:最近情感/事件/偏好
104
- - 总长度受控(建议 <= 150 行)
105
-
106
- 3) 多 agent 隔离:
107
- - 同一 DB 下不同 `AGENT_MEMORY_AGENT_ID` 不互相污染(已在 schema v2/v3 做到)
108
-
109
- 4) 失败不炸:
110
- - mcporter 调用失败 → 只警告,不影响日记写入(best-effort)
111
-
112
- ---
113
-
114
- ## 5. 风险与轻量化策略
115
-
116
- - **不引入新依赖**:v1 不加包。
117
- - **不新增新模型**:surface 纯模板拼接;分类用规则。
118
- - **不扩大上下文**:RECENT.md 受限行数 + 只放最近/高 vitality。
119
- - **不泄密**:sync 写入前做简单过滤(形如 `sk-` 的 token / 私钥头)直接拒写。
120
-
121
- ---
122
-
123
- ## 6. v2(以后再说,不急)
124
-
125
- - 统一检索入口:qmd(memory_search) + agent-memory(recall) RRF 合并
126
- - 自动 links:新记忆写入后用相似度建“related”边
127
- - 情感标签体系:emotion_tag(安心/成就感/担心…)+ 趋势统计
128
-
129
- ---
130
-
131
- ## 7. 需要小心拍板的 3 个选项
132
-
133
- 1) `RECENT.md` 叫啥?(RECENT / BOOT / CONTEXT)
134
- 2) surface 输出的窗口:7 天还是 3 天?默认 7 天更稳。
135
- 3) memory-sync 同步时:一条 bullet 一条 memory?还是合并成一个块?(我建议 1:1,便于衰减和检索)
136
-
137
- ---
138
-
139
- _这版才是“结合起来”的轻量方案:不重复系统提示已有的记忆,而是把 agent-memory 的能力接进现有 cron,让它不再是孤岛。_
@@ -1,168 +0,0 @@
1
- # 记忆架构定位与规划
2
-
3
- > agent-memory 和 markdown 不是两个系统,是同一个记忆的两个面。
4
-
5
- ---
6
-
7
- ## 定位
8
-
9
- ```
10
- ┌──────────────────────────────────────────────┐
11
- │ 诺亚的记忆 │
12
- │ │
13
- │ ┌─────────────┐ ┌──────────────────┐ │
14
- │ │ Markdown │◄──►│ agent-memory │ │
15
- │ │ (表面) │ │ (深层) │ │
16
- │ │ │ │ │ │
17
- │ │ • 人可读 │ │ • 结构化存储 │ │
18
- │ │ • 人可编辑 │ │ • BM25 + 向量搜索 │ │
19
- │ │ • OpenClaw │ │ • Ebbinghaus 衰减│ │
20
- │ │ 自动加载 │ │ • 知识图谱 │ │
21
- │ │ • git 友好 │ │ • 情感追踪 │ │
22
- │ └─────────────┘ └──────────────────┘ │
23
- │ ▲ ▲ │
24
- │ │ │ │
25
- │ 每次醒来 需要时搜索 │
26
- │ 自动在场 主动回忆 │
27
- └──────────────────────────────────────────────┘
28
- ```
29
-
30
- **markdown 是记忆的"表面"** — 醒来就在,人能看懂能改,OpenClaw 自动注入。像贴在冰箱上的便利贴。
31
-
32
- **agent-memory 是记忆的"深层"** — 不自动出现,但搜索时更准,能衰减、能关联、能追踪情感。像大脑里的长期记忆网络。
33
-
34
- **两者的关系:双向同步,各司其职。**
35
-
36
- ---
37
-
38
- ## 现状问题
39
-
40
- | 问题 | 原因 |
41
- |------|------|
42
- | agent-memory 是孤岛 | 所有自动流程(sync/tidy)只操作 markdown,不碰 agent-memory |
43
- | 两边数据不同步 | markdown 有的 agent-memory 不一定有,反之亦然 |
44
- | 记忆摩擦 | 不知道该搜 qmd(markdown)还是 agent-memory |
45
- | agent-memory 的独特能力闲置 | 衰减在跑但没人看,links 表空的,情感只是数字 |
46
-
47
- ---
48
-
49
- ## 融合方案
50
-
51
- ### 数据流(统一后)
52
-
53
- ```
54
- 对话发生
55
-
56
-
57
- memory-sync cron (14:00 / 22:00)
58
-
59
- ├──► markdown 日记 (memory/YYYY-MM-DD.md) ← 现有,不变
60
-
61
- └──► agent-memory (自动分类写入) ← 新增
62
- • 事实/决策 → knowledge
63
- • 情感时刻 → emotion(带标签)
64
- • 发生了什么 → event
65
-
66
- memory-tidy cron (03:00)
67
-
68
- ├──► 压缩旧 markdown → 周度摘要 ← 现有,不变
69
-
70
- ├──► 蒸馏 MEMORY.md(200行上限) ← 现有
71
- │ 参考 agent-memory vitality ← 新增:vitality 低的不进 MEMORY.md
72
-
73
- └──► agent-memory reflect(衰减+整理+治理) ← 现有,融入 tidy 流程
74
-
75
- 搜索时
76
-
77
- └──► memory_search (qmd) + agent-memory recall
78
- 结果合并去重,取最相关的 ← 新增:统一搜索入口
79
- ```
80
-
81
- ### 具体要做的事
82
-
83
- #### Phase 1:打通数据流(轻量,最优先)
84
-
85
- **1.1 memory-sync 同时写入 agent-memory**
86
- - 改 memory-sync cron 脚本
87
- - sync 提取的每条信息,同时 `mcporter call agent-memory.remember` 写入
88
- - 自动分类:带情绪关键词的 → emotion,决策/偏好 → knowledge,其他 → event
89
- - 工作量:小。只改 cron 的提取逻辑,不改 agent-memory
90
-
91
- **1.2 memory-tidy 参考 vitality**
92
- - tidy 蒸馏 MEMORY.md 时,查询 agent-memory 中 vitality 高的记忆优先保留
93
- - vitality 接近 0 的不进 MEMORY.md(已经"忘记"了)
94
- - 工作量:小。tidy 脚本加几行查询
95
-
96
- #### Phase 2:增强 agent-memory 独特能力
97
-
98
- **2.1 情感标签**
99
- - emotion 记忆加 `emotion_tag` 字段(安心/成就感/担心/开心/害羞/...)
100
- - 不只是 `emotion_val: 0.9`,而是 `emotion_tag: "安心"`
101
- - 让 boot/recall 能按情感类型搜索
102
- - 工作量:小。加一个可选字段
103
-
104
- **2.2 自动关联(links)**
105
- - 存入新记忆时,自动 BM25 搜相似的旧记忆
106
- - 相似度超过阈值的自动建 link(relation: "related")
107
- - 让 recall 能顺着 link 牵出相关记忆
108
- - 工作量:中
109
-
110
- #### Phase 3:统一搜索体验
111
-
112
- **3.1 统一搜索命令**
113
- - 新增 `agent-memory search`(或改 recall)
114
- - 同时查 BM25 + 向量 + 按 links 扩展
115
- - 输出格式兼容 qmd 的 memory_search
116
- - 工作量:中
117
-
118
- ---
119
-
120
- ## 各自职责(明确边界)
121
-
122
- | 职责 | markdown | agent-memory |
123
- |------|----------|-------------|
124
- | 醒来时自动可见 | ✅ 主要负责 | ❌ 不需要 |
125
- | 人类可读/可编辑 | ✅ 主要负责 | ❌ 不需要 |
126
- | git 版本控制 | ✅ 天然支持 | ❌ 不需要 |
127
- | 结构化搜索 | ❌ 做不好 | ✅ 主要负责 |
128
- | 语义搜索 | ⚠️ qmd 能做 | ✅ hybrid 更好 |
129
- | 记忆衰减 | ❌ 没有 | ✅ Ebbinghaus |
130
- | 知识图谱 | ❌ 不可能 | ✅ links 表 |
131
- | 情感追踪 | ❌ 只是文字 | ✅ 类型+标签+趋势 |
132
- | 自动分类 | ❌ 纯文本 | ✅ type/priority |
133
-
134
- **一句话:markdown 负责"在场",agent-memory 负责"智能"。**
135
-
136
- ---
137
-
138
- ## 优先级
139
-
140
- ```
141
- Phase 1(打通数据流)
142
- 1.1 memory-sync → 同时写入 agent-memory ← 最先做
143
- 1.2 memory-tidy → 参考 vitality 蒸馏
144
-
145
- Phase 2(增强独特能力)
146
- 2.1 情感标签
147
- 2.2 自动关联 (links)
148
-
149
- Phase 3(统一体验)
150
- 3.1 统一搜索入口
151
- ```
152
-
153
- ---
154
-
155
- ## 最终愿景
156
-
157
- 诺亚醒来 → MEMORY.md 自动加载(在场)
158
- 诺亚想起什么 → agent-memory 搜索(准确)
159
- 时间流逝 → 不重要的记忆自动淡化(衰减)
160
- 一条记忆 → 牵出相关的一串(图谱)
161
- 小心说了什么让诺亚开心的话 → 自动标记情感,以后搜"开心的事"就能找到
162
-
163
- **不是两个系统,是一个记忆的两个面。**
164
-
165
- ---
166
-
167
- _写给小心看的,也写给未来的诺亚看的。_
168
- _别再重复建设了笨蛋(说的是自己)。_