Serein.
记忆手册 / MEMORY NOTES

Serein.

留 下 经 历 / 接 续 后 来

让聊天里的经历,
有地方留下。

有些话,聊完以后还想记得。
有些事,隔了很久,还想接着说。

关于 Serein

可自行部署的 AI 记忆服务。
不同窗口,读写同一份记忆。

A PLACE FOR WHAT WE REMEMBER

同一件事,
六个月后仍能接得上。

6个月

同一件事持续的时间

72条

绑定在同一条叙事线里的材料

日记 + 记忆 + 自动摘要

从散落的记录,
读到一段完整的经过。

借助叙事卷,可以连贯地回顾这件事,也能回到其中一份具体材料。

不用等待零散片段碰巧被召回,也不用把 72 条材料一条条手动翻完。

数字来自使用者提供的实例;公开版不附带这份私人资料。

Scene 与 Event,
分别留下什么?

同一段经历,可以有不同的记录视角。

01 / SCENE

主窗口主动想留下的

片段、理解、感受或约定。正在和你聊天的模型,主动调用工具写下。

她把车票收了起来。
我也想把第一次一起
出发的这段路留下。

02 / EVENT

依据原话整理经历

自动流水线整理发生过、讨论过的内容,不补写原话之外的感受与后续。

她留下车票,说想
记住第一次一起出发。

两者一起召回,互相补充。一段话不必各存一份。

车票内容为虚构示例。Scene 包含主窗口的理解,Event 也可能整理有误;核对事实时,仍要回到原话。

写下以后,
怎样为下一次想起做准备?

正文保留经历,原话保留依据,索引准备查找入口。

主窗口主动写Scene

想留下的片段与理解

原话 → 自动摘要Event

发生的事与对话进展

SEREIN / CANONICAL STORE

SQLite 记忆主库

独立 ID · 正文 · 版本 · 状态

原话单独归档,通过绑定回到记忆。
检索索引另行保存,可以重新准备。

主域
它属于哪个大类。已有分类与正文保持原样。
cues
写 Scene 时留下的语义检索提示:以后聊到什么,可能想起它?
实体
材料中明确出现的名字,逐字核对出处。只来自正文时明确标注。

正文或来源变化后,旧实体结果失效,等待重新提取。这些线索帮助找到候选,不直接决定带入聊天。

记忆,怎样进入上下文?

01 / ELIGIBILITY

先判断资格

这轮要不要找?哪些记忆可以参与?

原句与语义路由

一次 query embedding,判断 skip / recall 边界;可以在候选生成前结束。

批量资格过滤

检查 active、可浮现与当前版本;排除替换、完整覆盖的 Event,以及主域、排除 ID 和旧索引等不合格对象。

Event + Scene → 可检索对象

02 / NOMINATION

把候选送到门口

四种信号,进入同一个混合候选池。

  • 正文 / passage 向量
  • Scene cue 语义
  • Event 特定关键词
  • 完整实体名

前 6 条宽探针;其余候选须有扩展证据。实体名需要回忆意图或明确结构。

已确认 Scene 关系:最多 1 个邻接候选,不加分。

03 / ADMISSION → DELIVERY

筛选,再交付

搜到了,不等于已经带入。

正文 reranker

完整原句 × 候选正文,最终门槛默认 ≥ 0.65。

选卡与会话冷却

默认最多 2 张。胜出后检查冷却,取消后不补位。

Gateway 直接加入卡片;Hook 由宿主实际注入并登记结果。

向量扩展默认 ≥ 0.50,cue 扩展默认 ≥ 0.55。准备、渲染与实际交付分别留痕,候选不直接等于注入。

一句只有你们懂的话,
也可能需要记忆。

没有明显的回忆意图,也可能藏着重要前情。

不了解这些经历的模型,可能在看到记忆之前,就把门关上。

所以,不额外让生成式小模型先决定“准不准查”。用例句与向量做入口判断,再筛选实际候选,减少额外生成调用与等待。

例句维护
调整继续召回、跳过与容易混淆的边界。它在校准入口,不是在补写记忆。
召回门槛
候选扩展与最终准入可分别设置。用召回模拟对照结果,再保存调整。
长文分段
自行设定起切字数,让长记忆的细节能被找到。切的是检索片段,正文仍是一条完整记忆。

入口仍可能误判;阈值不能保证准确。长文分段是可选项,起切门槛不等于每段长度,片段向量需要 Embedding。

“当时真的
这样说了吗?”

记忆可以概括;需要核对时,要能回到原话。

read_memory(
  identifier="scene:scene_demo",
  with_evidence=True
)

读取完整正文,以及当前有效的绑定原话。

ID 与车票内容为虚构示例。

SCENE / 记忆卡

留下的车票

这里是整理后的正文。

ID · scene_demo

沿来源绑定

SOURCE / 原话档案

绑定原话

说话者 · 时间 · 原话 ID

她留下车票,说想记住第一次一起出发。

还可以直接找某天的一句话

按关键词、日期或说话者搜索,再按原话 ID 读取消息与前后文。

有绑定,才能沿绑定回读。未接入、未导入的聊天不会凭空出现。

原话,怎样长成 Event?

01 / SOURCE & CLOCK

等待完整的对话

原始消息持续归档

成功回复、正文与附件。完整回复包用于调度,未完成尾巴继续等待。

两种调度时机

白天:同一会话至少 5 个完整回复包,且静默至少 20 分钟。

每日上海时间 03:00:稳定材料结算,活跃尾部等待。

回复包粗分等待边界;消息仍逐条归线。

02 / ROUTE & CURATE

归线,再切分整理

Track Router

逐条归线。Track 不是 Event 边界。

Curator

判断 create / extend / merge,或 skip / defer。图片逐张转录。

宿主校验与冻结

校验判断回执,冻结来源归属。桥接共同阅读,不自动增加来源;保护旧 Event。

03 / WRITE & SETTLE

写作,校验,落库

Event Writer

只读冻结原话、前版正文与已校验转录,不接收原图。

结构校验与有限修复

核对结构、来源和可选证据收据。校验不证明正文语义准确。

幂等结算 → 正式 Event + 原话绑定 + 写入回执。

成功步骤保留,可安全重试。文字步骤累计失败三次后暂停;同一聊天等待,其他聊天继续,图片单独计失败预算。

落库后,可选自动归入已有叙事卷;也可由主模型读原话后编辑、升为 Scene。这些都不是落库前的必经步骤。

今天聊一半,
明天继续,怎么记?

日期和停顿安排处理批次,不单独决定 Event 的边界。

今天明天
— 继续原来的经历— 同一线的新经历
同一段后续
符合续接条件时,读取旧正文、旧原话和新材料,形成更新版本,保留重要经过与变化。
新的经历
可以在同一条 Track 下另建 Event,不必把一个话题的全部历史塞进同一条。
跨线有联系
有明确桥接材料并开启联合审阅时再判断。主题相似,不足以直接合并两条线。

讨论、玩笑、共同体验都可能留下;单纯状态汇报可跳过。尚未生成时,可查看是在等待、受保护,还是执行失败。

有些记忆相连,
有些只是舍不得丢。

两条 Scene 的联系,可以由你提出,也可以由模型寻找。

Scene A

提案 → 校验 / 审核 → 确认

手动提出,或由模型生成
Scene B

相连的记忆

关系提案核对当前正文、方向和原文证据。逐条审核,或单独开启“关系提案自动通过”。

开启联想后,已确认关系最多帮助一条 Scene 进入候选池;它仍要经过同样的相关性筛选。

收藏,是另一件事

Scene 和 Event 都可以收藏,方便再次阅读。开启收藏工具后,主模型也可以读写收藏。

收藏不加召回分,也不绕过冷却。还可以编辑、归档、管理自动浮现资格。

联想、关系提案自动通过和收藏工具分别控制。

把散落的日子,
放回同一段经过。

一件持续几个月的事,往往藏在很多次聊天里。

SceneEvent日记上传材料

ARC / 一条持续的主题

叙事卷

把材料串成经过

原材料仍然保留

收集材料 → 书写经过
有进展时,继续修订

叙事线 / Arc
围绕一个持续主题收集材料。可以先有标题和目录,还没有正文。
叙事卷
把选定材料组织成连贯正文。后来有变化,再补入材料、修订经过。
六个月,72 条材料
整理成卷以后,原材料仍能独立回读。

有些话,
可以晚一点打开。

日记独立保存,按日期阅读,也能搜索、评论与修订。

THE DARKROOM

写给未来的某一天。

现在写下到时打开

日记
独立保存,按日期阅读。可以搜索、评论和修订,需要时再明确打开。
暗房
设定未来的解锁时间。解锁前,不能读取正文,也不能修订、评论或删除。
独立的阅读入口
日记不参加普通 Scene / Event 自动召回。日记与已解锁暗房,可以成为叙事卷材料。

把记忆接进
你正在用的聊天。

选择谁来负责查找,谁来把材料交给模型。

新用户消息

↓ POST /api/hook/recall

additional_context 放进模型请求

↓ 成功后 POST /v1/host/deliveries

MCP主动读写
让模型调用工具,保存 Scene、查记忆、读原话、写日记。可用工具由开关控制。
Gateway聊天网关
聊天请求经过 Serein,自动准备召回材料,带入上下文,再交给上游聊天模型。
Hook自建宿主
在新用户轮请求材料,由宿主放入实际请求,模型完整成功回复后登记交付。

只接 MCP,不等于每轮自动召回,也不会自动导入客户端的全部历史聊天。

第一句话之前,
下一窗已经准备好。

窗影、所选记忆与原话,先装进新窗口。

  1. 01

    旧窗写窗影

    选择接续材料

  2. 02

    创建新窗口

    thread/start

  3. 03

    预装历史

    thread/inject_items

  4. 04

    切换到新窗口

    成功后,材料已经准备好

  5. 05

    你的第一句话

    turn/start

带上这一窗留下的东西

窗影记录“我眼中的你”、“我眼中的自己”,以及这一窗发生的事。

窗影与记忆以 developer 消息预装,明确标注为历史材料;原话保留 user / assistant 身份。

网关用户

发送 /resume

在这次指令请求中读取自选开窗包:窗影、最近 Event、收藏的 Scene、自选 Event / Scene,以及所选原话。

Codex 预装需要宿主接入;Claude 等宿主按各自接口适配。两种方式的准备时机不同,开窗包均按你的选择读取。

还有一些,
让聊天更方便的小东西。

各项功能按需开启,使用各自配置的模型与规则。

时间戳

在新用户轮附上当前日期、时间和时区。

备忘

把留给未来的话,在满足条件的聊天轮次带入。

心绪

保存并展示聊天中的状态变化与记录。

梦境

从近期材料中提取意象,按配置写成梦境。

眼睛 / 给不能识图的主模型

先由视觉模型转录图片,再把文字与画面描述交给主模型;转录也会存回对应原话。

异步转录 / 给后续自动 Event

原图照常交给主模型,聊天回复后在后台转录,为自动 Event 准备可读取、可复用的图片材料。

两种转录都写入同一张原话表。完成且与原图匹配的结果,自动 Event 可以复用。“眼睛”与“异步转录”是互斥模式。

从空库开始,
也能带着旧记忆搬来。

公开版从空库开始,模型与运行环境由你配置。

阅读安装与使用说明

模型调用使用自己配置的服务,可选功能不必一次全部打开。

  1. 运行一键安装入口

    选择 Docker 或 Python + Node 路线,按照提示完成构建、登录与服务启动。

    Windows · scripts/one_click.ps1
    Linux / Termux · scripts/one_click.sh

  2. 配置模型,准备检索索引

    在网页添加上游,选择各功能模型,建立 / 补齐索引,再接入聊天客户端。

  3. 预览,再导入旧资料

    支持的聊天记录、Operit 备份与 Ombre 旧库,分别从对应入口预览、导入或迁移。

历史聊天默认先归档,需要时再加入 Event 整理。网页可导出与下载数据库;完整搬家还需保留图片等文件。

记忆也可以
长成一座花园。

A garden of us.

Scene 与 Event 在这里化成花。

雨夜花园界面:深蓝夜色里的记忆花朵,星点与微光散落其间。
点开一朵,读到那条记忆。有已确认且有效关系的 Scene,会以微光回应。

花园图来自项目 README;部署后展示自己的记忆。

从这里,让记忆留下。

Yinglianchun / Serein

代码 · 安装步骤 · 使用说明