打开一个复习应用,最烦的往往不是背,而是先做一堆决定:哪张卡先看、哪一章更急、同一个知识点因为挂在两个标题下被重复复习。RecallSloth 想砍掉的就是这一层——打开之后只剩一个动作:开始。

打开网易新闻 查看精彩图片

这是一个围绕医学复习搭起来的小系统:把定义型笔记转成带来源链接的回忆卡,用一个开放模型找出解释上可能重叠的条目,再挑出一份很短的每日队列。旁边还配了一只看起来很满足的树懒。

流程短到不用教程

目标用户是医学生,或者用自己信任的笔记复习生理学这类内容的学习者。要省掉的力气,是围绕学习反复发生的整理工作:把定义排成卡片、找出重复项、平衡到期主题、把没做完的进度带到下一次。

  • 导入 TXT/Markdown 笔记,每行一条「术语:定义」。
  • 检查并批准抽取出来的来源卡片。
  • 让本地 AI 重叠侦察找出值得对比的解释,分组由你自己确认。
  • 选两分钟、五分钟或十分钟的时段,开始回忆。
  • 揭晓精确的来源答案,自评,到期日随之移动。

每一张来源卡在分组后都保留下来。每个答案都指回原始笔记、行号、字符区间和文本校验和。系统不会凭空造出一条新的医学解释。

示例里包含十二条新写的肺生理学定义,依据的是 NIH/NHLBI 的事实性参考资料。它们是教学示例,不是患者记录,也不构成被背书的课程。你学什么,权威仍然是你自己的课程笔记。

演示里的那笔账

在示例中,四组经学习者确认的配对,把十二张来源卡变成完整过一遍所需的八个回忆步骤。十二张原始卡片全部仍可查看。

按应用给出的示意性估算——每步 45 秒——完整过一遍大约少三分钟。这是在一副演示卡组上做的算术,不是实测省下的时间,也不是学习效果声明。每日时段可能只覆盖这副卡组的一部分。

可重复的收益在流程本身:笔记只进一次,批准过的分组保持在一起,评分更新到期日,下一次队列尊重你选的预算。休息一天不会抹掉进度,回来时系统会重新做那遍排序。

答案必须挂在笔记上

卡片解析器只做一件窄事:从学习者的笔记里抽取被明确定义的术语,并保留每条定义的精确来源区间。没有定义行的散乱段落会被拒绝,而不是被转成猜测性的问题。

应用在批准或学习之前会核对引用与来源是否一致。导入备份里被改过的答案无法通过校验。恢复备份不会重放会话或历史命令。

笔记、卡片、分组、到期日和复习历史存在本地未加密的 IndexedDB 里。备份包含源文本,所以应当放在私密位置。这是个人学习软件,患者记录不该进来。

模糊的部分交给开放模型

重叠侦察跑的是 Xenova/all-MiniLM-L6-v2,固定在修订版 751bff37182d3f1213fa05d7196b954e230abad9。Transformers.js 把量化权重加载进 ONNX Runtime Web,在 WASM CPU 上产出归一化的 384 维嵌入。

它编码来源定义,比较余弦相似度,把超过一个示意性阈值的最高排名对比列出来。它不生成答案、不批准卡片、不自动合并任何东西。

最有用的调试结果是一次失败。两条气体交换的定义在模型看来可能非常相似,描述的却是不同的事实。高余弦分数只够用来证明「值得对比」,并不等于「等价」。

于是加了一个小的对比检查,标出不同的气体术语、否定表述和数字细节,并把被标记的对比排到未标记的后面。它的词表是刻意收窄的,无法验证医学含义,每一组仍然需要学习者明确确认。

把失误也公开

应用附带一份可下载的诊断:在十二条示例定义上做八次方向性别名查找,与 Jaccard 词重叠做对比。原始报告包含每一条预测、它的来源校验和、固定住的模型以及实际推理耗时。

这些例子在开发过程中被修改过,对比检查是在观察到相关错误之后加的。这不是独立的留出集,那些数字不构成通用或医学准确率。即便是带对比感知的版本,也漏掉了两个预期别名。备选方案、来源检查和可回退的学习者决定,仍然是产品的一部分。

一个很小的工具交给 Render

Render 托管学习代理前端、队列规划 API 和压缩后的推理运行时资源。模型和笔记文本留在学习者设备上。

队列工具只收到不透明的卡片/主题/分组 ID、到期时间戳、遗忘次数、估算步骤时长和时间预算。浏览器只提供已批准、未暂停且来源引用有效的卡片。工具随后:

  • 把未来的卡片挡在外面;
  • 每个学习者确认过的分组只选一个代表;
  • 在预算内平衡到期主题;
  • 返回可见的工具轨迹和选中的 ID。

它的 schema 拒绝额外字段和无界输入。没有笔记上传端点,也没有服务器数据库。浏览器会用本地同一套确定性规划器核对结果。如果服务正在唤醒或不可用,队列仍可在设备上构建。服务器选项可以自己关掉。

模型加载器、分词器文件和运行时都是固定版本。通用运行时资源自托管,带正确的压缩和 MIME 头,Service Worker 缓存应用外壳。真实浏览器检查会断网、重载已存储的卡组、再跑一次实际模型推理,并在设备上启动队列。

那些安静细节也要测

一次全新的 Linux CI 运行通过了构建和完整的软件检查。仓库包含 26 个单元/API 测试和 21 个浏览器检查,覆盖来源保真、分组、调度边界、撤销、持久化、键盘控制、备份篡改、移动端布局和离线使用。

测试笔记里一个唯一的合成私密标记,从不出现在外发请求的 URL 或请求体中。浏览器测试用真实嵌入和合成操作,模型响应不做 mock。它跑在独立的浏览器配置里,绝不碰已登录用户的现有浏览器。

间隔阶梯是刻意透明的:Again 是一分钟;Hard、Good、Easy 以不同速率拉长间隔,上限 365 天。分组卡片会带着已确认的同组卡片一起移动。这是一个简单的原型调度,不是经过验证的记忆保持模型,也不是掌握程度的声明。

开放创新为什么重要

开放模型能在笔记本 CPU 上完成模糊比较,而笔记文本留在浏览器里。没有推理 API 密钥,没有按定义计费的 API 调用,也不依赖 GPU。学习者可以检查一次失败、把备选方案单独留着,并靠缓存资源离线继续。

周围的规则同样是开放的。任何人都能改队列预算、查看对比词表、替换调度阶梯,或者评估另一个嵌入模型,而不必依赖某个托管模型看不见的行为。

限制也摆在那里。首次使用要下载通用资源;服务商能看到普通连接元数据;浏览器可能清掉缓存;Render 的免费服务会休眠并共享工作区额度。本地存储未加密,备份包含笔记。当前部署是免费的教育原型,没有临床用途、学生试用、记忆保持验证或实测教育效果。

应用代码是 MIT。模型/运行时许可证和复用的基础设施代码单独署名。作者是 @faraz_s_0a6e70a4bbdc6622,在 AI 编程辅助下完成;封面用 OpenAI 内置图像工具生成,提示词和资源路径都附上了。截图展示的是真实应用。

通用的固定版本浏览器模型加载器、WASM 压缩和 Service Worker 模式,改编自作者早前的 ReferralGlass 项目,并在 THIRD_PARTY.md 中署名。RecallSloth 的学习流程、来源卡解析器、重叠/对比控制、分组、调度器、IndexedDB 存储、界面和测试,是为第三周写的。

新写示例的事实背景来自 National Heart, Lung, and Blood Institute、National Institutes of Health、U.S. Department of Health and Human Services。不暗示任何机构背书,也不复制机构图片、标识或格式化出版物。