在手机上跑大模型做个人知识库:元识(comemoria)的设计与实践
一款运行于 HarmonyOS NEXT 的隐私优先、文件可控的端侧 LLM 知识库应用。本文聊聊它的设计思路、技术取舍,以及我为什么坚持"知识编译一次,查询时直接读取"。
一、为什么又造一个知识库轮子
市面上的知识管理工具,要么是"收藏夹型"(网页/笔记一扔了事,回头根本找不到),要么是"AI 检索型"(把资料喂给向量库,查询时实时做语义检索 + 大模型生成)。
前者的问题是资料没有被真正消化;后者的问题是重、贵、且依赖云端——每次查询都要把数据送到远端模型,隐私和成本都让人心里打鼓。
我想要的其实很简单:把零散的原始资料丢进去,让模型在本地帮我读一遍、整理成结构化的知识,之后我查询时,直接读这些"已经被消化过"的页面就好。这个想法不是我原创,它来自 Karpathy 的一个 "LLM Wiki" 思路——而我的实践载体,是手里的华为鸿蒙设备。
于是有了 元识(comemoria):一个完全跑在 HarmonyOS 端侧、默认不联网的个人知识库。
二、核心理念:知识编译一次,查询时直接读取
传统 RAG 的链路是:查询 → 实时向量检索 → 拼上下文 → 模型生成。
元识换了一条路,我称之为"编译式知识库":
- 摄入(Ingest)阶段:LLM 把原始资料(笔记、文档、摘录)精炼、重组为一套结构化的 Markdown 知识层(首页索引、来源、概念、实体、对比等页面)。这一步做一次就够,知识从此"编译"完成。
- 查询(Query)阶段:不再算向量、不再实时语义检索,而是直接读取已编译好的页面,让端侧模型综合相关片段生成报告。
一句话总结:知识编译一次,持续更新,查询时直接读取。
这带来的直接好处是:响应稳定、零实时算力浪费、可完全离线运行。
三、整体架构
元识是标准的 HarmonyOS NEXT 原生应用(ArkTS + Stage 模型 + ArkUI),分层很清晰:
ArkUI 前端 (ImportPage / WikiBrowsePage / QueryPage / LintPage)
↓
Service 层 (IngestService / QueryService / LintService)
↓
LLM 抽象层 (LocalEngine 端侧 / PrivateCloudEngine 可选)
↓
应用沙箱文件系统 (filesDir/wiki/)
├── raw/ # 不可变原始资料
├── wiki/ # 编译后的知识层
│ ├── index.md
│ ├── sources/
│ ├── concepts/
│ ├── entities/
│ └── comparisons/
├── outputs/ # 查询报告
├── schema/ # SCHEMA.md 规则
└── models/ # GGUF 端侧模型
整个知识库就是一堆纯文本 .md 文件,没有数据库依赖。你甚至可以用系统文件管理器直接打开、复制、导出——这点是刻意为之。
四、几个关键技术点
1. 端侧 LLM 推理抽象层
为了不把业务和具体推理后端绑死,我定义了一层统一接口:
// LLMEngine.ts —— 统一的端侧/私有云推理接口
export interface LLMEngine {
complete(prompt: string, opts?: GenerateOptions): Promise
isLocal(): boolean;
}
class LocalEngine implements LLMEngine {
// 基于 llama.cpp / MNN + MindSpore Lite 加载 GGUF 或盘古 Embedded 模型
async complete(prompt: string, opts?: GenerateOptions): Promise
// 端侧推理,数据不出设备
}
isLocal() { return true; }
}
上层只面向 LLMEngine 编程,模型是在端侧(llama.cpp / MNN)还是私有云跑,对业务透明。后续切换 NPU 加速路径也只是换实现。
2. 文件沙箱 + 纯 Markdown(OKF)
所有知识资产都是纯文本 Markdown,符合 Open Knowledge Format(OKF)开放知识格式。好处是:
- 可移植:换设备、换应用都能读;
- 可版本化:纯文本天然适合 Git;
- 可长期归档:十年后
.md还能打开,.db未必。
3. 鸿蒙原生分布式同步
借助 HarmonyOS 的 hmdfs 分布式文件系统与 DDO 分布式数据对象,多台鸿蒙设备(手机、平板)之间可以实现原始目录文件的 free flow 同步,无需自建同步服务器。
4. 隐私优先
- 原始资料不离开设备沙箱;
- 默认不申请联网权限;
- 所有知识资产为纯文本
.md; - 用户可通过文件管理器直接查看/导出。
五、主要功能一览
- 资料摄入(Ingest):导入原始资料,LLM 提炼为结构化知识层;
- 知识浏览(WikiBrowse):结构化 Markdown 高质量渲染浏览;
- 编译式查询(Query):读取已编译页面生成报告,不做实时向量计算;
- 健康度检查(Lint):校验 Wiki 结构 / 链接 / SCHEMA 一致性;
- 端侧 LLM 推理抽象层:LocalEngine(端侧)+ 可选 PrivateCloudEngine;
- 分布式多设备同步(hmdfs + DDO);
- 用户认证与云端备份(AGC 华为 ID 登录、CloudDB);
- 文件沙箱管理:原始资料不可变、纯文本、可导出(OKF);
- 隐私保护:默认不联网、数据不出设备。
六、开发中的几点取舍
- 端侧模型的"小"是必须接受的现实。1.5B 级别的模型跑在手机上,整理资料和生成短报告完全够用,但别指望它做长文深度推理。所以我把"重活"(知识编译)放在摄入时一次性完成,把"轻活"(查询作答)留给运行时——正好是端侧模型的甜区。
- 不实时向量化,反而更省心。省掉了嵌入模型、向量库、检索服务的整套链路,部署和维护成本骤降。
- 权限能少则少。很多同类应用一上来就要联网、要存储、要一堆权限;元识反着来,把"默认不联网"当成产品原则而非技术选项。
七、写在最后
元识目前还在持续打磨(端侧 NPU 加速路径、盘古 Embedded 模型接入、分布式同步的边界处理都还在路上)。它不一定适合所有人,但对"在意隐私、想要一个真正属于自己的第二大脑、又不想把资料交给任何云"的人,我觉得这条路是对的。
如果你也在做鸿蒙原生 AI 应用,或者对"端侧 LLM + 知识编译"的思路感兴趣,欢迎在评论区交流。代码与文档都在持续完善中,后续我会把更多实践细节(比如 NPU 推理路径的踩坑)整理出来。
—— 元识(comemoria)开发者,写于 HarmonyOS NEXT 真机调试间隙
浙公网安备 33010602011771号