利用 ollama 搭建知识卡片制作系统

本文基于 ollama 推理框架,搭建了一个知识问答工具,可以利用大模型学习 obsidian 上的知识,并结合其中的闪卡插件,完成传统复习软件 Anki 的两个关键过程,即 "制卡与复习",使用者只需要复习知识,不必进行复杂的制作卡片工作,基于大模型产出的问题,问题角度更发散,避免个人 “死背书”,还是倾向理解问题,但是同样也存在以下问题和文档内容不符合的问题,本文将一并说明

我的很多知识都记忆在 obsidian 上,长期积累下来后,文本变得越来越多,那天复习时,又得全部查看,比较不方便。我本意是利用类似 anki 的软件搭建一个知识回顾系统,但是存在两个问题:(1)制作卡片非常耗时;(2)知识和复习分别位于 obsidian 和 anki 两个软件,更新维护麻烦。所以想利用 ollama 调用大模型,帮自动生成卡片,解决问题 1,利用 obsidian 的间隔复习插件解决问题 2

认识 obsidian 的 2 个插件

这个系统主要是基于 obsidian 2 个插件的再开发,他们是 Quiz GeneratorSpaced Repetition,第一个插件是基于文档生成 Q/A 问答的插件,第二个工具是 间隔复习插件

Quiz Generator

Quiz Generator 中,安装后,配置大模型路径,这里是个人电脑,所以选择 ollama 框架进行大模型推理,

利用ollama搭建知识卡片制作系统-20250301104809

然后选择需要生成问答的文档或者文件夹,即可生成以下效果的问答

利用ollama搭建知识卡片制作系统-20250301110420

这个工具还可以生成不同类型的问答,包括:单选、多选、填空、问答题等,其中填空和问答等类似的答案不唯一的问题,支持使用大模型评估问答效果

利用ollama搭建知识卡片制作系统-20250301104833

这个插件还有一个功能是保存生成的问题,包括 calloutSpaced Repetition 两种方式,这里选择第二种方式,配合下面插件 Spaced Repetition 去复习之前生成过的插件

利用ollama搭建知识卡片制作系统-20250301104933

Spaced Repetition

插件 Quiz Generator 已经生成可以被 Spaced Repetition 解析的卡片文件,直接打开 Spaced Repetition 会看到以下界面

利用ollama搭建知识卡片制作系统-20250301110544

修改 Quiz Generator

以上 2 个插件已经具备这个复习系统的功能,但是在实际使用中,发现 Quiz Generator 存在以下问题:

  1. 显示答案时,没有显示是基于那些资料产生的提问,导致使用者无法确定自己的选择是否正确(有时候大模型给的答案也不准确)
  2. 生成卡片过程,没有任何提示,不知道生成进度,只能一直等

针对以上两个问题,基于 Quiz Generator ,做以下修改:

  1. 该插件无法给出问题的引用源,是因为基于整篇文章生成提问,所以改进是:获取文档后,先对文档进行分片,对每个分片生成提问,在两个插件复习时,显示答案的同时显示引用源
  2. 根据文档分片数量,实时输出生成提问的进度,使用更加友好

修改源码时,我们以标题进行分片,也就是针对一个标题内容生成提问,比如下图是文档内容及生成的提问

利用ollama搭建知识卡片制作系统-20250301150347

通过修改源码,让在 Quiz GeneratorSpaced Repetition 两个插件显示问题引用源,效果类似以下:

利用ollama搭建知识卡片制作系统-20250301150436

安装方式

本系统主要是在插件 Quiz Generator 的基础上修改得到,并没有直接上传到 obsidian 插件平台,所以需要下载源码安装,步骤为:

  1. GitHub - WuShaogui/obsidian-quiz-generator: 针对自己文档特点进行优化下载源码
  2. 在 Obsidian 安装插件 Quiz Generator
  3. 在源码位置,找到以下 4 个文件,拷贝到 obsidian 文件的 .obsidian\plugins\quiz-generator 路径下
  4. 重新打开 obsidian

四个文件分别是:main.js、data.json、styles.css、manifest.json

如何再次基础上进行开发,请先在目录执行 npm install 安装依赖,然后使用 npm run dev 调试代码,使用 npm run build 编译代码

总结:

  1. 通过修改 Quiz Generator 实现按标题内容生成问答对,生成的提问更准确
  2. 通过引入源,解决复习时需要翻找资料的问题
  3. 实时打印大模型生成问答对进度,更友好