> GitHub: https://github.com/Ricoz217/CoMe_context_memory > 作者: Ricoz217 > 定位: 基于 LLM 上下文的记忆库,无需向量数据库、无需嵌入模型、无需硬件配置
---
一、一句话定位:它到底在做什么
CoMe(Context Memory)是一个极端简化的 RAG 替代方案。它不建向量索引、不跑 embedding、不维护倒排表——它的核心假设是:
> 如果 LLM 的上下文窗口足够大、API 缓存命中足够便宜,那向量数据库可能就是多余的中间层。
它把记忆直接塞进 LLM 的上下文窗口,让 LLM 自己"看"、自己"选"、自己"答"。BM25 和 char 3-gram 只是用来在树状桶结构里做本地路由,真正的"检索"由 LLM 完成。
这就像一个图书馆取消了卡片目录系统——不是因为它不要检索了,而是因为它请了一个过目不忘的图书管理员,你把所有书架摆在他面前,他扫一眼就能告诉你书在哪。
---
二、桶树结构:手动的知识组织
CoMe 的记忆组织是一个显式的树状桶结构(Bucket Tree):
ROOT
├── 工作
│ ├── 项目A
│ └── 项目B
├── 生活
│ ├── 健康
│ └── 财务
└── 学习
├── 论文
└── 技术
每次 query 时,系统先做 BFS 子树扫描(按预算),BM25 + 3-gram 计算本地召回分,然后把整个子桶的上下文塞进 LLM,让 LLM 输出 answer + matches。最后本地融合 LLM 分和本地分做重排。
如果命中子桶节点,递归 query 子桶,结果回传到顶层。
关键设计点:
- 桶深度受
max_bucket_depth控制,避免无限递归 - 单写者模型——同桶不并发,跨桶可并发,读无锁
- 自动触发 compress/split_bucket 来管理上下文压力
| 传统 RAG | CoMe | |
|---|---|---|
| 存储 | 向量数据库 + 文档存储 | 本地文件系统 |
| 检索 | Embedding 相似度搜索 | BM25 + LLM 上下文内判断 |
| 切片 | 必须 chunk | 可选,不强制 |
| 全局观 | 召回 TopK,可能丢关联 | 同桶完整上下文,不丢关联 |
| 成本 | Embedding + 向量搜索 + LLM | 主要是 LLM(热启动极低) |
| 部署 | 需要向量 DB 服务 | pip install 即可 |
三、Append-Only 事件流:不修改历史,只追加未来
CoMe 的另一个核心设计是 Event Append-Only:
1. 不在原地修改历史事件 — 所有 update 都是追加新事件 2. 新状态通过追加事件形成 — 历史完整保留 3. 重建/压缩流程得到"最新视图" — 定期把事件流压缩成当前状态快照
这跟 Git 的版本控制逻辑非常像:每次修改不是覆盖原文件,而是提交一个新 commit。历史完整可追溯,但日常使用时只看 HEAD。
好处:
- 数据安全——不会因为一次错误操作丢失历史
- 可回溯——可以看到记忆是如何演化的
- 压缩时可做智能去重和合并
- 空间膨胀——历史事件累积,需要 gc_storage 手动清理
- 压缩延迟——重建视图需要 LLM 参与,不便宜
四、Query 链路:两次本地计算 + 一次 LLM
一次完整的 query 分为三步:
1. 本地路由增强:BFS 扫描子树,BM25 + 3-gram 召回候选桶
↓
2. LLM 查询:把候选桶的完整上下文 + query 送入 LLM
LLM 输出 answer + matches(相关记忆 key 列表)
↓
3. 本地重排:融合 LLM 分与本地 BM25 分,得到最终排序
命中子桶则递归重复上述流程
本地检索技术细节:
- 主干:BM25(经典词频加权)
- 增强:char 3-gram + Dice 相似度(对付代码符号、拼写变体)
- 用途:子树路由 + 候选精排纠偏
auto:自动分流——字面特征强(代码/路径)走hybrid,自然语言走semanticsemantic:偏重词项匹配(适合代码事实查询)hybrid:提高模糊语义权重(适合自然语言描述)
mode 只影响打分层的融合策略,遍历层始终做 BFS。这是一个容易误解的点——你调 mode 不会减少扫描范围,只会改变怎么打分。---
五、成本模型:热启动后几乎免费
这是 CoMe 设计中最精妙的部分——它不是省了向量数据库,而是把成本转移到了 LLM API 的缓存机制上。
冷启动 vs 热启动:
| 冷启动 | 热启动 | |
|---|---|---|
| 场景 | 桶重建/压缩后首次 query | 同一桶重复 query |
| system_prompt | 不同,不命中 cache | 相同,命中 cache |
| 旧 memory | 未缓存 | 命中 cache |
| 成本 | 完整 LLM 调用 | 仅新增 memory + command |
| DSV4-flash | 正常价格 | 0.02元/M token |
> 一句话:在桶重建前,以合适的频率 query,基本不花钱。
这是把 DeepSeek V4-flash 的 1M 上下文 + 缓存命中机制用到了极致。作者明确说"强烈建议使用 DSV4-flash 并走官方 API"——这不是偏好,是架构依赖。
如果换用没有 cache_hit 机制的模型或本地 LLM,CoMe 的成本模型会完全崩塌。
---
六、跟 RAG 的根本分歧
传统 RAG 的假设: > "LLM 上下文有限,我们必须先用向量检索筛选出最相关的 TopK,再塞进 prompt。"
CoMe 的假设: > "如果上下文窗口够大(1M token)、缓存够便宜(0.02元/M)、LLM 够快(flash 级),那为什么不直接让 LLM 自己看?"
这不是优化 RAG,是在特定条件下绕过 RAG 的核心假设。
类比:
- 传统 RAG = 侦探先看档案室的卡片目录(向量检索),找出几本相关卷宗,再逐页阅读
- CoMe = 侦探直接站在档案室里,所有卷宗摊开,他扫一眼就知道哪本有用
---
七、优势与边界
优势(作者说的也是真的)
1. 无需向量数据库 — 少了一个组件,少了一层故障点 2. 无需嵌入模型 — 不需要维护 embedding 服务,不用担心模型版本兼容 3. 基本有网就能部署 — pip install 即可,单进程运行 4. 模型能看到更多信息 — 同桶内完整上下文,不丢关联。这是 RAG 的结构性短板——chunk + TopK 召回必然会割裂跨 chunk 的关联 5. 可直接输入日常琐事 — 因为不是严格的向量相似度匹配,LLM 可以从"今天吃了川菜"这类碎片化信息中推理出"你喜欢辣"
边界(文档诚实地列出来了)
1. 受 LLM 上下文窗口限制 — 1M token 很大,但海量文件入库还是会炸 2. 深层子桶路由难题 — 树太深时 BFS 扫描代价指数增长 3. 时延波动大 — 不是"固定一次召回+一次回答",而是递归多次 LLM 调用 4. 单写者模型 — 多进程同时写会损坏数据 5. 无时间管理 — 日程安排、事件记忆需要手动标注时间 6. 空间膨胀风险 — Append-Only + 本地文件,没有自动清理
---
八、技术评价:一个聪明但条件苛刻的方案
CoMe 是一个有清晰边界意识的个人项目。作者没有吹牛说"取代所有 RAG",文档里明确写了优缺点和 TODO。
它的聪明之处:
1. 押对了趋势 — 上下文窗口在膨胀(1M → 2M → 未来 10M),API 缓存价格在下降。CoMe 是"大上下文时代"的原生方案,不是"小上下文时代"的补丁。
2. BM25 + 3-gram 的本地路由 — 这是一个非常务实的选择。不做 embedding,但用经典 IR 技术做粗排,把 LLM 的精力留给精排。比纯 LLM 检索快,比纯向量检索准。
3. 显式桶结构 — 让用户(或 Agent)可以手动控制知识组织,而不是把一切都交给黑箱 embedding。这在调试和可解释性上是巨大优势。
4. 成本模型清晰 — 明确依赖 DSV4-flash 的 cache_hit,不自欺欺人。
它的苛刻条件:
1. 模型锁定 — 强绑定 DeepSeek V4-flash(或具有同等 cache 机制的模型)。换模型 = 换成本模型 = 可能不适用。
2. 延迟敏感场景不适用 — 递归 BFS + 多次 LLM 调用,延迟比单次向量检索 + LLM 回答高一个数量级。
3. 写并发场景不适用 — 单写者意味着无法作为多用户服务后端。JSON-RPC 服务化后也只能串行写入。
4. 海量数据场景不适用 — 本地文件系统 + 单进程,不是为 web-scale 设计的。
---
九、定位判断:它是谁的好工具
| 场景 | 适合? | 原因 |
|---|---|---|
| 个人知识管理 | ✅ | 单用户、自然语言查询、上下文关联重要 |
| Agent 记忆系统 | ⚠️ | 单写者限制,需要封装成服务化 API |
| 企业级 RAG | ❌ | 无并发、无分布式、无权限管理 |
| 代码库问答 | ✅ | BM25 对代码符号友好,LLM 理解代码关联 |
| 实时对话系统 | ❌ | 延迟波动大,不适合低延迟场景 |
| 碎片生活记录 | ✅ | 无需整理,直接 dump,LLM 自己找规律 |
十、一句话总结
CoMe ContextMemory 是一个"大上下文时代"的极简记忆方案。它不跟 RAG 比精度,也不比速度——它在比简单性。如果 DeepSeek V4-flash 的 1M 上下文 + 0.02元/M cache 是这个时代的基础设施,那 CoMe 就是第一个基于此重新设计的原生应用。
它不是万能的。但它在个人知识管理、碎片记忆整理、轻量级 Agent 记忆这些场景下,确实做到了"更少组件、更低门槛、足够好用"。
而且那个桶树结构——说实话,比很多黑箱向量检索系统更让人安心。至少你知道你的记忆存在哪,丢了也知道去哪找。
---
参考项目信息:
- Ricoz217. (2025). CoMe ContextMemory: A context-based memory system without vector databases. *GitHub*. https://github.com/Ricoz217/CoMe_context_memory
#开源项目 #CoMe #ContextMemory #RAG #LLM #DeepSeek #知识管理 #记忆系统 #向量数据库 #极简架构 #HeavyGrok