用户觉得开头太长了,要简短一些。我来精简一下开头部分。# SummerMemory 项目视频讲解稿(大白话版)


开头:我为什么要做这个

大家好,我是 Likefr。

我玩 AI 有一段时间了,日常用它改代码、写文档、总结日报、控制家里的智能设备。

用着用着,我发现一个问题:它老是忘事。 记忆这一块做的不是很好

我前天告诉它"我看了一本书",今天问它"我最近看了什么书",它说不知道。

我让它搜"我最近使用的前端技术",它搜不到,但明明近期有让他优化Vue的代码。

我算是发现了,它的记忆系统有三个问题:中文搜不准、不懂变通、搜不到, 也不知道为什么。

所以我就自己做了一个,我称其定义为 SummerMemory。


这个项目是干什么的?

简单说:让 AI 记住事情,而且能准确找到。


OpenClaw 记忆系统的问题

第一个:中文搜不准

比如说可能存了我说的 "我买了苹果和香蕉",但是我日后和他说搜"水果"搜不到。

因为字面上没有"水果"这两个字。

第二个:不懂变通

你存了"我开车去上班",搜"通勤"搜不到。

因为它不知道"开车去上班"就是"通勤"。

当然我只是举个例子 实际他的记忆上下文有很多雷点


SummerMemory 怎么解决?

我使用这几门技术
PostgreSQL+pgvector做向量数据库,FastEmbed+Ollama BAAI/bge-small-zh-v1.5+BM25+LLM重排,jieba中文分词,纯本地全免费。不比商业的记忆系统差,搜索记忆毫秒级,比网络延迟还小。

核心思路:把文字变成数字,用数学方法算相似度。


第一步:什么是"向量"?

向量就是一组数字。

电脑不认识字,但认识数字。

比如:

  • "开心" → [0.25, -0.34, 0.56, ...]
  • "愉快" → [0.23, -0.33, 0.55, ...]
  • "快乐" → [0.26, -0.35, 0.57, ...]
  • "悲伤" → [-0.80, 0.45, -0.23, ...]

你看,"开心"、"愉快"、"快乐"的数字很接近,因为意思差不多。

"悲伤"的数字差很远,因为意思不一样。

这就是向量搜索:意思相近的文字,数字也相近。


第二步:什么是"分词"?

中文没有空格,得靠工具拆分。

jieba 能把一句话拆成最小的单位。

比如"我昨天去超市买了苹果和香蕉"

拆成:["我", "昨天", "去", "超市", "买", "了", "苹果", "和", "香蕉"]

注意:"买"和"了"是分开的,"苹果"和"和"也是分开的。

因为中文词语讲究成双成对,"苹果"是一个词,"超市"是一个词。

但"还买"不是一个词,jieba 会把它拆开。


第三步:什么是"BM25"?

BM25 是一种搜索算法,看一个词出现多少次。

你搜"苹果",文章里"苹果"出现 5 次的,比出现 1 次的分数高。

还有一个聪明的地方:如果一个词在所有文章里都出现(比如"的"、"是"),重要性就低。

如果一个词只在少数文章里出现(比如"苹果"),重要性就高。


第四步:什么是"混合搜索"?

向量搜索能理解语义,但不够精确。

BM25 搜索能精确匹配,但不懂语义。

所以 SummerMemory 把两种结合起来:

  1. 同时用两种方式搜索
  2. 合并结果
  3. 向量分占 60%,BM25 分占 40%
  4. 按总分排序

这样既能理解语义,又能精确匹配。


第五步:什么是"LLM 重排"?(计划做的)

LLM 就是大语言模型。

重排就是用 AI 重新给搜索结果排序。

比如你搜"健康食物",返回 10 条结果。

AI 看一眼,把最相关的放前面。

这个功能还没做,后面会加。


举个完整的例子

你跟 AI 说:

"我昨天去超市买了苹果和香蕉,还买了一盒牛奶,花了 50 块钱"

SummerMemory 处理流程:

第一步:切分

切成三块:

  • "我昨天去超市买了苹果和香蕉"
  • "还买了一盒牛奶"
  • "花了 50 块钱"

第二步:转向量

把每块文字变成数字。

比如"苹果" → [0.12, -0.34, 0.56, ...]
"香蕉" → [0.11, -0.33, 0.55, ...]
"牛奶" → [0.23, -0.45, 0.67, ...]

"苹果"和"香蕉"的数字很接近,因为都是水果。

"牛奶"的数字差远一点,因为是饮料。

第三步:分词
jieba 这个框架 常用余比如电商的关键字匹配搜索 分词可以更好的匹配用户的搜索意图
可以举一个例子:

["我", "昨天", "去", "超市", "买", "了", "苹果", "和", "香蕉"]

bge-small-zh-v1.5 是什么?

这是 Ollama 里用的一个模型,专门用来把中文变成向量。

它的名字可以拆开看:

BAAI:开发这个模型的机构(北京智源人工智能研究院)
bge:模型的类型(把文字变成向量的模型)
small:小模型(速度快,占用资源少)
zh:专门针对中文优化
v1.5:版本号
为什么要用这个模型?

第一,它是专门针对中文优化的,中文效果比英文模型好。

第二,它是小模型,速度快,大概 100 毫秒就能把一段文字变成向量。

第三,它是开源免费的,不用花钱。

第四步:存数据库


过几天,你问 AI:"我之前买了什么水果?"

搜索流程:

第一步:查询转向量

"水果" → [0.15, -0.38, 0.52, ...]

第二步:向量搜索

"苹果"的向量 [0.12, -0.34, 0.56, ...] 和"水果"很接近。

得分:0.85

第三步:BM25 搜索

查询分词:["我", "之前", "买", "了", "什么", "水果"]

原文里有"我"、"买"、"了",但没有"水果"。

得分:0.60

第四步:混合排序

最终得分 = 0.85 × 0.6 + 0.60 × 0.4 = 0.75

第五步:返回结果

AI 回答:"你之前买了苹果和香蕉,都是水果哦!"


图谱可视化

我还做了一个图谱可视化界面。

把所有记忆用一张图画出来。

节点代表文件,连线代表关系。

节点越大,内容越多。

连线越粗,关系越紧密。

支持搜索、拖拽、点击查看详情。

用 Vue 3 + force-graph 做的,支持中英文切换。

浏览器打开 http://192.168.31.113:5173 就能看。


总结

SummerMemory 解决三个问题:

  1. 中文搜不准 → 用 jieba 分词
  2. 不懂语义 → 用向量搜索
  3. 功能单一 → 用混合搜索 + 图谱可视化

纯本地运行,不花钱,不依赖外部服务。

搜索速度大概 15 毫秒,比 OpenClaw 快 3 倍。


后面打算做什么

  1. LLM 重排:用 AI 重新排序
  2. 自动摘要:新内容自动生成摘要
  3. 标签系统:给记忆打标签
  4. 记忆衰减:长时间没用的记忆权重降低

好了,以上就是 SummerMemory 项目的介绍。

一句话总结:让 AI 记住事情,用向量+关键词两种方式搜索,又快又准。

感谢观看!

最后修改:2026 年 06 月 02 日
如果觉得我的文章对你有用,请随意赞赏