现在凡做 Agent 必有记忆体。
我且问一句:你加它,想解决什么?
召回的核心,是准确,还是有用?
你的记忆存在哪,归谁管,能不能带走?
它只是被查的资料库,还是参与理解用户的一部分?
用户说的,就是他想要的吗?
用户的记忆,是不是应该属于他自己?
基于这几个问题,我的思路是:做本地化的无向量记忆。
本地化,因为记忆是资产,得在自己手里。
无向量,因为我要的是有用,不是更准。
为什么是资产
你每天跟 AI 聊的东西,你的偏好、你的习惯、你踩过的坑、你解释过三遍的背景,都是资产。
缓存丢了无所谓,资产丢了是损失。
可这些资产存哪。多数方案存别人服务器上,抽成事实、向量化、进云端。你看不到,改不动,换个平台归零,涉及工作内容和客户信息的,出域就控制不了。
所以记忆体第一件要想清楚的,不是怎么召得更准,是这些记忆归谁、谁保管、能不能带走。
一、有效性
现在都在卷召回精确。RAG、向量库、重排模型,一代比一代强。
可召回的核心,是准确,还是有用?
搜得再准,也是搜索。你问一句,系统把"相关"的全塞进来,烧一堆 token。
比如你闲聊问"上次那个事怎么样了"。
你要的是"上周三那场评审吧,方案 A 过了"。
而追求召回准确率的系统,会把那场评审的完整记录全塞进去。召得没错,百分之百相关。可你需要吗。
人怎么回忆的。
感知驱动。先知道对方要什么,再决定调哪层记忆。回忆一件事,脑子里先出轮廓,不是全文,聊深了才调细节。
所以分三层:浅给认知摘要,中给概要和概览,深给完整内容。
人不是先检索再回答,是先感知再驱动。
还有,我不用向量。
人脑子里没有余弦相似度。想起一件事都是特征触发的,一个声音、一张脸、一个味道,"想起来了"。
特征标签可解释、可编辑、轻量。你知道它为什么召回,错了直接改。向量出问题只能调参看运气,标签出问题你能看到是哪两个连上了。
不过不用向量不代表更简单。
标签是活的。同一件事,LLM 会输出"标签池"、"标签池管理"、"标签库"三种,你怎么办。
我一开始合并,后来发现错了。
标签池的目标不是干净,是召回全。
合并等于删掉一个入口,用户下次说的恰好是删掉那个词,就再也找不到。改成关联式共存,建关联让它们互相能找到。
这只是个坑。泛用词像"问题"、"处理",放池子里只污染召回,得让它们退场。可过滤只做在数据库层、内存缓存漏了,同一进程内还在被召回。判重更麻烦,退场的标签还占着名字和编号,判重查询把它过滤掉,系统以为"不存在",重新建一个,撞唯一约束报错。
都是我自己踩出来的。向量方案不会遇到这些,但会遇到黑盒、不可编辑、调不动。
没有免费方案,只有取舍。
二、安全性
数据全在本地,不依赖云端。就是 SQLite + JSON,存你自己磁盘上。不用 Embedding 服务,不把对话发给第三方,断网也能跑。
数据不出域。 工作内容、客户信息、个人习惯,一行都不离开你的机器。
白盒可控。 JSON 明文,打开就能看记了你什么。
可解释。 不用向量,每次召回都能说清:哪个标签命中的、怎么扩散的、为什么排前面。
轻量。 只依赖 SQLite 和 System.Text.Json,不要 GPU。
你的记忆,你自己保管。
三、资产增值
每次对话结束,C 线异步沉淀:记录事件、写概览、补全标签与场景、修正偏好。用得越久,池子越丰富,注入越准。
更关键的是,它理解的是你这个人,不只是对话内容——你的偏好、你的习惯。
分身分的是什么。
| 层次 | 能力 | 例子 |
|---|---|---|
| 一 | 记住事实 | "他讨厌冗长的回复" |
| 二 | 理解偏好 | "工作要结论,闲聊可以铺开" |
| 三 | 解读潜在意图 | "他问方案行不行,其实在犹豫" |
前两层是记住,第三层才是像他。
用户说的和用户要的,经常不是一回事。"上次那个事怎么样了",可能是"我记不清了,给我个摘要";"这个方案行不行",可能是"我在犹豫,想要个判断"。
这层只有记忆能补上。有记忆,它知道你上次说过"别给我一堆选项,直接说结论",这句就直接给判断。
所以记忆体不该只做被查询的组件,它参与理解用户。
另外分身可迁移,格式开放,换模型、换机器,资产都跟着你走。
最后
|---|---|
| 记忆单元 | 特征标签,不是事实三元组 |
| 检索方式 | 特征匹配 + 关联扩散,不是向量相似度 |
| 注入策略 | 感知驱动,浅/中/深三层,不是全量塞入 |
| 角色定位 | 参与理解用户,不只是资料库 |
| 存储位置 | 本地 SQLite + JSON,不是云端 |
| 优化目标 | 有效,不是更准 |
召回准确度该卷还是要卷。我只是觉得还有两层不能被忽略:召回之后给不给、给多少、给什么粒度;以及这些记忆归谁、谁保管。
记忆终还是人类可累计的核心资产。
Top comments (0)