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 的对比很清晰:
| 传统 RAG | CoMe | |
|---|---|---|
| 存储 | 向量数据库 + 文档存储 | 本地文件系统 |
| 检索 | Embedding 相似度搜索 | BM25 + LLM 上下文内判断 |
| 切片 | 必须 chunk | 可选,不强制 |
| 全局观 | 召回 TopK,可能丢关联 | 同桶完整上下文,不丢关联 |
| 成本 | Embedding + 向量搜索 + LLM | 主要是 LLM(热启动极低) |
| 部署 | 需要向量 DB 服务 | pip install 即可 |
三、Append-Only 事件流:不修改历史,只追加未来
CoMe 的另一个核心设计是 Event Append-Only:
- 不在原地修改历史事件 — 所有 update 都是追加新事件
- 新状态通过追加事件形成 — 历史完整保留
- 重建/压缩流程得到"最新视图" — 定期把事件流压缩成当前状态快照
这跟 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 相似度(对付代码符号、拼写变体)
- 用途:子树路由 + 候选精排纠偏
三种 query 模式:
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 |
核心洞察: 只要不触发 compress/split_bucket,同一个桶的 system_prompt 和历史 memory 会被 API 供应商缓存。下次 query 时,LLM 实际只处理新增的部分——这部分通常很少。
一句话:在桶重建前,以合适的频率 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 = 侦探直接站在档案室里,所有卷宗摊开,他扫一眼就知道哪本有用
第二种方式成立的前提是:侦探的视力够好、阅读速度够快、时薪够低。DeepSeek V4-flash 就是这个"便宜又快眼神还好"的侦探。
七、优势与边界
优势(作者说的也是真的)
- 无需向量数据库 — 少了一个组件,少了一层故障点
- 无需嵌入模型 — 不需要维护 embedding 服务,不用担心模型版本兼容
- 基本有网就能部署 — pip install 即可,单进程运行
- 模型能看到更多信息 — 同桶内完整上下文,不丢关联。这是 RAG 的结构性短板——chunk + TopK 召回必然会割裂跨 chunk 的关联
- 可直接输入日常琐事 — 因为不是严格的向量相似度匹配,LLM 可以从"今天吃了川菜"这类碎片化信息中推理出"你喜欢辣"
边界(文档诚实地列出来了)
- 受 LLM 上下文窗口限制 — 1M token 很大,但海量文件入库还是会炸
- 深层子桶路由难题 — 树太深时 BFS 扫描代价指数增长
- 时延波动大 — 不是"固定一次召回+一次回答",而是递归多次 LLM 调用
- 单写者模型 — 多进程同时写会损坏数据
- 无时间管理 — 日程安排、事件记忆需要手动标注时间
- 空间膨胀风险 — Append-Only + 本地文件,没有自动清理
八、技术评价:一个聪明但条件苛刻的方案
CoMe 是一个有清晰边界意识的个人项目。作者没有吹牛说"取代所有 RAG",文档里明确写了优缺点和 TODO。
它的聪明之处:
-
押对了趋势 — 上下文窗口在膨胀(1M → 2M → 未来 10M),API 缓存价格在下降。CoMe 是"大上下文时代"的原生方案,不是"小上下文时代"的补丁。
-
BM25 + 3-gram 的本地路由 — 这是一个非常务实的选择。不做 embedding,但用经典 IR 技术做粗排,把 LLM 的精力留给精排。比纯 LLM 检索快,比纯向量检索准。
-
显式桶结构 — 让用户(或 Agent)可以手动控制知识组织,而不是把一切都交给黑箱 embedding。这在调试和可解释性上是巨大优势。
-
成本模型清晰 — 明确依赖 DSV4-flash 的 cache_hit,不自欺欺人。
它的苛刻条件:
-
模型锁定 — 强绑定 DeepSeek V4-flash(或具有同等 cache 机制的模型)。换模型 = 换成本模型 = 可能不适用。
-
延迟敏感场景不适用 — 递归 BFS + 多次 LLM 调用,延迟比单次向量检索 + LLM 回答高一个数量级。
-
写并发场景不适用 — 单写者意味着无法作为多用户服务后端。JSON-RPC 服务化后也只能串行写入。
-
海量数据场景不适用 — 本地文件系统 + 单进程,不是为 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 #知识管理 #记忆系统 #向量数据库 #极简架构
#开源项目 #CoMe #ContextMemory #RAG #LLM #DeepSeek #知识管理 #记忆系统 #向量数据库 #极简架构 #HeavyGrok
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。