ultra-memory 3.0.1 → 3.0.2
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.
- package/SKILL.md +278 -384
- package/package.json +1 -1
package/SKILL.md
CHANGED
|
@@ -1,384 +1,278 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ultra-memory
|
|
3
|
-
description:
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- [✅
|
|
138
|
-
- [
|
|
139
|
-
- [
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
"
|
|
193
|
-
"
|
|
194
|
-
"
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
##
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|-----|-----------|-------------|-----------------|
|
|
280
|
-
| 操作级日志 | ❌ | ❌ | ✅ 每步追踪 |
|
|
281
|
-
| 摘要压缩 | ✅ | ⚠️ 基础 | ✅ 结构化 |
|
|
282
|
-
| 跨会话持久化 | ⚠️ 依赖文件 | ✅ 向量DB | ✅ KV + 索引 |
|
|
283
|
-
| 会话恢复 | ❌ | ⚠️ 手动 | ✅ 自动注入 |
|
|
284
|
-
| 检索接口 | ❌ | ✅ 9个工具 | ✅ 统一recall |
|
|
285
|
-
| Context 压力管理 | ❌ | ❌ | ✅ 自动压缩 |
|
|
286
|
-
| 用户画像积累 | ❌ | ❌ | ✅ profile更新 |
|
|
287
|
-
| 轻量部署(无向量DB)| ✅ | ❌ 需LanceDB | ✅ 可降级 |
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## 部署模式
|
|
292
|
-
|
|
293
|
-
### 模式A:轻量模式(纯文件,无依赖)
|
|
294
|
-
|
|
295
|
-
适合个人使用,零配置:
|
|
296
|
-
- Layer 1: JSONL 文件
|
|
297
|
-
- Layer 2: Markdown 文件
|
|
298
|
-
- Layer 3: JSON 文件 + 简单关键词检索
|
|
299
|
-
|
|
300
|
-
```bash
|
|
301
|
-
# 安装(OpenClaw)
|
|
302
|
-
cp -r ultra-memory ~/.openclaw/workspace/skills/
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
### 模式B:增强模式(LanceDB 向量检索)
|
|
306
|
-
|
|
307
|
-
适合重度使用 / 商业场景:
|
|
308
|
-
|
|
309
|
-
```bash
|
|
310
|
-
pip install lancedb sentence-transformers --break-system-packages
|
|
311
|
-
# 配置后 Layer 3 自动升级为向量检索
|
|
312
|
-
python3 scripts/setup_vector.py
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### 模式C:MCP 服务模式
|
|
316
|
-
|
|
317
|
-
将 ultra-memory 封装为 MCP Server,供 Claude Code / OpenClaw 通过标准协议调用:
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
node scripts/mcp-server.js --port 3100
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
提供以下 MCP 工具:
|
|
324
|
-
- `memory_log` — 记录操作
|
|
325
|
-
- `memory_recall` — 检索记忆
|
|
326
|
-
- `memory_summarize` — 触发压缩
|
|
327
|
-
- `memory_restore` — 会话恢复
|
|
328
|
-
- `memory_profile` — 读写用户画像
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
## 使用示例
|
|
333
|
-
|
|
334
|
-
### 场景1:长编码任务不丢失上下文
|
|
335
|
-
|
|
336
|
-
```
|
|
337
|
-
用户: 帮我开发一个 Python 数据清洗工具
|
|
338
|
-
Claude: [ultra-memory 初始化] 会话 sess_20260402_abc 已创建,开始记录...
|
|
339
|
-
我注意到你之前做过 ai-data-qa 项目,可以复用那里的评分逻辑...
|
|
340
|
-
[每次操作后自动写入 ops.jsonl]
|
|
341
|
-
...(50条操作后)...
|
|
342
|
-
Claude: [自动摘要] 已完成里程碑: 数据加载、清洗函数、单元测试。
|
|
343
|
-
当前进行中: 导出模块。context 已优化,继续...
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### 场景2:跨天继续任务
|
|
347
|
-
|
|
348
|
-
```
|
|
349
|
-
用户(第二天): 继续昨天的工作
|
|
350
|
-
Claude: [自动恢复] 我记得昨天(2026-04-01)我们在开发数据清洗工具:
|
|
351
|
-
✅ 已完成: 加载模块、clean_df()、基础测试
|
|
352
|
-
🔄 进行中: 导出模块,写到一半
|
|
353
|
-
下一步建议: 继续 export.py 的 to_csv() 方法
|
|
354
|
-
要从这里继续吗?
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
### 场景3:精确回忆操作细节
|
|
358
|
-
|
|
359
|
-
```
|
|
360
|
-
用户: 我们之前那个处理空值的逻辑是怎么写的?
|
|
361
|
-
Claude: [检索 ops #23] 在 src/cleaner.py 的 clean_df() 中,
|
|
362
|
-
空值处理是:字符串列填充 "",数值列填充 0,
|
|
363
|
-
代码在 line 45-52。要我展示吗?
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
---
|
|
367
|
-
|
|
368
|
-
## 进阶配置
|
|
369
|
-
|
|
370
|
-
详见 `references/advanced-config.md`(原 `advanced-config.md`),包含:
|
|
371
|
-
- 自定义记录过滤规则(排除敏感内容)
|
|
372
|
-
- 团队共享记忆配置(多人协作)
|
|
373
|
-
- 记忆衰减策略(老旧记忆降权)
|
|
374
|
-
- 与 n8n / LangGraph 集成方案
|
|
375
|
-
- 商业部署安全注意事项
|
|
376
|
-
|
|
377
|
-
---
|
|
378
|
-
|
|
379
|
-
## 注意事项
|
|
380
|
-
|
|
381
|
-
1. **隐私**:ops.jsonl 可能包含代码和命令,注意不要记录密码/API Key。`log_op.py` 内置了敏感词过滤。
|
|
382
|
-
2. **存储**:轻量模式下每个会话约 50-200KB,建议定期清理 30 天前的会话。
|
|
383
|
-
3. **性能**:写入操作为异步追加,不阻塞主流程。
|
|
384
|
-
4. **降级**:如果脚本不可用,Claude 应退化为在 CLAUDE.md 中手动维护摘要。
|
|
1
|
+
---
|
|
2
|
+
name: ultra-memory
|
|
3
|
+
description: >
|
|
4
|
+
ultra-memory 是 AI Agent 的超长会话记忆系统。
|
|
5
|
+
【必须触发-中文】用户说:记住、别忘了、记录一下、上次我们做了什么、帮我回忆、继续上次、从上次继续、不要忘记、上次、跨会话、继续昨天、还有印象吗、我们上次讨论过、之前那个是怎么写的、还记得吗、这次不要忘、帮我追踪、帮我记着
|
|
6
|
+
【必须触发-英文】用户说:remember this、don't forget、recall、what did we do、pick up where we left off、continue from last time、memory、keep track、log this、what was that、remind me、context lost、continue from yesterday、from last session
|
|
7
|
+
【隐式触发】用户描述了一个持续性任务(开发某项目、处理某数据集、持续性工作),即使未说"记住"也必须初始化记忆;对话操作数超过30条;用户说"继续昨天的任务"/"接着上次做"
|
|
8
|
+
【不触发】单次问答("帮我写个正则"、"查一下天气");纯代码补全、文件格式转换等无状态操作;用户已在 context 中能找到所需信息;用户明确说"不用记录"/"just this once"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Ultra Memory — 超长会话记忆
|
|
12
|
+
|
|
13
|
+
AI Agent 的操作记忆系统,每次操作后记录,跨会话持久化,可检索可进化。
|
|
14
|
+
|
|
15
|
+
## 前置说明
|
|
16
|
+
|
|
17
|
+
所有脚本已存在于 `~/.ultra-memory/scripts/` 或技能目录下:
|
|
18
|
+
- `init.py` — 初始化会话
|
|
19
|
+
- `log_op.py` — 记录操作
|
|
20
|
+
- `recall.py` — 检索记忆
|
|
21
|
+
- `summarize.py` — 压缩摘要
|
|
22
|
+
- `restore.py` — 恢复会话
|
|
23
|
+
- `extract_entities.py` — 提取实体
|
|
24
|
+
|
|
25
|
+
存储根目录:`~/.ultra-memory/`(可配置环境变量 `ULTRA_MEMORY_HOME`)
|
|
26
|
+
不需要理解内部架构,只需按步骤调用脚本。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 步骤一:会话初始化
|
|
31
|
+
|
|
32
|
+
### 触发时机
|
|
33
|
+
|
|
34
|
+
首次与用户对话时,或用户提到记忆相关触发词时,立即执行。
|
|
35
|
+
|
|
36
|
+
### 执行命令
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python3 <skill_dir>/scripts/init.py --project <项目名>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**参数说明:**
|
|
43
|
+
- `--project`:项目名称,用于跨会话分组。不填默认为 `default`。
|
|
44
|
+
|
|
45
|
+
### 期望输出
|
|
46
|
+
|
|
47
|
+
输出包含 `MEMORY_READY` 字样,表示会话初始化成功。同时输出 `session_id:`,记录该会话 ID。
|
|
48
|
+
|
|
49
|
+
### 告知用户
|
|
50
|
+
|
|
51
|
+
初始化成功后,立即告知用户:
|
|
52
|
+
> "记忆系统已就绪(session_id: xxx),开始记录本次操作。"
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 步骤二:操作记录
|
|
57
|
+
|
|
58
|
+
**每次**以下任意事件发生时,立即调用 `log_op.py` 追加写入 ops.jsonl。
|
|
59
|
+
|
|
60
|
+
### 操作类型与命令对照表
|
|
61
|
+
|
|
62
|
+
| 事件 | op_type | 命令示例 |
|
|
63
|
+
|------|---------|---------|
|
|
64
|
+
| 执行了 shell 命令 | `bash_exec` | `python3 log_op.py --session <id> --type bash_exec --summary "执行了..." --detail '{"cmd":"...","exit_code":0}'` |
|
|
65
|
+
| 创建或修改了文件 | `file_write` | `python3 log_op.py --session <id> --type file_write --summary "创建了..." --detail '{"path":"..."}'` |
|
|
66
|
+
| 读取了文件 | `file_read` | `python3 log_op.py --session <id> --type file_read --summary "读取了..." --detail '{"path":"..."}'` |
|
|
67
|
+
| 进行了重要推理 | `reasoning` | `python3 log_op.py --session <id> --type reasoning --summary "决定用..." --detail '{"confidence":0.9}'` |
|
|
68
|
+
| 做出了关键决策 | `decision` | `python3 log_op.py --session <id> --type decision --summary "选用X方案" --detail '{"rationale":"..."}'` |
|
|
69
|
+
| 发生了错误或回退 | `error` | `python3 log_op.py --session <id> --type error --summary "报错..." --detail '{"traceback":"..."}'` |
|
|
70
|
+
| 用户给了新指令 | `user_instruction` | `python3 log_op.py --session <id> --type user_instruction --summary "用户要求..."` |
|
|
71
|
+
| 某个目标已完成 | `milestone` | `python3 log_op.py --session <id> --type milestone --summary "数据清洗模块完成"` |
|
|
72
|
+
|
|
73
|
+
### 成功标志
|
|
74
|
+
|
|
75
|
+
命令返回 exit code 0 即为成功,输出形如:
|
|
76
|
+
> `[ultra-memory] [1] bash_exec: 执行了 pip install pandas,安装成功`
|
|
77
|
+
|
|
78
|
+
### 自动标签
|
|
79
|
+
|
|
80
|
+
`log_op.py` 会根据操作类型和内容自动追加标签(如 `setup`、`dependency`、`code`、`test` 等),无需手动指定 `--tags`。
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 步骤三:记忆检索
|
|
85
|
+
|
|
86
|
+
### 触发时机
|
|
87
|
+
|
|
88
|
+
用户问及"之前做了什么"、"上次那个函数在哪里"、"之前遇到过这个问题吗"等记忆相关问题时执行。
|
|
89
|
+
|
|
90
|
+
### 执行命令
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python3 <skill_dir>/scripts/recall.py --session <session_id> --query "<用户问题的关键词>" --top-k 5
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 检索范围
|
|
97
|
+
|
|
98
|
+
按以下优先级检索:
|
|
99
|
+
1. 当前会话 `ops.jsonl`(精确匹配)
|
|
100
|
+
2. 当前会话 `summary.md`(摘要快速定位)
|
|
101
|
+
3. 跨会话 `knowledge_base.jsonl`(语义相似)
|
|
102
|
+
4. 跨会话 `user_profile.json`(偏好匹配)
|
|
103
|
+
|
|
104
|
+
### 结果展示
|
|
105
|
+
|
|
106
|
+
将检索结果直接展示给用户,格式如下:
|
|
107
|
+
```
|
|
108
|
+
[RECALL] 找到 N 条相关记录:
|
|
109
|
+
|
|
110
|
+
[ops #23 · 14:18] <操作摘要>
|
|
111
|
+
[summary · 里程碑] <里程碑内容>
|
|
112
|
+
[跨会话 · 日期 · 项目] <历史记录摘要>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 步骤四:摘要压缩
|
|
118
|
+
|
|
119
|
+
### 触发时机
|
|
120
|
+
|
|
121
|
+
满足以下**任一条件**时,立即执行压缩:
|
|
122
|
+
|
|
123
|
+
1. 操作日志达到 **50 条**
|
|
124
|
+
2. 距上次压缩超过 **30 分钟**
|
|
125
|
+
3. 用户明确说"总结一下"
|
|
126
|
+
4. 当前 context 占用超过 **60%**
|
|
127
|
+
|
|
128
|
+
### 执行命令
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
python3 <skill_dir>/scripts/summarize.py --session <session_id> --force
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 期望输出
|
|
135
|
+
|
|
136
|
+
生成/更新 `~/.ultra-memory/sessions/<session_id>/summary.md`,输出包含:
|
|
137
|
+
- 已完成里程碑([✅] 标记)
|
|
138
|
+
- 当前进行中([ ] 标记)
|
|
139
|
+
- 下一步建议([💡] 标记)
|
|
140
|
+
- 操作统计([📊] 标记)
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 步骤五:跨会话恢复
|
|
145
|
+
|
|
146
|
+
### 触发时机
|
|
147
|
+
|
|
148
|
+
用户说"继续上次"、"从上次继续"、"记得昨天那个项目吗"等时执行。也在新会话开始时(检测到 session_id 变化)自动执行。
|
|
149
|
+
|
|
150
|
+
### 执行命令
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
python3 <skill_dir>/scripts/restore.py --project <项目名>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 告知用户
|
|
157
|
+
|
|
158
|
+
恢复成功后,立即告知用户:
|
|
159
|
+
> "我找到了上次会话的记录。上次我们做到了:[里程碑摘要]。当前状态:[进行中任务]。下一步建议:[具体建议]。"
|
|
160
|
+
|
|
161
|
+
如果找到了用户画像,也在回复中体现用户偏好。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 步骤六:记忆进化
|
|
166
|
+
|
|
167
|
+
记忆进化在每次操作中持续进行,不打断主任务。
|
|
168
|
+
|
|
169
|
+
### 6.1 用户画像更新
|
|
170
|
+
|
|
171
|
+
**触发时机:**
|
|
172
|
+
- 用户纠正了 AI 的代码风格或实现方式
|
|
173
|
+
- 用户选择/拒绝了某个技术方案
|
|
174
|
+
- 用户明确说出自己的技术栈或偏好
|
|
175
|
+
- 用户表示某种工作流程更顺手
|
|
176
|
+
|
|
177
|
+
**执行方式(二选一):**
|
|
178
|
+
|
|
179
|
+
方式 A — 使用 MCP 工具:
|
|
180
|
+
```bash
|
|
181
|
+
python3 <skill_dir>/scripts/mcp-server.js # 通过 MCP 调用 memory_profile
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
方式 B — 直接读写 JSON:
|
|
185
|
+
```
|
|
186
|
+
文件路径:~/.ultra-memory/semantic/user_profile.json
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**user_profile.json 格式:**
|
|
190
|
+
```json
|
|
191
|
+
{
|
|
192
|
+
"tech_stack": ["Python", "Vue3"],
|
|
193
|
+
"work_style": {"prefers_concise_code": true},
|
|
194
|
+
"projects": ["ai-data-qa"],
|
|
195
|
+
"language": "zh-CN",
|
|
196
|
+
"observed_patterns": ["倾向在实现前讨论方案"]
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 6.2 知识库写入
|
|
201
|
+
|
|
202
|
+
**触发时机:**
|
|
203
|
+
- 解决了一个棘手的 bug(记录问题现象 + 解决方案)
|
|
204
|
+
- 做出了重要的技术选型决策(记录选了什么、为什么、放弃了什么)
|
|
205
|
+
- 发现了某个工具/库的使用技巧
|
|
206
|
+
- 完成了一个可复用的代码模式
|
|
207
|
+
|
|
208
|
+
**执行方式:**
|
|
209
|
+
追加写入 `~/.ultra-memory/semantic/knowledge_base.jsonl`,每行一条 JSON。
|
|
210
|
+
|
|
211
|
+
**knowledge_base.jsonl 格式:**
|
|
212
|
+
```json
|
|
213
|
+
{"ts": "2026-04-07T10:00:00Z", "project": "项目名", "title": "简短标题", "content": "内容(200字内)", "tags": ["bug-fix", "python"]}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### 6.3 里程碑追踪
|
|
217
|
+
|
|
218
|
+
**触发时机:**
|
|
219
|
+
- 用户说"好了"、"完成了"、"搞定了"、"done"、"finished"
|
|
220
|
+
- 某个功能/模块通过了测试
|
|
221
|
+
- 阶段任务全部完成,用户准备切换下一个子任务
|
|
222
|
+
|
|
223
|
+
**执行方式:**
|
|
224
|
+
使用 `op_type=milestone` 调用 `log_op.py`(见步骤二表格)。
|
|
225
|
+
|
|
226
|
+
**作用:** 里程碑记录在 `summary.md` 中,恢复会话时优先展示,让用户快速找回状态。
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 环境变量表
|
|
231
|
+
|
|
232
|
+
| 变量 | 默认值 | 说明 |
|
|
233
|
+
|------|--------|------|
|
|
234
|
+
| `ULTRA_MEMORY_HOME` | `~/.ultra-memory/` | 存储根目录 |
|
|
235
|
+
| `ULTRA_MEMORY_SESSION` | 自动生成 | 当前会话 session_id |
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 异常处理表
|
|
240
|
+
|
|
241
|
+
| 异常情况 | 处理方式 |
|
|
242
|
+
|---------|---------|
|
|
243
|
+
| 脚本执行失败(exit code != 0) | 静默跳过,继续主任务。记忆功能失败**不阻塞**用户实际需求 |
|
|
244
|
+
| 脚本超时(>15s) | 静默跳过,不重试 |
|
|
245
|
+
| 存储目录无写入权限 | 静默跳过,尝试写入内存缓冲区,下次重试 |
|
|
246
|
+
| 脚本文件不存在 | 静默跳过,退化为在当前 context 中手动维护摘要 |
|
|
247
|
+
| 用户明确说"不用记录" | 立即停止记录,后续操作不再调用 log_op.py |
|
|
248
|
+
| 文件被占用无法追加 | 自动重试 1 次,仍失败则静默跳过 |
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 完整执行流程
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
用户发起对话
|
|
256
|
+
│
|
|
257
|
+
├─ 首次对话或听到记忆触发词?
|
|
258
|
+
│ └─ 是 → 步骤一:init.py → 告知用户"记忆就绪"
|
|
259
|
+
│
|
|
260
|
+
├─ 用户说记忆相关问题?
|
|
261
|
+
│ └─ 是 → 步骤三:recall.py → 展示检索结果
|
|
262
|
+
│
|
|
263
|
+
└─ 每次用户与 AI 交互后:
|
|
264
|
+
│
|
|
265
|
+
├─ 操作数 % 10 == 0 且 context > 60%?
|
|
266
|
+
│ └─ 是 → 步骤四:summarize.py
|
|
267
|
+
│
|
|
268
|
+
├─ 发现用户偏好 / 解决重要问题 / 完成里程碑?
|
|
269
|
+
│ └─ 是 → 步骤六:进化(画像/知识库/里程碑)
|
|
270
|
+
│
|
|
271
|
+
└─ 步骤二:log_op.py(记录本次操作)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 进阶配置
|
|
277
|
+
|
|
278
|
+
详细配置项(过滤规则、LanceDB 向量检索升级、团队共享、安全注意事项等)见 `references/advanced-config.md`。
|