AIRI 记忆系统详解:如何用 DuckDB WASM + pgvector 为 AI 伴侣实现长期记忆
【免费下载链接】airi💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 Factorio 游玩,支持 Web / macOS / Windows。项目地址: https://gitcode.com/moeru-ai/airi
想让 AI 伴侣拥有长期记忆吗?开源项目 AIRI 用 DuckDB WASM 与 pgvector 两套向量存储方案,为 AI 伴侣(AI waifu / 数字伙伴)搭起了从「向量嵌入」到「记忆遗忘曲线」的完整长期记忆系统。本文带你读懂它的设计思路、关键文件和核心文件路径,无需大量代码也能快速上手。
为什么 AI 伴侣需要长期记忆?
普通的聊天机器人「一问一答」,聊完就忘。而 AIRI 的目标是让虚拟角色真正「住」进你的设备里,像 [Neuro-sama] 那样记得你说过什么、你们一起经历过什么(这里的链接已省略)。
记忆系统的难点在于:
- 持久记忆 vs 工作记忆:长期记忆难以按关系和依赖遍历查询,而工作记忆容量有限;
- 语义检索:需要用 embedding 模型把「文本」变成「固定长度的向量」,再做相似度搜索;
- 像人一样遗忘:较新的记忆应比旧的更容易被想起,情绪与时间都会影响召回。
💡 AIRI 的开发者在 DevLog-2025.04.06 中明确说:目标是做出「当下最先进、最强大、最健壮」的记忆系统,思想深受人类记忆系统启发。
核心架构:DuckDB WASM 与 pgvector 双存储方案
AIRI 没有押注单一向量数据库,而是「浏览器端 + 服务端」两手准备:
DuckDB WASM:跑在浏览器里的向量数据库
浏览器里的记忆实验由@proj-airi/drizzle-duckdb-wasm封装包提供(已迁移至独立仓库,见 packages/duckdb-wasm/README.md)。
在 packages/stage-ui/src/composables/use-duck-db.ts 中,Web 端通过 Web Worker 加载 DuckDB 的 WASM bundle,并用 Drizzle ORM 建表:
CREATE TABLE IF NOT EXISTS memory_test (vec FLOAT[768]);关键点:
- 纯 WASM 运行:不依赖任何后端,768 维向量直接存在浏览器内存/本地;
- Mutex 单例管理:用锁保证数据库实例全局唯一,避免多标签页并发踩踏;
- Drizzle ORM 加持:TypeScript 类型安全,查询即代码。
pgvector.rs:服务端的向量检索引擎
服务端(如 services/telegram-bot 的 Telegram 机器人)选择 Rust 重写的 pgvector 兼容实现pgvector.rs,原因是它支持超过 2000 维的向量,为未来更大的 embedding 模型留足空间。
初始化脚本 services/telegram-bot/sql/init.sql 只有两件事:
ALTER SYSTEM SET vectors.pgvector_compatibility=on; CREATE EXTENSION vectors;配合 services/telegram-bot/docker-compose.yaml 即可一键拉起向量数据库容器。而 packages/memory-pgvector/src/index.ts 则是一个基于@proj-airi/server-sdk的记忆服务模块,负责接入配置并常驻监听——这就是 AIRI 服务化记忆的入口骨架。
记忆如何工作:从对话到召回的 4 步
① 嵌入(Embedding):文本 → 固定长度向量数组。注意维度是固定的:切换 embedding 模型后需要重新索引所有记忆。
② 存储(Storage):向量写入 DuckDB(浏览器)或 pgvector.rs(服务端),并附带时间戳、场景、情绪等元数据。
③ 检索(Retrieval):按语义相关性 + 时间关联度打分,支持重排序(rerank)。
④ 衰减(Decay):借鉴人类遗忘曲线,为不同记忆类型(工作记忆 / 短期记忆 / 长期记忆 / 肌肉记忆)设定各自的强化曲线与半衰期,让「越新的记忆越容易被想起」。
除了确定性的衰减,AIRI 还模拟了随机闪回与情绪偏置——记忆可能突然被想起,也会被情绪左右:
文件导航:记忆相关代码都在哪?
| 模块 | 路径 | 作用 |
|---|---|---|
| 浏览器端 DuckDB 封装 | packages/stage-ui/src/composables/use-duck-db.ts | Web Worker 中初始化 WASM 向量库 |
| Drizzle + DuckDB WASM | packages/drizzle-duckdb-wasm/README.md | 封装包迁移说明 |
| 服务端 pgvector 模块 | packages/memory-pgvector/src/index.ts | 记忆服务骨架 |
| 向量库初始化 SQL | services/telegram-bot/sql/init.sql | 开启 vectors 扩展 |
| 记忆系统设计文 | docs/content/zh-Hans/blog/DevLog-2025.04.06/index.md | 完整设计思路与交互 Demo |
| 项目总览 | docs/content/zh-Hans/docs/overview/index.md | AIRI 定位与模块地图 |
写在最后
AIRI 的记忆系统给了三个值得借鉴的工程决策:
- 双后端策略——DuckDB WASM 让「零部署」的浏览器也能做向量检索,pgvector.rs 扛住服务端高维向量;
- 把遗忘建模成算法——衰减曲线、半衰期、情绪偏置,让 AI 伴侣的记忆更像人;
- 用 ORM 管理向量——Drizzle 让向量表和关系表共享一套 TypeScript 类型体系。
如果你想动手体验,可以先从 services/telegram-bot/docker-compose.yaml 拉起向量库,再阅读 DevLog-2025.04.06 里的交互 Demo 源码,一步步理解「AI 伴侣的记忆」是如何被存下来、检索出来的。
【免费下载链接】airi💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 Factorio 游玩,支持 Web / macOS / Windows。项目地址: https://gitcode.com/moeru-ai/airi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考