记忆
两种记忆方式二选一:内置的本地记忆,或 OpenViking 语义记忆。服务不可用时明确报错,两种方式不会互相顶替。
设计原则
- 两种方式,二选一。 在 设置 → 高级 → 记忆 → 记忆方式 里选,配置项是
memory.backend(openviking或embedded),新配置默认openviking。 - 从不悄悄回退。 OpenViking 服务离线时记忆操作返回
503并明确说明,不会换成本地记录假装命中;两种方式各自保存自己的记忆,互不迁移,切回原来的方式后原有记忆仍在。 - 按项目隔离。 每个项目的目录是
viking://resources/projects/<projectId>,由项目自动管理。检索结果会再按项目范围过滤一次。 - 记忆不等于能力提升。 一次记忆写入只是多了一条可检索的资料;行为上的改变走基因树进化。
- 会话日志、草稿和项目配置不进入记忆检索库。
两种方式
| OpenViking 语义记忆 | 本地记忆(内置) | |
|---|---|---|
| 需要 | Docker、OpenViking 服务、向量模型和文本模型 | 什么都不需要 |
| 检索 | 按语义:换一种说法、换一种语言也能找到 | 按关键词:只找得到用了相同词语的内容 |
| 对话记忆 | 由模型提炼成长期记忆 | 原样保存每一段对话,不调用模型 |
| 数据位置 | OpenViking 服务的数据卷 | 本机状态目录下的 <state>.rna/memory/embedded.sqlite(权限 0600) |
| 删除对话时 | 已提炼的项目记忆保留 | 这段对话保存的内容一并删除 |
本地记忆用 SQLite FTS5 做关键词检索,英文和数字按词,中日韩文字按相邻两字切分,命中时返回文件里查询词最密集的一段原文。它不理解同义词和改写,不跨语言,也不从对话里提炼结论。在一份真实状态的 112 轮、100 次检索的重放里,同一对话中更早的一轮排在第一的占 90%,前五条里有的占 98%;样本只有 6 个对话,这说明“排序可用”,不是精确的召回率。
两种方式下,自动关联、记忆工具、记忆浏览、同步队列、删除会话和回退都走同一套代码。本地记忆的数据库文件随恢复点一起备份和还原。需要 Node 的 node:sqlite,随桌面版分发的运行时已包含。OpenViking 的部署方法见仓库中的 docs/openviking-local.md,本地记忆的细节见 docs/embedded-memory.md。
自动关联
有记忆能力的真实模型会话,在新的一轮开始时由 JEV 先判断这一轮要不要用记忆;需要时关联一组有预算的候选摘录,再按需调用 openviking_search、openviking_read 展开概览或原文(两种方式下工具名相同)。关联的内容记录在这一轮的参考上下文里,不改变系统提示的缓存前缀。
设置 → 记忆 中的常用选项:
- 自动关联项目记忆 开关;
- 自动保存项目记忆 开关;
- 自动关联预算(估算 token),默认 2048;
- 检索选项里每次检索最多返回的候选数。
OpenViking 的服务地址和凭据放在默认折叠的“高级连接设置”里,用“测试已保存的连接”检查;本地记忆用“检查本地记忆”。
三个层级
| 层级 | 读什么 |
|---|---|
| L0 | 目录摘要 |
| L1 | 目录概览 |
| L2 | 文件全文,默认读取 200 行,最多 500 行 |
--level 是索引过滤条件,不能把摘要变成全文。
自动保存
完成的真实回合登记到持久的同步队列。OpenViking 方式下再写入服务、提交、轮询:task_id 只表示抽取任务已受理,不代表学习已经完成,结果不明确的提交不会被盲目重复。本地记忆方式下,提交的那段对话原样成为一条记录,标题取你的第一行。两种方式都不会批量补传全部历史。
设置里的“记忆同步”能看到同步状态:还在核对的、没有同步成功的,以及可以重新提炼的失败项(重新提炼会产生费用,需要你再确认一次)。
回退会一起撤回
你编辑或删除一条消息、回退一轮时,OpenViking 里由被移除的轮次提炼出的记忆也会被撤回,只撤回与归档记录完全一致的条目,其余的原样保留并告诉你。删除整个对话则保留已提炼的项目记忆。没有直接删除单条记忆的入口。
后台的项目资料被误撤回的情况(例如换模型或新开对话曾经会让项目范围漂移)现在已经堵住:只有真正的删除或隐私边界才会撤回交付资料,之前被误撤回的会自动重新建立索引。
CLI
./rna memory-config --backend embedded # 或 --backend openviking
./rna memory-config --endpoint http://127.0.0.1:1933 --api-key-env OPENVIKING_API_KEY --auto-recall true --context-budget 2048
./rna memory PROJECT_ID health
./rna memory PROJECT_ID initialize
./rna memory PROJECT_ID search "发布约定" --level L1
./rna memory PROJECT_ID read viking://resources/projects/PROJECT_ID/note.md --level L2
./rna memory PROJECT_ID write --file /path/to/note.md --title "发布约定"
./rna doctor PROJECT_IDdoctor 会报告后台服务、模型配置、记忆连接的健康状态,以及近 7 天的使用与进化状态;记忆健康检查失败时以非零状态退出。