[!NOTE] 我目前正在尝试使用 next.js 重构项目,并可能在不久的将来支持 next.js 部署方案。有关更多进展,请关注 dev-next 分支。
一个基于你的知识笔记进行考试的网站应用程序。让你真正记住你学到和写下的东西 🧠。
💡 灵感来源
对于学习者来说,最好的习惯之一应该是定期自我测试 —— Make It Stick: The Science of Successful Learning
当我学习一项新技术时,我有记笔记的习惯,记录下重要的信息。这是一个好习惯,但我也有一个坏习惯,就是不太喜欢阅读我写的笔记(我不确定这是否是大多数人都会有的情况 🤔)。这导致我的笔记变成了仅仅是纪念品,而没有实质性的用途。所以我选择创建一个应用程序,持续不断地提示你回顾笔记内容的问题。
🏁 开始
[!IMPORTANT] 强烈建议在上传笔记之前阅读 最佳文档实践 以优化你的文档。
克隆这个仓库
git clone https://github.com/codeacme17/examor.git
cd examor
运行 docker compose
docker compose up
请确保 Docker 已安装在您的本地机器上,并且本地主机上的端口
51717
、51818
和52020
是可用的。
在浏览器中打开 http://localhost:51818
以访问 Examor。(由于模块的优化方案,首次加载程序或进入某个页面时可能会较慢)
✨ 功能
从文档生成问题
当用户创建笔记时,可以上传关联的文档。应用程序会根据这些文档的内容生成一组问题。这些问题将来会呈现给用户。在创建笔记时,用户可以选择要生成的问题类型,为他们提供更丰富的学习体验。
答案检测
用户收到每日问题后,可以提供答案。GPT 将进行评分、验证并给出正确答案。评分是通过评估答案的正确性和关联文档来确定的(0 ~ 10 分)。这个评分影响后续的艾宾浩斯复习过程。
艾宾浩斯记忆
我已经实现了一个简化版的艾宾浩斯记忆,目前只有 8 行代码。我计划将来进一步优化这个功能(v0.1)。
关于实际功能,一旦 GPT 生成了测试,评分将被记录并影响未来的复习日期。较高的分数会导致下一次复习间隔更长。
角色选择
[!NOTE] 推荐使用 GPT-4 模型以获得更稳定的体验。
角色可以为问题生成和评估提供更多可能性。你可以在配置页面设置角色。有关各种角色的更多信息,建议参考 角色手册。
问题类型选择
在创建笔记时选择问题类型。
在练习问题时,你可以使用不同的方法来回答。下面的图片展示了一个单选问题的例子。
🧩 模块
题库(v0.4.0 新增)
在 题库 中,我们积累了一些高质量的文档问题,包括优秀的开源文档和书籍,如默认的 vue-component
和 vue-apis
。在这个功能模块中,你可以轻松地将这些现有问题导入到你的笔记中。此外,我们热情欢迎你提供更多高质量的文档或书籍来丰富我们的题库!详细的贡献指南请参见 贡献到题库。
笔记管理
笔记管理
是一个监督所有上传文档的模块。在这个模块中,你可以删除或添加新的文件到你的上传笔记中。请注意,删除笔记下的所有文档将清除关联的问题。
随机问题
随机问题
是一个从现有题库中随机选择问题的模块。这个模块的实现使得这一功能得以实现。
笔记
笔记
是在你创建的每个笔记中虚拟生成的模块。在这个模块中,你可以回答问题。问题推送是根据艾宾浩斯记忆曲线实施的。你将收到三种类型的问题数据:
- 今日复习的问题:顾名思义,这些数据涉及的是过去回答的问题需要在当天复习的问题。
- 到期问题:这些是在同一天内没有在所需复习时间范围内完成的问题,导致这些数据被收集起来。
- 新问题:当用户定义的每日问题数量未从以上两组数据集中获得时,这个补充数据集将推送给用户。
考试
考试
是一个中央模块,用户在其中回答问题,使得 GPT 能够评分和验证答案。该模块由三个组件组成:
- 答案:用户输入他们的答案,测试内容可以在提交后显示。
- 上次记录:记录用户此前对问题的回答及检测结果。
- 文档内容:此组件显示实际上传的文档内容,作为问题的基础和最终答案。
♻️ 更新项目
在启动项目时,应用程序会检查更新。如果需要更新,用户将收到通知。你可以按照以下步骤进行更新:
-
通过个人设置页面上的 导出配置和笔记 按钮导出你的笔记、问题或配置项作为备份。这个操作将导出一个名为
examor-data.xlsx
的文件。你可以查看文件内容,但不建议修改文件内容。 -
拉取最新的远程代码更新以刷新本地项目。
-
删除现有的 Docker 容器,并通过
docker compose up --build
命令重建项目以纳入最新的更改。 -
构建成功后,导航到个人设置页面,点击 导入文件 按钮,将备份的数据重新导入到项目中。
当前的更新过程基于我的个人使用习惯。它可能不是更新的最佳方法。如果你有更好的更新方法,请随时在 issues 部分提供帮助 ❤️。
贡献
由于项目处于非常早期的阶段,项目中仍然存在许多问题和 bugs。 如果你发现了 bug 或有新功能的想法,请提交 issue 或 pull request。更多请参见 CONTRIBUTING。
许可证
AGPL-3.0 license © 2023-至今 leyoonafr