KernelVault 创意方案:把手机变成离线运行的隐私资产保险箱

KernelVault:把 AI 装进手机,让隐私资料只在本机被看懂

Your private files, organized locally by AI.

从一个 Android 开发者视角,记录如何用 Jetpack Compose + SQLite / FTS + MNN 端侧模型,做一个"不联网、不上传、不默认改写原文件"的手机隐私资产整理工具。


1. 起因:为什么我要做这个

1.1 手机里最难找的,往往也是最不想上传的

每个人手机里都有一类资料:平时不怎么打开,但关键时刻一定会找。

电子发票、合同截图、证件照片、付款凭证、聊天记录、会议材料、下载文档、录音、压缩包。它们混在相册、下载目录、聊天软件缓存和系统文件夹里。真要找的时候,常见流程是:翻相册、搜文件名、回忆日期、打开聊天记录、再去文件管理器里碰运气。

更麻烦的是,这些资料通常不适合上传云端做识别。

云相册可以告诉你"这是一张票据",云盘可以帮你 OCR,但前提是你愿意把这些敏感文件交给远端服务。对合同、证件、账单和聊天截图来说,这个心理成本很高。

所以我想做一个更克制的东西:让手机自己看懂这些资料,但资料不离开手机。

这就是 KernelVault 的起点。

1.2 KernelVault 的含义

KernelVault 这个名字里有两个词:

  • Kernel:本机内核、端侧处理、离线优先。
  • Vault:保险箱、风险审计、用户自己掌控。

它不是云相册,也不是传统文件管理器,更不是一键清理工具。它要做的是把手机里的资料整理成一座本地隐私资产库,让用户知道:

text 复制代码
这是什么?
里面大概有什么?
是否需要留意?
这个结论从哪里来?

我给它固定了一个核心输出:

text 复制代码
{tags, summary, privacy}

也就是:标签、摘要、风险等级。

1.3 我给这个项目画的三条红线

动手之前,我先定了三条红线。

红线一:不上传。 当前 Android Manifest 不声明 INTERNET 权限,识别、索引、搜索和备份都在本机完成。隐私产品如果第一步就要联网,它的可信度会天然打折。

红线二:不默认处置原文件。 KernelVault 不默认删除、移动或改写用户原始资料。保险箱首版只是风险标记和审计工作台,不伪装成系统级隔离沙盒。

红线三:不承诺全库秒级深度 AI。 端侧大模型有真实成本。全库图片和文档如果一上来都跑视觉模型,很容易拖慢手机、推高内存,甚至被系统后台策略中断。所以 KernelVault 采用"先快后准":先快速整理进库,再对关键资料做本机 AI 精修。

基于这三条红线,技术路线逐渐清晰:

text 复制代码
界面层       Kotlin + Jetpack Compose
资产读取     MediaStore / SAF
本地索引     SQLite + FTS + 本地向量索引
端侧模型     MNN 视觉模型 + MNN embedding
后台维护     WorkManager
结果表达     tags / summary / privacy
安全边界     无 INTERNET 权限 + 不默认改写原文件

2. 先看效果

白天版整体展示:

黑夜版整体展示:

功能总览版:

对用户

  • 找资料更自然:不用记文件名和目录,用关键词、标签、摘要就能找。
  • 隐私更可控:资料不上传,风险结果只在本机提醒。
  • 结果更可解释:每个资产都有标签、摘要、风险等级和识别来源。
  • 使用更安心:App 不默认删除、移动或改写原始文件。

App 首页先把产品边界讲清楚:只在本机工作,不上传。


应用场景:它到底解决什么问题

场景一:找回"去年买显卡的电子发票"

传统相册按时间排序,文件管理器按目录和文件名查找。但真实用户不一定记得文件名,也不一定记得那张发票保存在哪一天。

KernelVault 会先把授权范围内的资料纳入本地索引,再通过标签、摘要、FTS 和本地向量召回,让用户可以用更自然的关键词找资料。

典型查询可能是:

text 复制代码
去年买显卡的电子发票
合同截图
身份证复印件
微信里的付款凭证
上次会议的 PDF
场景二:判断一张截图是否值得放进保险箱

很多截图文件名没有意义,但里面可能包含身份证号、订单号、手机号、地址、账号、金额或合同条款。

KernelVault 不替用户删除文件,而是把高风险和需留意资料集中到保险箱,让用户自己决定下一步怎么处理。

场景三:确认 AI 到底识别了什么

很多 AI 产品容易给出一个"看起来很聪明"的结果,但用户不知道它从哪里来。

所以详情页固定展示:

text 复制代码
文件类型 / AI 标签 / 人工标签 / 摘要 / 风险等级 / 识别来源

用户能知道结论来自快速整理、本地模型识别、导入索引还是人工修正。用户也可以用人工标签、人工摘要和备注覆盖 AI 建议。

场景四:证明"只在本机"

隐私产品最怕只喊口号。KernelVault 在防线页集中展示媒体授权、后台维护、系统通知和本机处理证明,让用户知道 App 读了什么、正在做什么、哪些能力依赖本地模型。


3. 技术架构:先快后准的本机智能链路

我把 KernelVault 的架构拆成四层:
#mermaid-svg-GX2aLnWctJdq1EYL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GX2aLnWctJdq1EYL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GX2aLnWctJdq1EYL .error-icon{fill:#552222;}#mermaid-svg-GX2aLnWctJdq1EYL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GX2aLnWctJdq1EYL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GX2aLnWctJdq1EYL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GX2aLnWctJdq1EYL .marker.cross{stroke:#333333;}#mermaid-svg-GX2aLnWctJdq1EYL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GX2aLnWctJdq1EYL p{margin:0;}#mermaid-svg-GX2aLnWctJdq1EYL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GX2aLnWctJdq1EYL .cluster-label text{fill:#333;}#mermaid-svg-GX2aLnWctJdq1EYL .cluster-label span{color:#333;}#mermaid-svg-GX2aLnWctJdq1EYL .cluster-label span p{background-color:transparent;}#mermaid-svg-GX2aLnWctJdq1EYL .label text,#mermaid-svg-GX2aLnWctJdq1EYL span{fill:#333;color:#333;}#mermaid-svg-GX2aLnWctJdq1EYL .node rect,#mermaid-svg-GX2aLnWctJdq1EYL .node circle,#mermaid-svg-GX2aLnWctJdq1EYL .node ellipse,#mermaid-svg-GX2aLnWctJdq1EYL .node polygon,#mermaid-svg-GX2aLnWctJdq1EYL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GX2aLnWctJdq1EYL .rough-node .label text,#mermaid-svg-GX2aLnWctJdq1EYL .node .label text,#mermaid-svg-GX2aLnWctJdq1EYL .image-shape .label,#mermaid-svg-GX2aLnWctJdq1EYL .icon-shape .label{text-anchor:middle;}#mermaid-svg-GX2aLnWctJdq1EYL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GX2aLnWctJdq1EYL .rough-node .label,#mermaid-svg-GX2aLnWctJdq1EYL .node .label,#mermaid-svg-GX2aLnWctJdq1EYL .image-shape .label,#mermaid-svg-GX2aLnWctJdq1EYL .icon-shape .label{text-align:center;}#mermaid-svg-GX2aLnWctJdq1EYL .node.clickable{cursor:pointer;}#mermaid-svg-GX2aLnWctJdq1EYL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GX2aLnWctJdq1EYL .arrowheadPath{fill:#333333;}#mermaid-svg-GX2aLnWctJdq1EYL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GX2aLnWctJdq1EYL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GX2aLnWctJdq1EYL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GX2aLnWctJdq1EYL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GX2aLnWctJdq1EYL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GX2aLnWctJdq1EYL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GX2aLnWctJdq1EYL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GX2aLnWctJdq1EYL .cluster text{fill:#333;}#mermaid-svg-GX2aLnWctJdq1EYL .cluster span{color:#333;}#mermaid-svg-GX2aLnWctJdq1EYL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GX2aLnWctJdq1EYL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GX2aLnWctJdq1EYL rect.text{fill:none;stroke-width:0;}#mermaid-svg-GX2aLnWctJdq1EYL .icon-shape,#mermaid-svg-GX2aLnWctJdq1EYL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GX2aLnWctJdq1EYL .icon-shape p,#mermaid-svg-GX2aLnWctJdq1EYL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GX2aLnWctJdq1EYL .icon-shape .label rect,#mermaid-svg-GX2aLnWctJdq1EYL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GX2aLnWctJdq1EYL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GX2aLnWctJdq1EYL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GX2aLnWctJdq1EYL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} MediaStore / SAF 授权资产
快速整理:类型、首轮标签、摘要、风险
SQLite:资产元数据与人工修正
FTS / 倒排 / 本地向量索引
资产库:浏览、筛选、搜索
保险箱:高风险与待处理
详情页:tags / summary / privacy
MNN 本机 AI 精修
WorkManager 后台维护
.kvault 加密备份

3.1 第一层:授权资产读取

KernelVault 通过 MediaStore 和 SAF 读取用户授权范围内的图片、视频、音频和文档。它不会假设自己天然拥有全部文件权限,也不会绕开系统授权。

3.2 第二层:快速整理

首轮整理优先速度和稳定性。它会先生成基础类型、首轮中文标签、摘要和风险等级,让用户尽快看到资产库结果。

这一步不追求"每个文件都跑完真实视觉大模型",因为那会把全库整理变成高风险重任务。

3.3 第三层:本地索引与搜索

本地数据库保存资产元数据、标签、摘要、风险等级、人工修正和识别来源。

搜索层由几条链路共同组成:

  • SQLite 保存结构化资产信息。
  • FTS 支持关键词搜索。
  • 本地向量索引用于语义召回。
  • 人工标签和备注进入搜索文本,保证用户自己的整理结果优先可用。

3.4 第四层:本机 AI 精修

当用户打开某个资产详情页,可以对单个图片或文档触发 本机 AI 精修

这个设计是整个项目最重要的取舍:大模型不是全库扫描的阻塞点,而是单个高价值资产的增强工具。


4. 模型选型:为什么用 MNN

端侧模型能力分成两类:

能力 模型方向 作用
视觉理解 Qwen-VL 系列 MNN 模型 对图片和截图生成中文语义标签、简短摘要和隐私线索
文本向量 bge-large-zh-MNN 等中文 embedding 模型 支持本地语义搜索和相似召回
快速兜底 启发式规则 + 文件元数据 + 文本抽取 模型不可用时仍能整理、搜索和展示可读摘要

选择 MNN 的原因很直接:

  1. 面向移动端推理,适合 Android 端侧部署。
  2. 可以通过 Native / JNI 调用,不需要把识别链路交给云服务。
  3. 同一套端侧思路可以承接视觉模型和 embedding 模型。
  4. 模型不可用时也能清晰降级,不影响快速整理和搜索。

5. 产品创新点

5.1 创新点一:把"隐私资产"作为手机资料的新组织方式

传统文件管理器关心目录,云相册关心照片,KernelVault 关心的是"这份资料是否有价值、是否敏感、是否需要被找回"。这个角度更贴近日常手机资料管理。

5.2 创新点二:本机 AI 不是噱头,而是产品边界

KernelVault 不把"本地 AI"写成宣传词,而是把它落实到权限、模型路径、识别来源、状态文案和失败降级上。模型可用时,用户可以在详情页看到本机 AI 精修结果;模型不可用时,App 也不会伪装成已经深度识别。

5.3 创新点三:标签、摘要和风险分开表达

很多整理工具会把所有信息塞进标签里,结果用户只看到一排含混的词。KernelVault 固定输出 {tags, summary, privacy},让信息层次更清楚:

  • tags 解决"如何筛选和搜索"。
  • summary 解决"这个文件大概是什么"。
  • privacy 解决"是否需要留意"。

5.4 创新点四:保险箱不是删除器

隐私管理不等于替用户做危险操作。KernelVault 首版只维护本地索引、风险标记、人工修正和审计状态,不默认删除、移动或改写原文件。这个设计牺牲了一点"强控制感",但换来更低的误伤风险。

5.5 创新点五:演示链路和真实能力保持一致

比赛或文章展示中,KernelVault 不承诺"全库秒级视觉识别"。更可信的展示链路是:

text 复制代码
检查识别 -> 整理手机资料 -> 资产库 -> 详情页本机 AI 精修 -> 保险箱 -> 防线

这条链路既能展示端侧 AI,也符合普通手机的性能边界。


6. 技术难点与解决方案

这个项目最难的地方,不是把 UI 做出来,而是把"端侧 AI 能跑、能解释、还能不拖垮手机"同时做到。

难点一:全库视觉识别太慢,容易拖死前台。

  • 解决:改成"先快速整理进库,再对单个高价值资产做本机 AI 精修",把大模型开销限制在局部。

难点二:真机端侧模型容易受内存和系统后台策略影响。

  • 解决:重型 MNN 视觉推理放进独立 :mnn 进程,超时可结束子进程,主进程继续保持 UI 和索引可用。

难点三:AI 结果如果只剩工程词,用户看不懂也不信。

  • 解决:统一输出 tags / summary / privacy,并保留人工标签、人工摘要和风险等级的覆盖权。

难点四:隐私产品一旦默认上传或默认处置,就会失去可信度。

  • 解决:不声明 INTERNET 权限,不默认删除、移动或改写原文件,把保险箱定义成审计台而不是清理器。

重头戏:端侧适配踩过的坑

坑一:全库视觉识别会把前台整理拖慢

一开始很容易有个冲动:既然要做 AI 整理,那每张图片、每个文档都跑一遍视觉模型。

真机上这条路很快会暴露问题:耗时长、内存压力大、系统可能清理进程,用户看到的是进度卡住,而不是"AI 很聪明"。

最终方案是:

text 复制代码
整理手机资料:快速整理优先
详情页:单资产本机 AI 精修
后台维护:系统允许时分批补全
坑二:native 推理不能卡死主进程

端侧视觉模型一旦进入 native 层长时间不返回,Kotlin 侧取消 Future 只能放弃等待,不能真正中断 native 推理。

所以 KernelVault 把重型 MNN 视觉调用隔离到独立 :mnn 进程。主进程通过远程服务发起推理请求,并记录子进程 pid。超时后可以解绑、停止服务并结束子进程。

这样即便模型仍卡住,也不会让主进程 UI 和数据库被几 GB native heap 拖死。

坑三:AI 输出容易泄露工程词

早期整理结果里很容易出现 quick_indexnative_fallbackimagedocument 这类工程词。它们对开发者有意义,但对用户没有意义。

现在展示层会把字段拆清楚:

text 复制代码
文件类型:图片 / 文档 / 音频 / 视频
AI 标签:发票 / 合同 / 证件 / 聊天截图
识别来源:快速整理结果 / 本地模型识别结果 / 人工修正结果

也就是说,工程词可以留在内部索引里,但不能直接出现在用户界面上。

坑四:隐私工具不能替用户做危险决定

很多清理类 App 喜欢"自动删除""自动归档""自动挪走"。但 KernelVault 的首版边界是反过来的:只做本地索引、风险标记、人工修正和审计状态。

保险箱不是删除器。它提醒用户"这份资料可能敏感",但不会默认改写原文件。


总结与思考

做完这个阶段后,我最大的体会是:端侧 AI 不是把模型塞进手机就结束了。真正困难的是产品边界和工程边界。

你要知道哪些事情应该交给模型,哪些事情必须用确定性规则;哪些任务可以后台慢慢补,哪些结果必须立刻给用户;哪些字段是内部调试信息,哪些内容可以直接展示给普通用户。

KernelVault 的答案是:**让 AI 帮用户看懂资料,但不要替用户失去控制权。**它不上传、不默认删除、不默认移动,只在本机建立索引、解释内容、提示风险。

结语:当 AI 从云端走向端侧,它真正有价值的地方不只是省掉网络请求,而是把数据控制权还给用户。KernelVault 希望证明:一个隐私工具也可以聪明,但它首先要可信。


参考资源