memex-agent-memory 0.1.0__tar.gz
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.
- memex_agent_memory-0.1.0/MANIFEST.in +6 -0
- memex_agent_memory-0.1.0/PKG-INFO +285 -0
- memex_agent_memory-0.1.0/README.md +259 -0
- memex_agent_memory-0.1.0/memex/SKILL.md +178 -0
- memex_agent_memory-0.1.0/memex/__init__.py +1 -0
- memex_agent_memory-0.1.0/memex/_config.py +88 -0
- memex_agent_memory-0.1.0/memex/_consolidation.py +142 -0
- memex_agent_memory-0.1.0/memex/_contradiction.py +206 -0
- memex_agent_memory-0.1.0/memex/_decay.py +114 -0
- memex_agent_memory-0.1.0/memex/_distill.py +250 -0
- memex_agent_memory-0.1.0/memex/_embed.py +44 -0
- memex_agent_memory-0.1.0/memex/_hybrid.py +128 -0
- memex_agent_memory-0.1.0/memex/_revision.py +167 -0
- memex_agent_memory-0.1.0/memex/_types.py +92 -0
- memex_agent_memory-0.1.0/memex/cli.py +228 -0
- memex_agent_memory-0.1.0/memex/store/__init__.py +5 -0
- memex_agent_memory-0.1.0/memex/store/factory.py +30 -0
- memex_agent_memory-0.1.0/memex/store/interface.py +79 -0
- memex_agent_memory-0.1.0/memex/store/lancedb.py +190 -0
- memex_agent_memory-0.1.0/memex/store/memory.py +99 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/PKG-INFO +285 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/SOURCES.txt +26 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/dependency_links.txt +1 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/entry_points.txt +2 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/requires.txt +10 -0
- memex_agent_memory-0.1.0/memex_agent_memory.egg-info/top_level.txt +1 -0
- memex_agent_memory-0.1.0/pyproject.toml +61 -0
- memex_agent_memory-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: memex-agent-memory
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Agent 记忆系统 — 轻量级本地向量数据库 + CLI + Agent Skill
|
|
5
|
+
Author-email: Wang Qiu <wangqiu777@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/winsonwq/memex
|
|
8
|
+
Project-URL: Repository, https://github.com/winsonwq/memex
|
|
9
|
+
Project-URL: Documentation, https://github.com/winsonwq/memex#readme
|
|
10
|
+
Keywords: ai,agent,memory,vector-search,lancedb
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: lancedb>=0.11.0
|
|
18
|
+
Requires-Dist: InstructorEmbedding>=1.0.1
|
|
19
|
+
Requires-Dist: sentence-transformers>=2.7.0
|
|
20
|
+
Requires-Dist: click>=8.0.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
24
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
25
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
26
|
+
|
|
27
|
+
# Memex — Agent 记忆系统
|
|
28
|
+
|
|
29
|
+
> 用嵌入式向量数据库实现轻量级 Agent 记忆系统,以 CLI + Skill 的形式交付。
|
|
30
|
+
|
|
31
|
+
## 一句话
|
|
32
|
+
|
|
33
|
+
**Memex 让 Agent 记住一切,实现跨会话的持续学习。**
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 特性
|
|
38
|
+
|
|
39
|
+
- **原文存储** — 原文保留,不依赖 LLM 提取摘要
|
|
40
|
+
- **向量语义搜索** — 支持自然语言查询记忆
|
|
41
|
+
- **六种记忆类型** — constraint / user_model / strategy / system_pattern / belief / journal
|
|
42
|
+
- **隐私可控** — recall / purge 用户自主控制
|
|
43
|
+
- **多 Agent 支持** — 通过 repo 命名空间隔离
|
|
44
|
+
- **便携设计** — `~/.memex/` 打包迁移
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Summary
|
|
49
|
+
|
|
50
|
+
Memex 定位与 MemPalace 不同:
|
|
51
|
+
|
|
52
|
+
- **MemPalace** → maximize **recall**(找回正确答案),适合 benchmark
|
|
53
|
+
- **Memex Phase 2** → maximize **utility**(找回最有用的答案),适合真实场景
|
|
54
|
+
|
|
55
|
+
Phase 2 独有的高级机制:语义蒸馏、混合检索、记忆修订、衰减遗忘、矛盾检测、记忆合并。这些机制没有公开 benchmark,需要在真实使用中验证价值。
|
|
56
|
+
|
|
57
|
+
📄 详见:[docs/comparison.md](docs/comparison.md)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 快速开始
|
|
62
|
+
|
|
63
|
+
### 安装
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install memex
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 初始化
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
memex init
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 存入记忆
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
memex save --type belief --content "用户喜欢简洁的回复风格" --repo user
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 搜索记忆
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
memex search "用户有什么偏好" --repo user --limit 5
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**返回 JSON**(供 Agent 解析):
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"query": "用户有什么偏好",
|
|
92
|
+
"results": [
|
|
93
|
+
{
|
|
94
|
+
"id": "uuid",
|
|
95
|
+
"type": "belief",
|
|
96
|
+
"content": "用户喜欢简洁的回复风格",
|
|
97
|
+
"importance": 0.7,
|
|
98
|
+
"confidence": 0.8,
|
|
99
|
+
"score": 0.92
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"total": 1
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 更多命令
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
memex list --repo user # 列出记忆
|
|
110
|
+
memex get <memory-id> # 获取单条
|
|
111
|
+
memex delete <memory-id> # 删除
|
|
112
|
+
memex stats # 统计
|
|
113
|
+
memex recall # 隐私查看
|
|
114
|
+
memex purge <memory-id> # 隐私删除
|
|
115
|
+
memex purge --all # 清空所有
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 记忆类型
|
|
121
|
+
|
|
122
|
+
| 类型 | 用途 | importance | 示例 |
|
|
123
|
+
|------|------|-----------|------|
|
|
124
|
+
| `constraint` | 强制规则 | 0.9 | "用户不喜欢废话" |
|
|
125
|
+
| `user_model` | 用户偏好 | 0.85 | "用户喜欢简洁回复" |
|
|
126
|
+
| `strategy` | 方法论 | 0.8 | "用分治法解决复杂问题" |
|
|
127
|
+
| `system_pattern` | 系统模式 | 0.75 | "项目采用前后端分离" |
|
|
128
|
+
| `belief` | 验证结论 | 0.7 | "Python 适合快速原型" |
|
|
129
|
+
| `journal` | 工作日志 | 0.4 | "今天完成了 xxx" |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 技术栈
|
|
134
|
+
|
|
135
|
+
| 组件 | 选择 |
|
|
136
|
+
|------|------|
|
|
137
|
+
| 向量数据库 | LanceDB(嵌入式,列式存储) |
|
|
138
|
+
| Embedding | BGE-base-zh-v1.5(中文优化) |
|
|
139
|
+
| CLI | Click |
|
|
140
|
+
| 存储抽象 | 可切换 LanceDB / Chroma / Memory |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 架构
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
memex/
|
|
148
|
+
├── src/memex/
|
|
149
|
+
│ ├── _types.py # MemoryRecord、MemoryType
|
|
150
|
+
│ ├── _config.py # 配置管理
|
|
151
|
+
│ ├── _embed.py # Embedding 生成
|
|
152
|
+
│ ├── store/ # 存储抽象层
|
|
153
|
+
│ │ ├── interface.py # VectorStore 接口
|
|
154
|
+
│ │ ├── lancedb.py # LanceDB 实现
|
|
155
|
+
│ │ └── memory.py # 内存实现(测试用)
|
|
156
|
+
│ └── cli.py # CLI 命令
|
|
157
|
+
├── skills/
|
|
158
|
+
│ └── memory-skill/
|
|
159
|
+
│ └── SKILL.md # 通用 Agent Skill
|
|
160
|
+
└── tests/
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 配置
|
|
166
|
+
|
|
167
|
+
配置文件:`~/.memex/config.toml`
|
|
168
|
+
|
|
169
|
+
```toml
|
|
170
|
+
[memory]
|
|
171
|
+
storage_path = "~/.memex/memory"
|
|
172
|
+
|
|
173
|
+
[vector_store]
|
|
174
|
+
provider = "lancedb"
|
|
175
|
+
|
|
176
|
+
[embedding]
|
|
177
|
+
model = "BAAI/bge-base-zh-v1.5"
|
|
178
|
+
dimension = 768
|
|
179
|
+
|
|
180
|
+
[retrieval]
|
|
181
|
+
default_limit = 10
|
|
182
|
+
min_similarity = 0.4
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 通用 Agent Skill
|
|
188
|
+
|
|
189
|
+
将 Memex 接入 Agent:
|
|
190
|
+
|
|
191
|
+
1. 复制 skill 到 `~/.openclaw/skills/memex/`
|
|
192
|
+
2. Agent 在合适的时机调用 `memex search` / `memex save`
|
|
193
|
+
|
|
194
|
+
详见 [`skills/memory-skill/SKILL.md`](skills/memory-skill/SKILL.md)
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## LongMemEval Benchmark
|
|
199
|
+
|
|
200
|
+
在 [LongMemEval](https://github.com/xiaowu0162/longmemeval)(ICLR 2025, UCLA + 腾讯 AI Lab)上测试了 Memex 的记忆召回能力。
|
|
201
|
+
|
|
202
|
+
### 测试配置
|
|
203
|
+
|
|
204
|
+
- **Embedding**: BAAI/bge-base-zh-v1.5(768 维)
|
|
205
|
+
- **存储**: LanceDB 嵌入式向量数据库
|
|
206
|
+
- **粒度**: Turn-level(每条记录 = 一个对话回合,约 550 条/题)
|
|
207
|
+
|
|
208
|
+
### 测试结果
|
|
209
|
+
|
|
210
|
+
| 配置 | 题数 | R@5 | R@10 | NDCG@10 |
|
|
211
|
+
|------|------|------|------|---------|
|
|
212
|
+
| MemPalace (baseline) | 500 | **96.6%** | 98.2% | 88.9% |
|
|
213
|
+
| Memex (turn-level) | 500 | **91.8%** | 94.0% | ~80% |
|
|
214
|
+
| Memex (session-level) | 500 | 85.8% | 92.2% | 78.9% |
|
|
215
|
+
|
|
216
|
+
### 粒度说明
|
|
217
|
+
|
|
218
|
+
LongMemEval 支持两种评估粒度:
|
|
219
|
+
|
|
220
|
+
| 粒度 | 每题记录数 | 说明 |
|
|
221
|
+
|------|-----------|------|
|
|
222
|
+
| **Turn-level** | ~550 条 | 每条 = 一个对话回合(user/assistant 的一条消息),最细粒度 |
|
|
223
|
+
| **Session-level** | ~53 条 | 每条 = 一个完整会话(30-40 回合聚成),较粗粒度 |
|
|
224
|
+
|
|
225
|
+
MemPalace 的 96.6% 是 turn-level 的结果。Turn-level 更接近真实场景——你的每一次对话、每一条消息,都可能藏着答案。
|
|
226
|
+
|
|
227
|
+
Memex 在 turn-level 达到 91.8%(vs MemPalace 96.6%),差距约 5 个百分点。
|
|
228
|
+
|
|
229
|
+
### 和 MemPalace 的差异
|
|
230
|
+
|
|
231
|
+
| 维度 | Memex | MemPalace |
|
|
232
|
+
|------|-------|----------|
|
|
233
|
+
| 向量数据库 | **LanceDB**(列式存储,高性能) | ChromaDB |
|
|
234
|
+
| 存储抽象 | **VectorStore 接口**,可切换后端 | 固定 ChromaDB |
|
|
235
|
+
| 记忆类型 | **六种分类**(constraint/user_model/...) | 纯 chunks |
|
|
236
|
+
| 接口 | **CLI + Agent Skill** 双接口 | API |
|
|
237
|
+
|
|
238
|
+
LanceDB 基于 Apache Arrow 列式存储,查询性能更强,存储更紧凑;BGE 中文 embedding 对中文对话的记忆召回更有优势。
|
|
239
|
+
|
|
240
|
+
### 核心发现
|
|
241
|
+
|
|
242
|
+
1. **原文存储有效**:不经过 LLM 提取的原文方案,在记忆召回任务上表现优异
|
|
243
|
+
2. **Turn-level 优于 Session-level**:粒度越细,能找回的细节越多
|
|
244
|
+
3. **存储抽象带来灵活性**:VectorStore 接口可以切换不同向量数据库后端
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 项目状态
|
|
249
|
+
|
|
250
|
+
**Phase 1: MVP** ✅
|
|
251
|
+
|
|
252
|
+
- [x] 核心类型定义
|
|
253
|
+
- [x] 存储抽象层(VectorStore 接口 + LanceDB 实现)
|
|
254
|
+
- [x] CLI 命令(init / save / search / get / list / delete / stats / recall / purge)
|
|
255
|
+
- [x] BGE embedding 集成
|
|
256
|
+
- [x] 基本测试
|
|
257
|
+
- [x] SKILL.md
|
|
258
|
+
|
|
259
|
+
**Phase 2**: 借鉴 OpenSwarm 的高级记忆机制 ✅
|
|
260
|
+
|
|
261
|
+
- [x] **语义蒸馏(Distillation)**:存入前过滤闲聊/情绪/依赖上下文的提问,只保留有价值的 insight
|
|
262
|
+
- [x] **混合检索(Hybrid Retrieval)**:final_score = 0.55×相似度 + 0.20×重要性 + 0.15×新鲜度 + 0.10×频率
|
|
263
|
+
- [x] **记忆修订(Revision)**:belief 被修订后重新计算 stability,支持不是 append-only
|
|
264
|
+
- [x] **衰减遗忘(Decay & Forgetting)**: decay ≥ 0.7 则归档,importance → 0.05
|
|
265
|
+
- [x] **矛盾检测(Contradiction Detection)**:基于关键词对检测语义冲突,importance 下降
|
|
266
|
+
- [x] **记忆合并(Consolidation)**:相似度 > 0.85 的记忆合并
|
|
267
|
+
|
|
268
|
+
**Phase 3**: 发布与分发
|
|
269
|
+
|
|
270
|
+
- [ ] `pip install memex` — 一键安装 CLI + Skill
|
|
271
|
+
- [ ] `pyproject.toml` — 打包配置
|
|
272
|
+
- [ ] Skill 自动安装到 `~/.agents/skills/memex/`(遵守 AgentSkills 规范,通用)
|
|
273
|
+
|
|
274
|
+
**Phase 4**: 评测数据
|
|
275
|
+
|
|
276
|
+
- [ ] 创建 `memex-benchmarks` 仓库
|
|
277
|
+
- [ ] distillation 数据集:should_store / should_reject 各 20-50 条
|
|
278
|
+
- [ ] contradiction 数据集:成对矛盾的记忆对 20-30 条
|
|
279
|
+
- [ ] 其他模块数据集:hybrid / revision / decay / consolidation
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## License
|
|
284
|
+
|
|
285
|
+
MIT
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Memex — Agent 记忆系统
|
|
2
|
+
|
|
3
|
+
> 用嵌入式向量数据库实现轻量级 Agent 记忆系统,以 CLI + Skill 的形式交付。
|
|
4
|
+
|
|
5
|
+
## 一句话
|
|
6
|
+
|
|
7
|
+
**Memex 让 Agent 记住一切,实现跨会话的持续学习。**
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 特性
|
|
12
|
+
|
|
13
|
+
- **原文存储** — 原文保留,不依赖 LLM 提取摘要
|
|
14
|
+
- **向量语义搜索** — 支持自然语言查询记忆
|
|
15
|
+
- **六种记忆类型** — constraint / user_model / strategy / system_pattern / belief / journal
|
|
16
|
+
- **隐私可控** — recall / purge 用户自主控制
|
|
17
|
+
- **多 Agent 支持** — 通过 repo 命名空间隔离
|
|
18
|
+
- **便携设计** — `~/.memex/` 打包迁移
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Summary
|
|
23
|
+
|
|
24
|
+
Memex 定位与 MemPalace 不同:
|
|
25
|
+
|
|
26
|
+
- **MemPalace** → maximize **recall**(找回正确答案),适合 benchmark
|
|
27
|
+
- **Memex Phase 2** → maximize **utility**(找回最有用的答案),适合真实场景
|
|
28
|
+
|
|
29
|
+
Phase 2 独有的高级机制:语义蒸馏、混合检索、记忆修订、衰减遗忘、矛盾检测、记忆合并。这些机制没有公开 benchmark,需要在真实使用中验证价值。
|
|
30
|
+
|
|
31
|
+
📄 详见:[docs/comparison.md](docs/comparison.md)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 快速开始
|
|
36
|
+
|
|
37
|
+
### 安装
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install memex
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 初始化
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
memex init
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 存入记忆
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
memex save --type belief --content "用户喜欢简洁的回复风格" --repo user
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 搜索记忆
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
memex search "用户有什么偏好" --repo user --limit 5
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**返回 JSON**(供 Agent 解析):
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"query": "用户有什么偏好",
|
|
66
|
+
"results": [
|
|
67
|
+
{
|
|
68
|
+
"id": "uuid",
|
|
69
|
+
"type": "belief",
|
|
70
|
+
"content": "用户喜欢简洁的回复风格",
|
|
71
|
+
"importance": 0.7,
|
|
72
|
+
"confidence": 0.8,
|
|
73
|
+
"score": 0.92
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"total": 1
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 更多命令
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
memex list --repo user # 列出记忆
|
|
84
|
+
memex get <memory-id> # 获取单条
|
|
85
|
+
memex delete <memory-id> # 删除
|
|
86
|
+
memex stats # 统计
|
|
87
|
+
memex recall # 隐私查看
|
|
88
|
+
memex purge <memory-id> # 隐私删除
|
|
89
|
+
memex purge --all # 清空所有
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 记忆类型
|
|
95
|
+
|
|
96
|
+
| 类型 | 用途 | importance | 示例 |
|
|
97
|
+
|------|------|-----------|------|
|
|
98
|
+
| `constraint` | 强制规则 | 0.9 | "用户不喜欢废话" |
|
|
99
|
+
| `user_model` | 用户偏好 | 0.85 | "用户喜欢简洁回复" |
|
|
100
|
+
| `strategy` | 方法论 | 0.8 | "用分治法解决复杂问题" |
|
|
101
|
+
| `system_pattern` | 系统模式 | 0.75 | "项目采用前后端分离" |
|
|
102
|
+
| `belief` | 验证结论 | 0.7 | "Python 适合快速原型" |
|
|
103
|
+
| `journal` | 工作日志 | 0.4 | "今天完成了 xxx" |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 技术栈
|
|
108
|
+
|
|
109
|
+
| 组件 | 选择 |
|
|
110
|
+
|------|------|
|
|
111
|
+
| 向量数据库 | LanceDB(嵌入式,列式存储) |
|
|
112
|
+
| Embedding | BGE-base-zh-v1.5(中文优化) |
|
|
113
|
+
| CLI | Click |
|
|
114
|
+
| 存储抽象 | 可切换 LanceDB / Chroma / Memory |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 架构
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
memex/
|
|
122
|
+
├── src/memex/
|
|
123
|
+
│ ├── _types.py # MemoryRecord、MemoryType
|
|
124
|
+
│ ├── _config.py # 配置管理
|
|
125
|
+
│ ├── _embed.py # Embedding 生成
|
|
126
|
+
│ ├── store/ # 存储抽象层
|
|
127
|
+
│ │ ├── interface.py # VectorStore 接口
|
|
128
|
+
│ │ ├── lancedb.py # LanceDB 实现
|
|
129
|
+
│ │ └── memory.py # 内存实现(测试用)
|
|
130
|
+
│ └── cli.py # CLI 命令
|
|
131
|
+
├── skills/
|
|
132
|
+
│ └── memory-skill/
|
|
133
|
+
│ └── SKILL.md # 通用 Agent Skill
|
|
134
|
+
└── tests/
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 配置
|
|
140
|
+
|
|
141
|
+
配置文件:`~/.memex/config.toml`
|
|
142
|
+
|
|
143
|
+
```toml
|
|
144
|
+
[memory]
|
|
145
|
+
storage_path = "~/.memex/memory"
|
|
146
|
+
|
|
147
|
+
[vector_store]
|
|
148
|
+
provider = "lancedb"
|
|
149
|
+
|
|
150
|
+
[embedding]
|
|
151
|
+
model = "BAAI/bge-base-zh-v1.5"
|
|
152
|
+
dimension = 768
|
|
153
|
+
|
|
154
|
+
[retrieval]
|
|
155
|
+
default_limit = 10
|
|
156
|
+
min_similarity = 0.4
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 通用 Agent Skill
|
|
162
|
+
|
|
163
|
+
将 Memex 接入 Agent:
|
|
164
|
+
|
|
165
|
+
1. 复制 skill 到 `~/.openclaw/skills/memex/`
|
|
166
|
+
2. Agent 在合适的时机调用 `memex search` / `memex save`
|
|
167
|
+
|
|
168
|
+
详见 [`skills/memory-skill/SKILL.md`](skills/memory-skill/SKILL.md)
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## LongMemEval Benchmark
|
|
173
|
+
|
|
174
|
+
在 [LongMemEval](https://github.com/xiaowu0162/longmemeval)(ICLR 2025, UCLA + 腾讯 AI Lab)上测试了 Memex 的记忆召回能力。
|
|
175
|
+
|
|
176
|
+
### 测试配置
|
|
177
|
+
|
|
178
|
+
- **Embedding**: BAAI/bge-base-zh-v1.5(768 维)
|
|
179
|
+
- **存储**: LanceDB 嵌入式向量数据库
|
|
180
|
+
- **粒度**: Turn-level(每条记录 = 一个对话回合,约 550 条/题)
|
|
181
|
+
|
|
182
|
+
### 测试结果
|
|
183
|
+
|
|
184
|
+
| 配置 | 题数 | R@5 | R@10 | NDCG@10 |
|
|
185
|
+
|------|------|------|------|---------|
|
|
186
|
+
| MemPalace (baseline) | 500 | **96.6%** | 98.2% | 88.9% |
|
|
187
|
+
| Memex (turn-level) | 500 | **91.8%** | 94.0% | ~80% |
|
|
188
|
+
| Memex (session-level) | 500 | 85.8% | 92.2% | 78.9% |
|
|
189
|
+
|
|
190
|
+
### 粒度说明
|
|
191
|
+
|
|
192
|
+
LongMemEval 支持两种评估粒度:
|
|
193
|
+
|
|
194
|
+
| 粒度 | 每题记录数 | 说明 |
|
|
195
|
+
|------|-----------|------|
|
|
196
|
+
| **Turn-level** | ~550 条 | 每条 = 一个对话回合(user/assistant 的一条消息),最细粒度 |
|
|
197
|
+
| **Session-level** | ~53 条 | 每条 = 一个完整会话(30-40 回合聚成),较粗粒度 |
|
|
198
|
+
|
|
199
|
+
MemPalace 的 96.6% 是 turn-level 的结果。Turn-level 更接近真实场景——你的每一次对话、每一条消息,都可能藏着答案。
|
|
200
|
+
|
|
201
|
+
Memex 在 turn-level 达到 91.8%(vs MemPalace 96.6%),差距约 5 个百分点。
|
|
202
|
+
|
|
203
|
+
### 和 MemPalace 的差异
|
|
204
|
+
|
|
205
|
+
| 维度 | Memex | MemPalace |
|
|
206
|
+
|------|-------|----------|
|
|
207
|
+
| 向量数据库 | **LanceDB**(列式存储,高性能) | ChromaDB |
|
|
208
|
+
| 存储抽象 | **VectorStore 接口**,可切换后端 | 固定 ChromaDB |
|
|
209
|
+
| 记忆类型 | **六种分类**(constraint/user_model/...) | 纯 chunks |
|
|
210
|
+
| 接口 | **CLI + Agent Skill** 双接口 | API |
|
|
211
|
+
|
|
212
|
+
LanceDB 基于 Apache Arrow 列式存储,查询性能更强,存储更紧凑;BGE 中文 embedding 对中文对话的记忆召回更有优势。
|
|
213
|
+
|
|
214
|
+
### 核心发现
|
|
215
|
+
|
|
216
|
+
1. **原文存储有效**:不经过 LLM 提取的原文方案,在记忆召回任务上表现优异
|
|
217
|
+
2. **Turn-level 优于 Session-level**:粒度越细,能找回的细节越多
|
|
218
|
+
3. **存储抽象带来灵活性**:VectorStore 接口可以切换不同向量数据库后端
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 项目状态
|
|
223
|
+
|
|
224
|
+
**Phase 1: MVP** ✅
|
|
225
|
+
|
|
226
|
+
- [x] 核心类型定义
|
|
227
|
+
- [x] 存储抽象层(VectorStore 接口 + LanceDB 实现)
|
|
228
|
+
- [x] CLI 命令(init / save / search / get / list / delete / stats / recall / purge)
|
|
229
|
+
- [x] BGE embedding 集成
|
|
230
|
+
- [x] 基本测试
|
|
231
|
+
- [x] SKILL.md
|
|
232
|
+
|
|
233
|
+
**Phase 2**: 借鉴 OpenSwarm 的高级记忆机制 ✅
|
|
234
|
+
|
|
235
|
+
- [x] **语义蒸馏(Distillation)**:存入前过滤闲聊/情绪/依赖上下文的提问,只保留有价值的 insight
|
|
236
|
+
- [x] **混合检索(Hybrid Retrieval)**:final_score = 0.55×相似度 + 0.20×重要性 + 0.15×新鲜度 + 0.10×频率
|
|
237
|
+
- [x] **记忆修订(Revision)**:belief 被修订后重新计算 stability,支持不是 append-only
|
|
238
|
+
- [x] **衰减遗忘(Decay & Forgetting)**: decay ≥ 0.7 则归档,importance → 0.05
|
|
239
|
+
- [x] **矛盾检测(Contradiction Detection)**:基于关键词对检测语义冲突,importance 下降
|
|
240
|
+
- [x] **记忆合并(Consolidation)**:相似度 > 0.85 的记忆合并
|
|
241
|
+
|
|
242
|
+
**Phase 3**: 发布与分发
|
|
243
|
+
|
|
244
|
+
- [ ] `pip install memex` — 一键安装 CLI + Skill
|
|
245
|
+
- [ ] `pyproject.toml` — 打包配置
|
|
246
|
+
- [ ] Skill 自动安装到 `~/.agents/skills/memex/`(遵守 AgentSkills 规范,通用)
|
|
247
|
+
|
|
248
|
+
**Phase 4**: 评测数据
|
|
249
|
+
|
|
250
|
+
- [ ] 创建 `memex-benchmarks` 仓库
|
|
251
|
+
- [ ] distillation 数据集:should_store / should_reject 各 20-50 条
|
|
252
|
+
- [ ] contradiction 数据集:成对矛盾的记忆对 20-30 条
|
|
253
|
+
- [ ] 其他模块数据集:hybrid / revision / decay / consolidation
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## License
|
|
258
|
+
|
|
259
|
+
MIT
|