核心概念
技术形态
前端、存储、AI 调用、备份链路整体是怎么搭的
这一页给一个整体的技术地图,方便理解"数据存在哪""AI 是怎么接进来的""离线能做到什么程度"。这里只讲和使用体验直接相关的部分。
整体结构
通几当前是 Svelte 5 + Vite 前端,配一个 Bun 写的 BFF(Backend for Frontend),是一个可安装的 PWA。
浏览器(IndexedDB,工作数据源)
↕ 读写
Svelte 5 + Vite 前端(可离线打开应用壳)
↕ /api(仅在线)
Bun BFF —— AI 调用 / 导入抓取 / OCR / 服务端快照
↕
服务端快照备份链数据存在哪
- 浏览器 IndexedDB 是当前正在使用的工作数据源——你在通几里的每一次操作,先落在这里。
- BFF 会把每个知识库的服务端快照写入备份链。
- 前端只能看到存储位置的名字(id / label / 是否已备份),看不到服务端的绝对路径——存储路径只能在 BFF 白名单里配置,不能从浏览器提交任意路径。
也就是说:日常使用中数据的"第一现场"是你的浏览器,服务端快照是备份,不是主库。备份和恢复见备份与多端同步。
FSRS:调度引擎
复习调度用的是 FSRS(Free Spaced Repetition Scheduler,ts-fsrs 实现),从 SuperMemo 系的 SM-2 算法一路演进而来。它算的是"这张卡你大概还能记得多久",据此安排下次复习时间。
AI 不碰调度
FSRS 评分只来自你自己点的四档;AI 导师、AI 拆书、AI 变式都不会直接改写这条曲线。这是产品红线,不是当前的技术限制。
画布:CRDT 本地优先
画板这一层单独用 Loro(CRDT,冲突自由复制数据类型)管理文档状态,和研几主体的存储分开:画布数据只进独立的画布存储,不混进内容库。这样画布的多端合并(比如两台设备分别改了同一块白板)可以做到"取并集、不覆盖"。
AI 是怎么接进来的
材料拆书、AI 制卡、AI 导师这些功能,模型调用统一走 Vyane——Eosphor 的执行内核。界面上能看到模型选择下拉框,标"省"的是成本更低的档位,适合日常解释和制卡;概念很硬、需要长推理时换强档。
离线边界(PWA)
生产包注册了 service worker,预缓存静态前端资源。缓存边界:
| 能离线 | 不能离线 |
|---|---|
| 已加载过的应用界面壳 | AI 功能(导师 / 制卡 / 拆书) |
| 浏览器本机 IndexedDB 里已有的数据 | 材料导入(URL 抓取 / OCR) |
| — | 服务端备份与恢复 |
/api 和非 GET 请求不经过 service worker 处理——这些能力天然要求在线。