16-AI助手的主战场在手机上-移动端记忆引擎开源

3 阅读6分钟

AI 助手的主战场在手机上,记忆却都活在云端,NylonMe首个嵌入手机的高性能开源记忆引擎

nylon-mobile 随本文开源,公开仓库 nylon-memory/NylonME 的 nylon-mobile 分支可查;文中全部数字来自真机回归记录。


一个错位:人在手机上,记忆在云端

看看现在主流的 AI 助手长什么样:ChatGPT、Kimi、恰友ChatYou、DeepSeek,主入口全是手机 App。用户跟 AI 说的私房话——体检报告、家庭安排、跳槽犹豫、半夜三点的胡思乱想——也都发生在手机上。

再看看开源记忆引擎们的部署形态:mem0 起服务要 Python + 向量数据库,Zep 要图数据库集群,MemOS 要 GPU 调度 KV cache。**清一色 PC 端或云端。**想给手机 App 加长期记忆?架构师会告诉你:把用户数据传到服务器,在那边跑记忆引擎,再把结果传回来。

这意味着用户最私密的记忆,必须先离开他的手机,才能被"记住"。

我们觉得这个错位该被纠正了。nylon-mobile 今天开源:完整的 NylonME 记忆引擎,编译进你的 App,进程内运行,不开端口,不走网络,不断电就一直记得。

不是"轻量版",是同一台引擎

先纠正一个直觉:提到"移动端移植",大家会想到功能阉割的 lite 版。nylon-mobile 恰恰相反——我们把服务端的核心逻辑抽成了共享的 EngineCore,gRPC 服务端和手机端调用同一份编织、共振、检索实现。移动端 crate 只是一层 UniFFI 薄绑定,Kotlin 和 Swift 直接进程内调用。

这给了一个很难得的保证:**端上和服务端行为一致。**同一条记忆、同一个查询,两边返回同样的结果。我们在工程上专门验证了这一点(下文 CJK 分词的故事)。

移动端砍掉的只有三类东西,而且砍得理直气壮:服务端依赖(tonic/axum/rmcp 不进编译产物)、多租户(手机上就一个用户,单租户单 owner)、以及所有计费和云端逻辑——后者属于商业层,这个 crate 里永远不会有。

真机数字:中端机上跑得动语义检索

纸面架构谁都会画,端上 AI 的真问题是算力。我们拿一台荣耀 NTH-AN00(骁龙 778G,2021 年的中端机)做了真机回归:

词面通道(零模型依赖,纯图检索):

  • 20 条中英混合记忆,8 个中文查询,top-1 全部命中
  • 单次共振平均 55 微秒——你没看错单位,是 µs

语义通道(端上 ONNX 嵌入,bge-small-zh 量化模型,仅 24MB):

  • 10 个查询 top-1 全部命中,包括纯语义探针「家里养了宠物吗」——和目标记忆零字面重叠,靠嵌入正确命中橘猫条目
  • 单次共振 0.3–1.2 秒(含查询嵌入,纯 CPU 推理),weave 单条 0.3–1.1 秒

24MB 的模型、纯 Rust 的推理栈(tract + 自研 WordPiece 分词)、中端机亚秒级语义召回。对于记忆引擎这个场景——每次对话前后调用一两次——这个性能完全藏在用户的感知阈值之下。

移动端的三场硬仗

把引擎塞进手机,难的不是编译通过,是三件 PC 上不存在的事。

**第一场:进程说没就没。**手机 App 随时被系统杀掉,没有"优雅退出"这回事。我们的答案是三层兜底:写入即 WAL(进程被砍,下轮启动自动重放);App 退后台触发自动 checkpoint(默认 32 次写入或 300 秒脏触发);shutdown() 做 compact + 落盘。真机上验证过 WAL 跨进程恢复,一条不丢。

第二场:中文查询没有空格。「用户的猫叫什么」这种查询,英文分词器直接傻眼。我们实现了 CJK 查询分词:汉字词项展开为非停用单字 + 相邻二字组,IDF 加权,「的/了/吗」不参与,含停用字的二字组直接跳过。修掉的那个真实 bug 值得说:「用户的猫」一度总被「用户的X」句式劫持——因为「户的」这个二字组到处乱撞。修完后,8 个中文查询全部 top-1。这套逻辑在 core 层实现,服务端和端上共用,不会出现"手机上搜得到、服务器上搜不到"的撕裂。

**第三场:嵌入模型要开箱即用。**ONNX 模型从 HuggingFace 下载下来,tract 调和不了符号形状(量化版的 value_info 作怪),我们写了个预处理脚本剥掉它;嵌入维度从模型输出形状自动推断,换模型不用改代码。这些坑我们都填平了,文档里写清楚了每一步。

为什么移动端才是个人记忆的主场

云端记忆引擎解决的是组织的记忆:团队的客服共享客户历史,部门的 Agent 共享项目经验——这是 NylonME 服务端版一直在做的事(多租户、审计、TLS、团队管理,前面几篇都写过)。

但个人的记忆不一样。你的健康、你的情绪、你和 AI 助手日积月累的默契——这些东西的最佳归宿不是某个公司的服务器,而是你口袋里的设备。手机才是个人 AI 的主战场,而主战场上一直没有一台能打的记忆引擎。

现在有了。隐私叙事也变得极其简单,简单到一句话:**你的记忆不出你的手机,因为它根本没有离开的理由。**断网可用,飞行模式可用,换手机就是拷个文件。

我们的完整图景是两层:个人记忆在端上(nylon-mobile),团队记忆在云端(NylonME 服务端),同一个引擎内核,各守各的边界。AI 助手公司可以用它做真正"懂你"的私人助理,App 开发者可以给任何应用加上不会泄露的长期记忆。

现在就能试

  • 仓库:GitHub nylon-memory/NylonME,nylon-mobile 分支,engine/crates/nylon-mobile/
  • Android / iOS:UniFFI 生成 Kotlin / Swift 绑定,CI 已覆盖 NDK 与 iOS 构建,release 按 tag 产出 .so / xcframework
  • 嵌入可选:不给模型就走纯词面通道(55µs),给 24MB 量化模型就有端上语义
  • 集成指南:INTEGRATION.md,含 onStop→checkpoint / onDestroy→shutdown 的挂接样例

诚实的边界也说清楚:端上目前是单租户单 owner,LLM 通道(编织分解、反思)在端上留空——手机上的深度理解要么靠端侧小模型(在看),要么交给用户自己配置的云端 LLM(路线图上)。嵌入模型换维度需要重建记忆库。这些我们都会继续填,但开源第一天是什么就是什么。

AI 的下半场需要记忆,而记忆的下半场,一个在云上,一个在口袋里。我们把口袋里那一半先开源了。


NylonME:Rust 记忆引擎,Apache-2.0。服务端版 LoCoMo 82.9% / LongMemEval-S 全量 83.2%,双基准双全量破 80;移动端版今日开源,同一内核,口袋部署。