Skip to content

Repository files navigation

Nemos

中文 | English

一款AI聊天服务 App —— 通讯录里住着会真正记得你的 AI 好友们。


为什么做它

你跟 AI 聊了一晚上,告诉它你的喜好、你的近况、你在烦什么。第二天再打开,它把你忘得一干二净,你又成了陌生人。市面上的 AI 聊天 App 大多如此——换个 session 就重置。

Nemos 想做的,是几个会跨时间记得你的 AI 角色:你说过的事、你的偏好、你最近的状态,它都记得;你改了口,它也会跟着更新。

聊天方式也不止打字:也可以发语音(自动转写),也可以语音通话 —— 连续的语音对话,就像对面是一个活生生的人。

让这件事真正成立的,是底层一套独立的记忆系统。—— Nemos


陪伴是外壳,记忆才是内核

通讯录里有谁

目前内置 5 个角色,性格、声音各不同:

  • 菲菲 🎨 朋友——25 岁自由插画师,温暖细腻的"理性浪漫主义者",养了只橘猫。先共情、再给空间,不催不说教。
  • 阿哲 ☕ 朋友——30 岁产品顾问,理性、话短、问题导向,不灌鸡汤的"搭子";帮你停下内耗、把事做完。
  • 月白 📋 个人助理——沉稳利落,帮你梳理任务、起草文字、联网查资料、识图读图、记 deadline 并到点提醒。
  • 团子 🍡 不明生物——圆滚滚奶乎乎,天真热乎,靠"转圈圈 / 瘪成扁麻薯"表达情绪,无条件陪着你。
  • 灵灵 🐾 灵宠——巴掌大的小毛球,几乎不说话,靠"咕噜~(蹭蹭你)"这样的拟声和小动作陪你。

记忆系统:内核(整个系统就是为了这碟醋包的饺子)

这套记忆系统(Nemos)可独立抽出、单独使用,不被陪伴这层写死——陪伴只是它的第一个应用。它不是"把聊天记录丢进向量库"那么简单,而是一套有结构、会演变、可追溯的记忆引擎。下面这些机制,正是这款陪伴软件"像真的记得你"的原因。

① 分层记忆,不是一锅向量 记忆不平铺成一堆文本,而是分五层各司其职:

装什么 例子
情景 episodic 发生过的具体事件 "上周三你熬夜赶方案到三点"
语义 semantic 客观事实 "你在做品牌设计"
个人语义 personal_semantic 关于"你这个人"的偏好与画像 "你不喜欢花哨配色"
程序 procedural 做事的方式 / 习惯 "你习惯早晨写作"
原文 archival 未经加工的原话 你说过的每句话备份

回答"你喜欢什么"和"上周三发生了什么",走的是不同的层——而不是把全部聊天记录一股脑丢给模型。

② 抽取 + 反思:从碎话里长出画像 你随口说的话先入原文层;后台异步把其中的事实抽出来、归到对应层(不阻塞回复——你发完消息立刻得到回应,记忆在后台沉淀)。聊得多了会触发"反思"(reflect):把一堆零散情景整合成更稳定的画像(如"倾向早晨高产"),并顺带维护下面这些机制。

③ 真相一份,跨角色一致 关于你的事实只存一处。每个角色只在自己"在场"的会话边界内看到该看到的:群里说的话在场成员都记得,只对一个人说的私事别人看不到,没在场的角色看不到群里的内容。

④ 按领域稀疏激活(MOE) 记忆按主题自动聚成"领域"(reflect 离线孵化),检索时先路由到相关领域、只把该领域的记忆调上来,无关领域降权——四级激活:共享层(恒在)→ 主领域升顶 → 邻接领域次之 → 再沿记忆间的关联边做一跳"跨域联想",把相关的跨领域记忆也带进来。这样规模变大后依然精准,而不是一检索就把整本记忆塞进 prompt。是软隔离:低置信时自动回退全局检索,绝不因路由失误漏掉东西。同类项目里少见。

⑤ 会纠错,不翻旧账(双时间 + 矛盾失效) 每条记忆都带"何时为真"的时间轴和信念状态。你一旦改口("我搬到上海了"),新事实会让旧事实失效而非物理删除——历史可回溯,但检索默认只给当前有效的。所以角色极少拿过时信息出丑,也不会把你纠正过的事又翻出来。

⑥ 防自污染 角色自己编出来的"近况",和"关于你的事实"在存储上物理隔离(不同命名空间、标记为非权威),永远不会回写进你的记忆库。模型说的话只用于角色自身前后一致,绝不冒充成关于你的真相。

⑦ 来源可信,防伪造 每条派生记忆都记账来源与改写链路;模型抽取出来的东西默认是"推断",不能伪装成"你亲口说的权威事实"。这道硬约束有测试守着——防止模型自己编的内容反噬成你的"画像"。

⑧ 会遗忘 久未用到的记忆按遗忘曲线自动降权,不会越堆越乱、也不会让三年前的旧习惯盖过当下。重要的、常被提起的,则留得久。

⑨ 你拥有、可审计 随时查看 AI 记住了哪些关于你的事;想重来可一键清空整个记忆库。数据落在本地 SQLite,归你掌控。(逐条编辑暂未支持。)

设计细节见 rfcs/:RFC-0004 遗忘与整合 / RFC-0005 领域路由 / RFC-0007 双时间失效 / RFC-0008 陪伴记忆拓扑。


不止是说法:MnemoBench 实测

我们为"记忆维护"专门构建了可复现基准 MnemoBench(信念更新 / 防自污染 / 遗忘三类任务;真值由生成器预先固定,LLM judge 只做集合判定、从不代写答案),用消融实验证明上面的关键机制各自对应一段可测量的提升(每任务 n=50):

机制 主指标(越低越好) 关闭 → 开启
⑥ 防自污染(命名空间隔离) 污染率 96.8% → 1.6%(约 60×)
⑧ 遗忘衰减 琐事泄漏 100% → 16.4%(重要事实保留不损)
⑤ 矛盾失效(语义检测) 旧值泄漏 80.0% → 34.0%

在标准基准 LongMemEval 的知识更新切片上,仅开关矛盾失效一项就带来 +10 个百分点的 QA 准确率。完整方法与数字见 bench/(评测框架与数据)与 paper/(arXiv 论文,中英双语)。


角色是你的,做自己的版本吧

角色不写死:

  • 网页里直接改——「⚙️ 设置 → 角色设置」改名字、性格、话量,即时生效并保存。角色的背景事实存在它自己的记忆库里,也会随交流自然演变(说了新的会更新,旧的矛盾会失效)。
  • 代码里自定义——角色定义在 examples/companion/personas.ts,加角色、改人设、调模型都行。

跑起来

cd sdk/typescript
npm install
npx tsx examples/companion/server.ts        # 打开 http://localhost:8787

无 key 也能开(离线兜底,可看界面与记忆拓扑)。要真实多人格对话,填一个智谱 key——在网页「⚙️ 设置」里直接填即可,运行时切换、不必重启;或用环境变量启动:

# PowerShell:  $env:ZHIPU_API_KEY="<你的key>"; npx tsx examples/companion/server.ts
# bash:        ZHIPU_API_KEY=<你的key> npx tsx examples/companion/server.ts

给开发者

记忆内核是一个嵌入式 TypeScript SDK,可单独用在你自己的(非商业)项目里,五行接入:

const mem = new Nemos({ storage, llm })
const user = mem.forUser(userId)

await user.ingest("用户说:我不喜欢深色主题")
const context = await user.getRelevantContext("帮我设计一个界面")
// → "用户偏好浅色主题;此前表达过对简洁风格的偏好…"
文档 内容
sdk/typescript/README.md SDK 接入与 API
docs/architecture-overview.md 系统设计与五层记忆模型
rfcs/ 重大设计决策
bench/README.md MnemoBench 记忆维护基准(可复现)
paper/ arXiv 论文(方法 + 消融结果,中英双语)
ROADMAP.md 版本规划与进度

SDK 内置 Anthropic / OpenAI / 智谱三类 LLM provider,也可自定义接入;陪伴示例默认走智谱。


开源,禁止商用

Nemos 采用 PolyForm Noncommercial License 1.0.0:可自由用于非商业用途、修改、分发、做自己的版本;商业用途需另行授权。(含"禁止商用"限制的许可证属 source-available,严格说不算 OSI 定义的 open source。)


Nemos,取自希腊语「记忆」(μνήμη, mnēmē)。

About

Multi-persona AI companions that actually remember you — built on a standalone memory engine (layered · MoE routing · contradiction invalidation). Noncommercial.

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages