它是什么
现在的 AI 工具有一个共同的毛病:各自失忆。你在 A 工具里定下的架构决策,换到 B 工具开工,它一无所知,你得从头讲一遍。上下文窗口解决不了这个问题——那是临时的、单 Agent 的、关掉就没了。
lightmem 把事情挪到进程外面:一个常驻服务,所有 AI 接进来。一个 AI 沉淀的经验,另一个 AI 直接复用。它不是「存聊天记录」,而是结构化的长期记忆:带坐标、分层级、可检索、可审计。
四层温度:不同的事,活不同的寿命
- L0 工作记忆:分钟级。当前这轮对话里的临时线索。
- L1 动态:天到月。正在推进的项目上下文、待办、结论。
- L2 静态:长期。稳定的偏好、架构决策、业务规则。
- L3 归档:合规留存。不再参与日常召回,但要查得到。
分层的意义在于:记忆不该平等对待自己。把上周的临时讨论和三年不变的客户禁忌放在一个池子里检索,结果必然是噪音。
检索不是关键词匹配
语义、关键词(BM25)、实体、时效、来源可信度等多路信号各自打分,再按名次融合,而不是靠一组拍脑袋的权重相乘。冲突的记忆不直接覆盖,而是按价值与时效加权保留多版本——所以「当时为什么这么定」这件事,查得回来。
计划、步骤、总结是一等公民
这是它和笔记类工具最不一样的地方。除了 save / recall,它还有一整套工作流记忆:建计划(goal_create)、推进度(goal_progress)、记步骤(step_add)、写总结(summary_add)。多步任务因此有了「进度条」,而不是每次重头问「我们做到哪了」。
- 实现语言
- Go 1.25+
- 协议
- 原生 MCP + REST
- 工具数
- 13 个(7 读写 + 6 工作流)
- 默认档位
- solo · SQLite · 零外部依赖
- 真实使用
- family · PostgreSQL + pgvector
- 隔离
- tenant / private + 每 Agent 一份 token
- 可缩放
- solo / family / smb / enterprise
- SDK
- JavaScript · Python
为什么身份由服务端定
每个 AI 一份 token,服务端在启动时装配 token 表。请求体里谎报 agent 没有用——身份是 Bearer 令牌换来的,不是自己声明的。跨租户访问直接 401/404。记忆层是高危攻击面,写入路径还内置了投毒防护与来源溯源。
同一个问题,两种回答
左图是现在大多数人的日常:每次开工先讲一遍背景。右图是接了记忆服务之后。
没有记忆
接了 lightmem
这张对比是 HTML 画的,图片 0 字节。3 Mbps 的服务器上,我们没有资格放 GIF——一句真话比一段动图值钱。
接入才是真门槛
记忆服务本身不难,难的是让七家 AI 工具都连上它。它们对同一件事的写法各不相同,而且写错不报错——配置写了、重启了,工具列表里就是没有它,你只能猜。
| 客户端 | 类型标记 | 顶层键 |
|---|---|---|
| DeepSeek Harness | streamable-http | - insert: |
| WorkBuddy | streamableHttp | mcpServers |
| 小浣熊 / Box-Agent | streamable_http | mcpServers |
| Trae / SOLO | (无标记,用 url) | mcpServers |
| OpenCode / DuMate | remote | mcp |
| CodeArts | local(command 为数组) | mcp |
| Roo Code / Cline | stdio | mcpServers |
所以安装脚本把这件事固化掉了:检查 Go、编译两个二进制、生成 profile、签发 8 份 token、起服务、做健康检查,最后生成一份给 AI 看的接入说明——你只需要把一句话粘给你的 AI,它自己去改配置。
git clone https://github.com/skywalk163/lightmem.git # 国内慢就换镜像:https://gitcode.com/skywalk163/lightmem.git cd lightmem sh integrations/quickstart/install.sh # REST : http://127.0.0.1:7443 # MCP : http://127.0.0.1:7444/mcp ← 给 AI 接的是这个
装完先做一次冒烟
在任意一个已接入的 AI 里说:「调用 lightmem_health,把返回原样贴给我。」看到 {"status":"ok"} 就成了。
写进系统提示的一段习惯
动手前先用 recall 查历史结论;完成后用 save / step_add 沉淀;给团队看的用 visibility=tenant,私人草稿用 private。
别盲抄示例里的端口
仓库里的接入包可能是历史部署留下的,端口和 token 都会过期。先探活再动手:curl -s http://127.0.0.1:18443/healthz 返回 200,再带 Bearer 打一次保存接口看是否 401。
现在还不能拿它做的四件事
把它当「装上就有的长期记忆」会失望。下面四条是硬约束,写在这里比写进 FAQ 有用。
诚实清单
- solo 档只存标量,不存向量:SQLite 档自 R19-B 起是真正的磁盘持久化(写入落盘 data/lims.sqlite,进程重启后仍可召回,有 8 条持久化用例守着);但 sqlite-vec 尚未接入,语义检索要上 family 档(PostgreSQL + pgvector)。
- solo 档没有向量检索:自动降级为文本匹配,能用,但语义召回要 family 档。
- 换发 token 必须重启服务:token 表只在启动时装配,新签的 token 不重启就是 401。
- 它不是 SaaS:默认只监听 127.0.0.1,要给别人用就自己开端口、自己管 token、自己担风险。