Lossless Memory

永不摘要的个人 AI 长期记忆层:保留每一行原始对话,时间优先检索

AI搜索知识库 部分免费

项目简介

Lossless Memory 是一套为"个人 AI 助手"设计的无损长期记忆层,核心主张与主流做法完全相反:永不摘要、保留每一行原始对话、给所有内容打上时间戳。它来自 aru-labs,2026 年 7 月起每天真实运行在一个人的日常使用中,原始日志可追溯到 2026 年 6 月,而设计脉络最早可追到 2025 年 12 月。

当下绝大多数 AI 长期记忆系统走的都是两条路:把对话压缩成简短笔记,或者把内容向量化后检索"相似"片段。项目作者认为,这两条路都丢掉了对一个每天和同一个 AI 说话的人来说最重要的东西——当时到底说了什么、又是什么时候说的。摘要是一张地图,原始日志才是疆域本身。

核心功能

  • 完整保留原始对话:所有对话轮次以逐行日志形式完整保存,全程没有任何摘要环节,日增日志按天切分为 JSONL 文件。
  • 时间优先的检索:每条记录都带 ISO-8601 时间戳,所有索引都建立在这条时间轴上(作者称之为"Temporal Backbone 时间主干")。
  • 先按时间、再按词检索:"昨天傍晚,关于预算"就是一个合法查询——时间短语先缩小范围,关键词再在范围内排序,结果按时间顺序原样返回,不做摘要。
  • LLL 当前位置索引:一个记录"话题切换点"的微型索引,每轮对话都注入模型上下文,让 AI 在上下文被压缩或跨会话后仍知道"当前聊到哪了"。
  • 精确匹配 + 语义兜底:基于 SQLite FTS5(日文与英文采用 bigram 分词)做精确检索,sqlite-vec 语义检索仅作为最后手段,且会在输出头部如实标注是否触发了兜底。
  • 增量重建索引:小型守护进程按固定间隔(默认 10 分钟)增量重建索引,能检测被改写的源文件并只重索引对应日期,无需全量重建。

技术实现

系统采用纯本地、基于文件的架构:JSONL 原始日志 + SQLite 存储引擎,FTS5 负责精确匹配、sqlite-vec 负责语义检索。每一轮对话都会被转换成固定的七字段记录——时间戳(ts)、发言人(actor)、角色(role:user/assistant/system)、类型(type:text/action/meta)、原文(text)、模型标识、会话标识——再追加到按天划分的 JSONL 文件中。原始日志是唯一真源,下面所有索引都可以删除后从日志完整重建。

查询流程为:解析时间短语(相对表达如"昨天""上周""3 天前",以及任意语言的绝对日期如 2026-07-19)→ 缩小时间范围 → 在范围内排序 → 返回逐行原文。LLL 索引则由两条规则支撑:AI 只读不写,优先级色标与完成标记由人设定,模型从不编辑自己对"什么重要"的判断;同时它足够轻量,每轮注入耗时远低于一秒。

作者还公开了运行时真实数据而非预估:精确检索索引重建从 40 秒优化到 1.24 秒;移除库污染后向量索引从 447,013 行(2026-08-31)膨胀到 865,588 行(2026-09-04 最差时),修复后回落到 124,174 行;磁盘上的向量存储从 2.54 GB 降到 337 MB。这些"优化前"的失败数字被刻意保留,记录在 docs/lessons.md 中。

快速上手

  1. 克隆仓库:执行 git clone https://github.com/aru-labs/lossless-memory 并进入目录。
  2. 安装依赖:运行 pip install -e . 完成可编辑安装。
  3. 初始化配置:复制 config.example.json 为 config.json,按需修改发言人名称与路径。
  4. 跑通示例:按 examples/quickstart.md 摄入一段示例对话、构建索引并执行一次带时间范围的查询,约五分钟即可完成;仓库另有 pytest 往返测试覆盖同一路径。

适用人群

这套系统专为"一个人 + 一个 AI、跑在一台机器上"的场景设计:没有服务器、没有云、也没有多租户方案,仅面向那些长期与 AI 助手对话、却眼看着它们一次次遗忘的用户。作者坦言系统目前以日文优先(相对时间短语目前仅支持日文),其长期目标是为独居人群打造一个"像人一样记得你"的伴侣式 AI,而本仓库正是它的记忆层。对于重视数据主权、愿意用磁盘空间换取完整记忆的开发者与个人用户,这是一个思路清晰、可自托管的参考实现。

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论