利用 ollama 搭建知识卡片制作系统
本文基于 ollama 推理框架,搭建了一个知识问答工具,可以利用大模型学习 obsidian 上的知识,并结合其中的闪卡插件,完成传统复习软件 Anki 的两个关键过程,即 "制卡与复习",使用者只需要复习知识,不必进行复杂的制作卡片工作,基于大模型产出的问题,问题角度更发散,避免个人 “死背书”,还是倾向理解问题,但是同样也存在以下问题和文档内容不符合的问题,本文将一并说明
我的很多知识都记忆在 obsidian 上,长期积累下来后,文本变得越来越多,那天复习时,又得全部查看,比较不方便。我本意是利用类似 anki 的软件搭建一个知识回顾系统,但是存在两个问题:(1)制作卡片非常耗时;(2)知识和复习分别位于 obsidian 和 anki 两个软件,更新维护麻烦。所以想利用 ollama 调用大模型,帮自动生成卡片,解决问题 1,利用 obsidian 的间隔复习插件解决问题 2
认识 obsidian 的 2 个插件
这个系统主要是基于 obsidian 2 个插件的再开发,他们是 Quiz Generator
和 Spaced Repetition
,第一个插件是基于文档生成 Q/A 问答的插件,第二个工具是 间隔复习插件
Quiz Generator
在 Quiz Generator
中,安装后,配置大模型路径,这里是个人电脑,所以选择 ollama 框架进行大模型推理,
然后选择需要生成问答的文档或者文件夹,即可生成以下效果的问答
这个工具还可以生成不同类型的问答,包括:单选、多选、填空、问答题等,其中填空和问答等类似的答案不唯一的问题,支持使用大模型评估问答效果
这个插件还有一个功能是保存生成的问题,包括 callout
和 Spaced Repetition
两种方式,这里选择第二种方式,配合下面插件 Spaced Repetition
去复习之前生成过的插件
Spaced Repetition
插件 Quiz Generator
已经生成可以被 Spaced Repetition
解析的卡片文件,直接打开 Spaced Repetition
会看到以下界面
修改 Quiz Generator
以上 2 个插件已经具备这个复习系统的功能,但是在实际使用中,发现 Quiz Generator
存在以下问题:
- 显示答案时,没有显示是基于那些资料产生的提问,导致使用者无法确定自己的选择是否正确(有时候大模型给的答案也不准确)
- 生成卡片过程,没有任何提示,不知道生成进度,只能一直等
针对以上两个问题,基于 Quiz Generator
,做以下修改:
- 该插件无法给出问题的引用源,是因为基于整篇文章生成提问,所以改进是:获取文档后,先对文档进行分片,对每个分片生成提问,在两个插件复习时,显示答案的同时显示引用源
- 根据文档分片数量,实时输出生成提问的进度,使用更加友好
修改源码时,我们以标题进行分片,也就是针对一个标题内容生成提问,比如下图是文档内容及生成的提问
通过修改源码,让在 Quiz Generator
和 Spaced Repetition
两个插件显示问题引用源,效果类似以下:
安装方式
本系统主要是在插件 Quiz Generator
的基础上修改得到,并没有直接上传到 obsidian 插件平台,所以需要下载源码安装,步骤为:
- 在 GitHub - WuShaogui/obsidian-quiz-generator: 针对自己文档特点进行优化下载源码
- 在 Obsidian 安装插件
Quiz Generator
- 在源码位置,找到以下 4 个文件,拷贝到 obsidian 文件的
.obsidian\plugins\quiz-generator
路径下 - 重新打开 obsidian
四个文件分别是:main.js、data.json、styles.css、manifest.json
如何再次基础上进行开发,请先在目录执行 npm install
安装依赖,然后使用 npm run dev
调试代码,使用 npm run build
编译代码
总结:
- 通过修改
Quiz Generator
实现按标题内容生成问答对,生成的提问更准确 - 通过引入源,解决复习时需要翻找资料的问题
- 实时打印大模型生成问答对进度,更友好