ReadAny 的技术架构:Tauri + Rust + React 现代全栈
技术栈一览
ReadAny 的技术选型相当现代,每一层都有明确的职责:
| 层级 | 技术 | 作用 |
|---|---|---|
| 桌面壳 | Tauri 2 | 基于 Rust 的跨平台桌面应用框架,体积小、启动快、安全 |
| 后端 | Rust | 高性能核心逻辑,包括文件解析、向量嵌入、本地数据库 |
| 前端 UI | React + TypeScript | 类型安全的组件化界面 |
| 数据库 | SQLite | 本地关系型数据库,存储书籍元数据、高亮、阅读进度 |
| AI 集成 | OpenAI 兼容协议 | 统一对接多家 AI 提供商,包括本地 Ollama |
为什么选 Tauri 而不是 Electron
传统桌面应用框架 Electron 内嵌完整的 Chromium 引擎,一个简单的应用也动辄 100MB+、占用大量内存。Tauri 利用系统自带的 WebView,桌面应用体积可以压缩到 10-20MB。ReadAny 的 Android APK 约 80MB,桌面版更小。
RAG 管道的工作流
这是 ReadAny AI 能力的核心管道:
- 文档分块——导入书籍后,Rust 后端自动把文档按语义段落切分成小块
- 向量嵌入——调用你配置的嵌入模型(可以是本地 Ollama 的 embedding 模型,也可以是云端 API)为每个分块生成向量
- 混合检索——你提问时,用向量相似度(语义匹配)+ BM25(关键词匹配)的混合方案召回相关分块
- 上下文组装——把召回的分块 + 你的问题 + 当前阅读位置组装成 prompt
- 生成回答——调用对话模型生成回答,并附带来源引用
本地优先架构的含义
ReadAny 强调的"本地优先"不是一句口号:
- SQLite 数据库完全在本地,不依赖云端
- 向量索引存在本地文件,语义搜索无需联网
- 只有 AI 对话和嵌入计算需要调用外部 API(除非你配置了本地 Ollama)
- 同步是可选功能,默认关闭
这意味着即便断网,ReadAny 的书库管理、标注、阅读、语义搜索(本地向量已构建的前提下)全都照常工作。