Zorv AI 记忆库架构全解析:端侧智能长期记忆系统设计

1 阅读5分钟

1. 项目简介

项目:Zorv AI(包名 com.ai.assistance.quro适用版本:v1.0.77 开源地址github.com/Quor-a/Zorv…

Zorv AI 是一个端侧优先的 AI 助手项目,其核心亮点之一便是记忆库(Memory Library)——一个文件化、AI 可自动沉淀的长期记忆系统。

让 AI 能"记住"用户偏好 / 事实 / 约定 / 项目背景,跨会话持续可用,而不是每次对话都要用户重新交代。

本文将从设计定位、整体架构、数据模型、检索引擎、AI 记忆工具等多个维度,带你完整拆解这套记忆库的实现细节。


2. 设计定位与核心特点

Zorv AI 记忆库的设计遵循以下原则:

  • 端侧优先:纯本地 JSON 文件,无云端依赖、无第三方库(仅 Android 自带 org.json)。
  • 人格隔离:每条记忆可绑定某张人格卡(personaId),空 = 全局记忆。
  • AI 自动写:通过 memory_save 等工具,AI 在对话中主动沉淀记忆。
  • 可检索:BM25 相关性排序 + 子串兜底,中英混排友好。

这套设计让记忆库既能保证用户隐私(数据不出端),又能提供足够灵活的检索能力,兼顾性能与召回率。


3. 整体架构

记忆库整体分为四层:AI 引擎、工具层、仓库层与持久化层。

flowchart TB
    subgraph AI["AI 引擎"]
        T["memory_save / memory_list\nmemory_search / memory_delete"]
    end
    subgraph TOOL["工具层 (QuroMemoryTools)"]
        S["QuroMemorySaveTool"]
        L["QuroMemoryListTool"]
        Q["QuroMemorySearchTool"]
        D["QuroMemoryDeleteTool"]
    end
    subgraph REPO["仓库层 (QuroMemoryRepository)"]
        R["loadAll / loadForPersona"]
        W["add / update / delete"]
        SE["search (BM25)"]
        IO["saveAll (JSON 文件)"]
    end
    subgraph FS["持久化"]
        F["filesDir/quro_memory.json"]
    end

    T --> TOOL
    TOOL --> REPO
    REPO --> IO
    IO --> F
    F --> R
  • AI 引擎:通过 function calling 调用记忆工具。
  • 工具层:封装 4 个记忆操作工具。
  • 仓库层:核心业务逻辑,负责加载、增删改查与检索。
  • 持久化:最终落盘为本地 JSON 文件。

4. 数据模型(QuroMemoryEntry)

每条记忆的数据结构如下:

字段类型说明
idStringUUID,唯一标识
personaIdString绑定人格卡 id;空 = 全局记忆
groupString分组 / 文件夹(偏好 / 工作 / 项目)
titleString标题,便于检索与展示
contentString记忆正文(必填)
tagsList<String>命名关联标签
createdAtLong创建时间
updatedAtLong更新时间

人格隔离机制

flowchart LR
    A[&#34;全局记忆\npersonaId=''&#34;] --> M[&#34;记忆库&#34;]
    B[&#34;人格 A 记忆&#34;] --> M
    C[&#34;人格 B 记忆&#34;] --> M
    M -->|&#34;loadForPersona(A)&#34;| R[&#34;A 的记忆 + 全局记忆&#34;]

loadForPersona(id):某人格卡取记忆时,自动并入全局记忆(personaId 为空者),实现"人格专属 + 全局共享"。


5. 存储与持久化

  • 文件位置context.filesDir / quro_memory.json
  • 格式{"memories":[ ... ]},纯 JSONObject / JSONArray,无第三方依赖。
  • 向后兼容:仅含 id/personaId/content/tags/createdAt 的历史文件可正常加载。
{
  "memories": [
    {
      "id": "uuid-...",
      "personaId": "",
      "group": "偏好",
      "title": "不喝咖啡因",
      "content": "用户下午后不喝含咖啡因饮品",
      "tags": ["习惯", "健康"],
      "createdAt": 1234567890,
      "updatedAt": 1234567890
    }
  ]
}

6. 检索引擎(BM25 + 子串兜底)

检索策略采用双层保障,确保"相关性"与"召回率"兼顾。核心源码位于 QuroMemoryRepository.search()

flowchart TB
    Q[&#34;query&#34;] --> BM25[&#34;1) BM25 打分排序&#34;]
    BM25 -->|&#34;topK 全量&#34;| Rank[&#34;相关结果降序&#34;]
    Rank --> Fallback{&#34;BM25 是否\n漏掉子串命中?&#34;}
    Fallback -->|&#34;是&#34;| Sub[&#34;2) 子串包含兜底\n(内容/标题/标签/分组)&#34;]
    Fallback -->|&#34;否&#34;| Out[&#34;直接返回&#34;]
    Sub --> Out
    Out --> Res[&#34;最终结果 = 相关排序 + 兜底追加&#34;]
机制收益
BM25词频饱和 + 长度归一化;中文走 bigram,无需词典短而切题的记忆排在长而泛泛之前;支持中英混排/多词
子串兜底对纯符号/单字符/分词边界特殊查询补召回不丢失精确编号/英文片段的旧行为
  • 索引文本 = 标题 + 内容 + 标签 + 分组,任一字段命中即得分。
  • 空查询返回全部记忆。

7. AI 记忆工具(function calling)

AI 通过 4 个工具直接与记忆库交互(见 QuroMemoryTools.kt):

工具名作用关键参数
memory_save保存一条长期记忆content(必填) / title / group / tags
memory_list列出全部记忆
memory_search按关键词检索query
memory_delete删除匹配的记忆query

自动沉淀原则:当用户透露值得跨会话记住的信息(偏好/约定/项目背景)时,AI 应主动调用 memory_save,无需用户明确要求。


8. 与灵魂注入的衔接

记忆库是"灵魂层"的三大输入之一,为 AI 人格提供长期记忆上下文:

flowchart TB
    Mem[&#34;记忆库\nQuroMemoryRepository&#34;] -->|&#34;loadForPersona&#34;| Ctx[&#34;SoulContext.memories&#34;]
    Ctx --> Engine[&#34;QuroSoulPromptEngine&#34;]
    Engine -->|&#34;第三优先级&#34;| Sys[&#34;灵魂层提示词\n『已有记忆』段&#34;]
    Switch[&#34;autoSaveMemory 开关&#34;] -->|&#34;关闭&#34;| NoMem[&#34;不注入记忆 / 不提示记忆能力&#34;]
    Switch -->|&#34;开启&#34;| Mem
  • "AI 自动保存记忆"开关autoSaveMemory)控制:关闭时既不注入已有记忆,也不提示记忆能力。
  • 注入时以"自然融入对话,不要生硬提及"的方式呈现,维持人格一致性。

9. 并发安全与导入导出

机制实现
进程级写锁companion object writeLock,跨 ViewModel / 语音球 / 记忆工具 多实例保证临界区原子,杜绝并发写互相覆盖
临界区 reloadadd/update/delete/mergeImport 在锁内重新 loadAll() 再写,避免同窗口覆盖
导出exportJson(){"memories":[...]} 文本
导入mergeImport():按 id 合并(相同 id 覆盖,否则追加),返回导入条数
兼容解析parseJson() 兼容 {"memories":[...]} 与纯数组两种格式

10. 能力对照表

能力入口说明
保存记忆memory_saveAI 主动沉淀
列出记忆memory_list全量展示
检索记忆memory_searchBM25 + 子串兜底
删除记忆memory_delete按关键词匹配
人格隔离personaId专属 + 全局共享
导入导出mergeImport / exportJson备份与迁移
并发安全writeLock跨实例原子写

11. 总结

Zorv AI 的记忆库设计体现了几个值得借鉴的思路:

  1. 端侧优先:数据不出端,天然保护隐私,也省去云端同步的复杂度。
  2. AI 自动沉淀:通过 function calling 让 AI 主动记忆,而非依赖用户手动操作。
  3. 双层检索:BM25 保证相关性,子串兜底保证召回率,兼顾精度与覆盖。
  4. 人格隔离personaId 实现"专属 + 全局共享"的灵活记忆边界。
  5. 并发安全:进程级写锁 + 临界区 reload,保证多实例写入不互相覆盖。

如果你对端侧 AI 记忆系统、function calling 落地或 Android 本地持久化方案感兴趣,这个开源项目值得深入阅读源码。

开源地址github.com/Quor-a/Zorv…

配套文档:跨进程能力框架见《ACI 完整架构介绍》;系统级浮窗见《LSPosed 与系统级浮窗技术架构》;小程序渲染见《小程序技术架构》;人格与心跳见《灵魂注入与 AI 心跳人格自动孵化》。