为什么大部分AI知识工具都要求你把文件上传到他们的服务器?我试过了几乎所有主流产品,法律合同、研究笔记、个人日记——这些内容都要离开你的电脑,跑进某个公司的推理后端里转一圈。隐私上的妥协让我一直不太舒服。
这个念头最终推动我做出了Knovex。它是一个完全运行在本机上的桌面知识库,文件不需要上传云端,不需要订阅费,也不会泄露数据。把文档拖进去,直接提问,然后学东西——这就是全部的工作流。如果你对动手跑代码不感兴趣,可以直接跳去看成品:tailorgunjan93.github.io/knovex。
本地优先原则把威胁模型彻底换掉了。你的文件不会离开机器,除非你自己主动打开云端功能。应用完全离线可用——配上Ollama就能实现零网络环境的问答。所有API密钥用Fernet AES-128加密后存放在本地磁盘上,只有当前操作系统账户才能解密读取。这套约束反而逼出了更好的工程方案:当云端后端不再成为选项,你就只能把本地技术栈打磨到真正可用的速度。
在架构上,Knovex是完全解耦的三层设计。最外层是Electron 33桌面壳,里面跑着React 18加MUI v6和TypeScript构建的前端界面,状态管理靠TanStack Query v5和Zustand。前端与本地后端通过REST和SSE协议通信,地址是localhost:8765。中间层是FastAPI配Python 3.11,集成了我此前做的docnest-ai混合RAG引擎,数据存储采用SQLite WAL模式加FTS5全文检索,多模型接入则通过LiteLLM这座桥来统一调度。
前端在这里定位很纯粹——它只是一个API消费者,完全不知道什么是RAG、什么是嵌入向量、什么是大语言模型。所有智能逻辑都封装在Python后端里。这种切分让组件独立替换变得异常顺畅。选择Electron虽然经常被人抱怨体积臃肿,但对于一个隐私优先的桌面应用来说,我认为这是正确的技术决策。单一安装包就把PyInstaller打包的后端二进制、前端资源和Electron外壳全部塞进一个exe、dmg或AppImage文件里,最终体积在85到92 MB之间。不算小,但用户拿到手后是零配置启动——不需要装Python,不需要装Node,也不需要任何命令行操作。
RAG引擎这部分,我没有用简单粗暴的切片策略——那种每512个字符切一刀、然后直接向量化、再祈祷检索命中的做法,在实际文档面前几乎一定会翻车。docnest-ai走的是一条6阶段标准化流水线:先用Docling或PyMuPDF做结构抽取,把标题层级、表格、列表这些骨架信息完整保留下来;紧接着是章节分配,每个标题都会变成一个可导航的section节点;表格归一化环节把表格转成包含标题、表头、行数据的JSON结构,列上下文不会丢失;后续还有元数据注入、语义分段和质量校验这三个环节,确保进入向量库的每一块内容都带着足够的结构信息。
在桌面应用里跑完整RAG流水线,性能挑战主要集中在两个方面。一个是首次索引的速度,大文档进来后结构抽取和向量化需要时间,但这是离线一次性成本。另一个是检索延迟,SQLite FTS5做关键词召回加上向量相似度搜索,在本地硬件上从接收问题到返回答案,整体响应可以控制在合理范围内。如果你有GPU,向量化环节还能进一步加速。整个过程中,没有任何网络请求发出去——所有计算都在本机完成。
回过头看这个项目,本地优先路线带来的不仅是隐私上的安心感,还有一个意料之外的收获:当整个系统的性能瓶颈完全暴露在自己电脑上时,你对RAG流水线每个环节的计算开销会形成非常具体的直觉。这种体感是在云端架构里很难建立的。Knovex目前在GitHub上开源,如果你也有不想上传云端的文档,或许它会是个趁手的工具。
热门跟贴