learn:一个自托管的AI学习系统,把知识碎片变成结构化记忆

> 一个用TypeScript构建的自托管AI学习系统,帮你把碎片信息转化为可检索、可复习的结构化知识库。 ## 痛点:信息过载时代,我们为什么需要一套“学习系统”? 我们每天接触的信息量远超大脑能处理的极限:RSS订阅、Twitter线程、论文摘要、YouTube字幕、播客笔记、AI对话输出……传统笔记软件(如Notion、Obsidian)提供了存储空间,但缺乏**主动的、基于间隔重复(Spaced Repetition)的复习机制**;而Anki这类记忆卡片工具又太机械,无法自动从日常信息流中生成卡片。 更糟糕的是,大模型(LLM)的回答往往是“一次性”的——你问完就忘了,下次遇到类似问题还得重新问。**learn** 试图解决这个问题:它不是一个聊天机器人,而是一个**个人AI知识管道**——你喂给它原始材料(文本、链接、甚至AI对话),它自动提取关键概念、生成问答对,并按照遗忘曲线安排复习。 ## 项目概览 **learn** 是开发者 Amos Blomqvist 的个人AI学习系统,用TypeScript编写,目前GitHub上已有676颗星。它不是一个开箱即用的SaaS,而是一个**自托管(self-hosted)的、可扩展的学习基础设施**。核心思路是: > 把“学习”拆解为四个阶段:**采集(Ingest)→ 理解(Comprehend)→ 记忆(Memorize)→ 复习(Review)**,并用AI(目前支持OpenAI兼容API)自动完成中间两个阶段。 ## 快速上手:安装与配置 ### 环境要求 - Node.js 18+(推荐20+) - 一个OpenAI API密钥(或任何兼容OpenAI的API端点,如本地Ollama) - PostgreSQL数据库(用于存储卡片和学习记录) ### 安装步骤 bash # 克隆仓库 git clone https://github.com/amosblomqvist/learn.git cd learn # 安装依赖 npm install # 配置环境变量 cp .env.example .env # 编辑 .env,填入你的DATABASE_URL和OPENAI_API_KEY # 初始化数据库 npx prisma migrate dev # 启动服务 npm run dev 默认运行在 `http://localhost:3000`。 ### 基本使用流程 **第一步:添加学习材料**。你可以通过API或Web界面提交任意文本内容,例如一段关于“量子纠缠”的维基百科摘要: bash curl -X POST http://localhost:3000/api/ingest \ -H "Content-Type: application/json" \ -d '{ "content": "量子纠缠是量子力学中的一种现象,两个粒子在相互作用后,无论距离多远,对其中一个粒子的测量会瞬间影响另一个粒子的状态。", "source": "wikipedia-quantum-entanglement", "tags": ["physics", "quantum"] }' **第二步:AI自动生成学习卡片**。系统调用LLM,将这段文本拆解为: - **概念卡**:什么是量子纠缠?→ 答案:两个粒子在相互作用后,测量一个会瞬间影响另一个的状态。 - **对比卡**:量子纠缠 vs 经典相关性 → 区别在于非局域性。 - **应用卡**:量子纠缠在哪些领域有应用?→ 量子密钥分发、量子计算。 这些卡片被存入PostgreSQL,并带有遗忘曲线参数(初始间隔1天、3天、7天……)。 **第三步:每日复习**。运行内置复习命令: bash npm run review 它会按优先级列出今天到期的卡片,你回答后系统根据“记得/模糊/忘记”更新间隔。 ## 核心亮点深度解析 ### 1. 真正的“AI原生”学习管道,而非简单添加AI按钮 很多笔记工具声称“AI增强”,但learn的架构是**从底层为AI设计**的: - **自动分解**:LLM不仅提取要点,还会生成多类型卡片(概念、因果、类比、步骤、批判性思考),覆盖布鲁姆认知层级。 - **上下文关联**:每张卡片保留原始来源(source字段),复习时点击可跳回原文,避免“孤立记忆”。 - **可插拔模型**:通过环境变量 `OPENAI_API_BASE` 可以指向本地Ollama、LM Studio等,完全离线运行,保护隐私。 ### 2. 间隔重复算法(SM-2变体) learn没有重新发明轮子,而是基于SuperMemo的SM-2算法实现,但做了关键改进: - **多因子难度调整**:除了回答正确率,还考虑卡片类型(概念卡比名词解释卡更难记忆)和内容长度。 - **批量复习调度**:支持按标签(tag)分组复习,例如“今天只复习物理相关卡片”。 ### 3. 双向同步:从AI对话中学习 最亮眼的功能:你可以把与ChatGPT的对话导出为JSON,然后导入learn。系统会分析对话中**你提问但没记住的知识点**,自动生成复习卡片。例如你问过“什么是RESTful API?”,ChatGPT回答了,但你没记笔记——learn会从该对话中提取此问答对,加入复习队列。 ### 4. 完整的API与CLI 不只是Web界面,所有功能都有REST API和CLI命令,方便集成到自动化工作流中。例如,你可以写一个脚本,每天抓取Hacker News热门技术文章摘要,自动灌入learn,晚上复习。 ### 5. 数据所有权 所有数据存储在本地PostgreSQL,卡片、复习记录、AI生成结果全部可导出为JSON或Markdown。不依赖任何云服务(除了你自选的LLM API)。 ## 适用场景 - **程序员学习新技术**:把官方文档、Stack Overflow答案、博客片段喂给learn,自动生成考点式卡片。 - **医学生/法学生**:大量记忆型知识,间隔重复是黄金标准。 - **语言学习者**:导入生词表、例句,AI生成语境卡片。 - **研究人员**:阅读论文时,将摘要和关键段落导入,生成概念关系图(未来规划功能)。 - **“AI对话重学习者”**:经常用ChatGPT学习的人,导入对话记录,把临时答案固化为长期记忆。 ## 同类项目对比 | 项目 | 核心定位 | 与learn的区别 | |------|----------|---------------| | **Anki** | 纯间隔重复卡片工具 | 无AI自动生成卡片,需要手动制作;learn自动从文本中提取 | | **Memorize.ai** | 商业AI记忆工具 | 闭源、云端存储,learn自托管且免费 | | **Obsidian + Spaced Repetition插件** | 笔记软件+复习插件 | 需要自行配置插件,且AI提取能力弱;learn是独立系统,管道更流畅 | | **Readwise Reader** | 高亮+摘录工具 | 只收集不复习,且不生成结构化卡片;learn有完整遗忘曲线 | | **SuperMemo** | 商业记忆软件 | 算法更成熟但闭源且UI老旧;learn开源可定制 | **learn最大的差异化优势**:它把“AI提取”和“间隔重复”这两个环节**原生缝合**,而其他工具要么只做提取(Readwise),要么只做重复(Anki)。 ## 局限与改进方向 - **依赖LLM质量**:卡片生成质量取决于你使用的模型。GPT-4效果好,但本地小模型(如7B)可能产生错误概念。 - **UI较朴素**:目前界面是极简的列表式,缺少图表统计(如遗忘曲线可视化)。 - **多模态支持不足**:目前只处理纯文本,图片/PDF/音频需要预处理。 - **协作功能缺失**:单人设计,无法共享卡片组或进行团队学习。 不过项目处于早期活跃开发阶段(最近一周有提交),作者在README中列出了Roadmap,包括:卡片关系图谱、浏览器扩展(一键收藏网页)、移动端PWA。 ## 总结:值得一试吗? 如果你是一个**技术爱好者**,且已经习惯用AI辅助学习,但苦于“问过就忘”,那么learn是一个值得投入时间配置的实验性工具。它不完美,但它代表了一个有趣的趋势:**把LLM从“问答机器”变成“记忆引擎”**。 对于非技术用户,可能需要等待更完善的封装或UI改进。但对于开发者,它提供了一个清晰、可扩展的架构(模块化设计,代码注释良好),你可以轻松地fork并加入自己的功能——比如接入Notion API、生成思维导图、或者用Whisper处理音频笔记。 如果你厌倦了“收藏夹吃灰”和“笔记积灰”,不妨试试learn,让AI帮你把信息真正变成长期记忆。 🔗 项目地址:https://github.com/amosblomqvist/learn
查看工具