去也 QUYE.COM

首页/技术资产/光明记忆 lightmem

Agent 记不住事,就永远只是个临时工

lightmem 是一个独立运行的记忆服务,不是某个 AI 的插件。你机器上的每个 AI 都通过 MCP 连到同一个它:一个 AI 定下的结论,另一个 AI 下一个任务就能直接查到。

想先跑通再读细节?五分钟上手

它是什么

现在的 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。记忆层是高危攻击面,写入路径还内置了投毒防护与来源溯源。

GitHub 仓库 GitCode 镜像

记忆前 / 记忆后

同一个问题,两种回答

左图是现在大多数人的日常:每次开工先讲一遍背景。右图是接了记忆服务之后。

没有记忆

你帮我看看这个报价单,客户是上次那个做冷链的。
AI好的,请问是哪个客户?报价规则是什么?折扣上限是多少?
你(第三次解释)鲁西南那家,规则是我们不接低于成本 12% 的单……
AI明白了。下次换一个工具,这段还得再讲一遍。

接了 lightmem

你帮我看看这个报价单,客户是上次那个做冷链的。
AI · recall已查到:该客户毛利底线 12%、合同走对公、去年因交付延期扣过款。按这三条核了一遍,报价单里第 4 项低于底线。
AI · save本次结论已记入 L2(长期),并把「延期扣款」关联到该客户。
另一个 AI(三周后)recall 到同一条,直接带着上下文开工。

这张对比是 HTML 画的,图片 0 字节。3 Mbps 的服务器上,我们没有资格放 GIF——一句真话比一段动图值钱。

接入才是真门槛

记忆服务本身不难,难的是让七家 AI 工具都连上它。它们对同一件事的写法各不相同,而且写错不报错——配置写了、重启了,工具列表里就是没有它,你只能猜。

同一件事,七种写法
客户端类型标记顶层键
DeepSeek Harnessstreamable-http- insert:
WorkBuddystreamableHttpmcpServers
小浣熊 / Box-Agentstreamable_httpmcpServers
Trae / SOLO(无标记,用 url)mcpServers
OpenCode / DuMateremotemcp
CodeArtslocal(command 为数组)mcp
Roo Code / ClinestdiomcpServers

所以安装脚本把这件事固化掉了:检查 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、自己担风险。

相关

有了记忆,多个 Agent 才能真正一起干活

记忆解决「记不记得住」,hive 解决「抢不抢同一件事」。两个都装上,一个人的公司才有班次。