ClickMem:基于 chDB 的本地优先 Agent 统一记忆系统

> 来源: https://github.com/auxten/clickmem

> 作者: auxten(ClickHouse Principal Engineer,chDB 创始人)

> 语言: Python

> Stars: 18 | Forks: 1

> 创建: 2026-03-04 | 最近更新: 2026-03-12

> 协议: 未标注(待确认)

> 日期: 2026-03-13

📌 一句话总结

把 ClickHouse 嵌入进程(chDB),配合本地 Qwen3 Embedding + 本地 LLM,做成一个零云端依赖、LAN 共享、自动维护的 Agent 记忆服务器。一个端口同时提供 REST API 和 MCP,让 Claude Code / Cursor / OpenClaw 共享同一份记忆。

🧠 核心问题

> "AI 编码助手在会话之间遗忘一切。Context compaction 丢弃了你声明的偏好、做出的决策、提到的人名。"

这正是我们 researcher Agent 每天面临的问题——session compaction 后 30% 的隐性上下文消失。

🏗️ 三层记忆架构


┌──────────────────────────────────────────────────────┐
│  L2  语义记忆(Semantic)— 永久知识                    │
│  "[preference] 偏好 SwiftUI 而非 UIKit"               │
│  "[person] Alice 是后端负责人"                         │
│  永不自动删除 · 仅在矛盾时更新 · 精炼记忆 1.15x 加权   │
├──────────────── ▲ 晋升(重复模式) ──────────────────┤
│  L1  情景记忆(Episodic)— 事件时间线                  │
│  "03-04: 决定用 Python core + JS plugin 架构"         │
│  120 天衰减 · 自动压缩为月度摘要 · 重复模式晋升到 L2    │
├──────────────── ▲ LLM 结构化提取 ────────────────────┤
│  Raw  原始对话(append-only)                          │
│  完整对话文本 · 不参与搜索 · 支持重新提取               │
└──────────────────────────────────────────────────────┘

Raw → L1 → L2 的数据流

1. Raw 原始对话:完整存储对话文本(append-only),不做 embedding,不参与搜索。仅供提取和精炼管道消费。当模型/prompt 改进时可以"重新提取"

2. L1 情景记忆:LLM 从 raw 中提取结构化事件。每条记录关联 raw_id 可追溯。120 天未访问自动清理,旧条目压缩为月度摘要

3. L2 语义记忆:持久事实、偏好、人物。永不自动删除。Smart upsert 通过 LLM 检测重复并合并

🔍 混合搜索(6 维打分)

维度机制
1. 向量相似度256 维 Qwen3 Embedding,余弦距离
2. 关键词匹配词级命中率(内容 + 标签 + 实体)
3. 时间衰减L1/L2 使用不同策略(见下)
4. 热度加权频繁被召回的记忆得分更高
5. 精炼加权经过 refinement 的记忆 1.15x 加权
6. MMR 多样性重排避免返回冗余结果

时间衰减的精妙设计

L1 情景记忆 — 指数衰减(模拟人类情景记忆):

L2 语义记忆 — 对数新近度(Weber-Fechner 定律):

时间L1 情景L2 语义
1 分钟1.0000.981
1 天0.9890.896
30 天0.7070.877
60 天0.5000.874
1 年0.0150.867

关键洞察:语义记忆失去相关性的唯一途径是矛盾更新,而非时间流逝。

🤖 全本地 LLM

模型参数内存用途
Qwen3-Embedding-0.6B0.6B~500 MB向量嵌入
Qwen3.5-2B2B~1.5 GB快速提取(默认)
Qwen3.5-4B4B~3 GB更好的提取质量
Qwen3.5-9B9B~6 GB最佳精炼质量

🔄 持续精炼(Continual Refinement)

当未处理的 raw 对话累积超过阈值(默认 10),后台线程自动触发:

1. 重新提取 — 处理可能遗漏或可受益于改进提取的对话

2. 聚类 — 按 embedding 余弦相似度(>0.7)分组相似 L2 记忆

3. 去重合并 — LLM 检测同一聚类内的重复记忆,合并为单条更强条目

4. 质量门控 — 记忆必须可操作、跨会话稳定、非敏感才能存活

精炼后的记忆标记 source=refinement,召回时获得 1.15x 加权。原始记忆软删除但保留审计。

🌐 架构:一个端口,所有工具


Claude Code ──MCP──┐
Cursor ─────MCP────┤
OpenClaw ──MCP/HTTP┤    ClickMem Server (port 9527)
CLI ────────HTTP───┘    REST API + MCP SSE + mDNS

部署

资源消耗

🔌 集成

自动安装脚本 setup.sh 一步完成:

MCP 工具

📊 与竞品对比

特性ClickMemMem0OpenClaw 内置Supermemory
本地优先✅ 全本地❌ 云端✅ 本地❌ 需要 Pro
多工具共享✅ LAN 广播❌ 独立❌ 仅 OpenClaw❌ 独立
三层记忆✅ Raw/L1/L2❌ 单层❌ 文件型❌ 单层
时间衰减✅ 双策略
持续精炼✅ 自动
本地 LLM✅ Qwen3.5
MCP 支持N/A
存储引擎chDB (ClickHouse)QdrantMEMORY.md云端
成本API 费用$29/月

ClickMem 的独特优势:底层是 ClickHouse——列式存储 + 压缩意味着对话量增长不会导致磁盘/性能问题。内置倒排索引 + 向量索引 + 几百个分析函数。

💡 与我们的关联

直接相关且可用

1. 解决我们的核心痛点:我们的 researcher Agent 每次 session compaction 丢失大量上下文。ClickMem 的 Raw → L1 → L2 管道能保留这些信息

2. 可以在我们的 VPS 上跑:全本地,Python,systemd 服务。Qwen3.5-2B 只需 ~4.5 GB RAM

3. OpenClaw 插件现成setup.sh 自动安装 OpenClaw 插件和历史导入

4. 与我们之前研究的 mem9 互补:mem9 做 TiDB 云端记忆,ClickMem 做本地记忆——取决于你要不要数据出本机

5. :项目太新(3 月 4 日创建),Star 18,无 License 声明,只有 1 个 fork。需要观察成熟度

建议

📊 评分

维度评分(/10)
技术深度9.0 — 三层记忆 + 双时间衰减 + 持续精炼
实用价值8.5 — 解决真实痛点,开箱即用
代码质量8.0 — 文档详尽,架构清晰
生态成熟度5.0 — 太新,Star 少,无 License
与我们的关联9.0 — 直接解决我们的记忆丢失问题
**综合****8.5**

报告由深度研究助手自动生成 | 2026-03-13

来源: https://github.com/auxten/clickmem