AnkiAIUtils
AnkiAIUtils 是一套专为 Anki 用户打造的 AI 增强工具集,旨在通过自动化手段提升记忆卡片的学习效率。它主要解决用户在复习中反复记不住难点的问题:当你标记某张卡片为“困难”或“失败”时,它能自动调用大语言模型生成通俗易懂的解释、定制化的记忆口诀(助记符),甚至利用 DALL-E 或 Stable Diffusion 创作生动的辅助插图,将抽象知识转化为直观的视觉记忆。
这套工具特别适合医学生、备考人员以及所有希望深度优化 Anki 学习流程的普通用户。其独特之处在于高度个性化的记忆系统:它不仅支持用户自定义和维护专属的口诀库,确保记忆逻辑的一致性,还能基于语义相似度技术,从你的历史数据中动态匹配最相关的示例进行自适应学习。此外,AnkiAIUtils 具备极强的兼容性,直接修改本地笔记数据,无缝支持 Windows、Mac 及移动端等各类 Anki 客户端,并允许用户自由选择不同的 AI 模型提供商。虽然目前主要以脚本形式运行,适合愿意尝试自动化工作流的进阶用户,但其核心目标是让每个人都能拥有类似专业付费平台的智能辅助体验,让背诵变得不再枯燥。
使用场景
医学生小林在备考病理学时,面对大量复杂的机制卡片反复记忆失败,传统复习方式让他陷入瓶颈。
没有 AnkiAIUtils 时
- 解释匮乏:每次记错卡片,只能手动查阅厚重的教材或搜索零散的网络资料,耗时且难以获得针对该知识点的精准解释。
- 记忆钩子缺失:对于抽象的生化通路或解剖结构,缺乏生动的助记符(Mnemonics),只能依靠死记硬背,遗忘速度极快。
- 视觉化困难:大脑难以构建抽象概念的图像,而手动绘制或使用搜索引擎寻找匹配的图片效率极低,且往往不够直观。
- 复习策略僵化:无法根据个人的记忆薄弱点动态调整学习内容,所有卡片“一视同仁”,导致时间在已掌握内容上被浪费。
- 个性化不足:现有的辅助工具无法识别和利用小林自己习惯的记忆逻辑,生成的内容往往与他的思维模式不兼容。
使用 AnkiAIUtils 后
- 智能即时解析:每当小林标记卡片为“忘记”,AnkiAIUtils 自动调用大模型生成简明扼要的定制化解释,直接填充到卡片字段,无需跳出软件查书。
- 专属助记生成:工具结合小林预设的个人助记库,自动生成符合他思维习惯的口诀或联想故事,甚至能利用“主要系统”将数字编码为图像。
- 一键视觉增强:针对难懂的病理机制,AnkiAIUtils 自动调用 DALL-E 3 或 Stable Diffusion 生成精准的示意图,将抽象文字转化为直观的“记忆宫殿”素材。
- 自适应学习流:基于语义相似度分析,工具自动从历史数据中匹配最相关的案例补充到错题中,让复习内容随小林的进度动态进化。
- 无缝兼容体验:所有增强内容直接写入本地 Anki 笔记,完美同步至手机和电脑端,小林在任何设备上都能享受到升级后的学习体验。
AnkiAIUtils 将原本枯燥低效的“死记硬背”转变为个性化的“智能内化”过程,让每一次犯错都成为构建深度记忆的契机。
运行环境要求
- Windows
- macOS
- Linux
- Android
- iOS
未说明(支持通过 LiteLLM 调用云端 API,本地运行 Stable Diffusion 时通常建议具备 GPU,但文中未指定具体型号或显存要求)
未说明

快速开始
Anki AI 工具集
一套功能强大的 AI 驱动工具,旨在通过自动优化你难以掌握的卡片来提升你的 Anki 闪卡学习体验,并已在医学院中经过验证。举个例子:每当你答错一张卡片时,系统就会为你生成 ChatGPT 解释、Dall-E 插图、记忆术等,同时也会支持你自定义的记忆法。
快来看看我在 GitHub 个人主页 上的其他 Anki 和 AI 相关项目吧!
简单示例
这些脚本可以让每一张答错的卡片自动添加新的字段,包含解释、记忆术和插图等内容。 这一过程会充分尊重 你自己的记忆法,甚至可以结合 主要记忆系统,并且还具备 众多 其他功能。
AnkiIllustrator 所促进的工作流程的一个示例,请观看 pixorise 的 YouTube 频道,那里充满了优秀的图像记忆术,尤其适合“记忆宫殿”式的学习方法。
开发者注 / 求助呼吁
这套脚本集合是我为实现自己在医学院入学时就渴望拥有的 AI 功能而不断努力的成果。所有脚本目前应该都能正常运行,不过是在借助 aider 大量编写文档后匆忙发布的。因此,文档中某些部分可能存在轻微偏差或不够精确的情况。此外,在发布过程中,部分脚本也可能出现了小问题。无论如何,我怀着满满的热情与用心发布这个项目,就是希望能激励更多人将其打包成 Anki 插件。 我目前没有足够的时间去学习如何将这些脚本封装成插件并设计相应的用户界面,所以任何帮助都将不胜感激。为此,请查看下面的待办事项清单,并随时提出问题!
核心功能
自适应学习:利用 语义相似度 动态匹配你的卡片与训练数据集中最相关的示例。你添加的示例越多,效果就越出色!
个性化记忆钩子:复用你自定义记忆库中的固定记忆法,构建专属的个性化记忆体系。内置专门的工具,帮助你创建和管理记忆库。
自动化就绪:可编程运行——例如,使用 cron 定时任务自动优化你昨天做错的卡片,通过图片、记忆术和解释使其更易于记忆。
通用兼容性:直接在 Anki 笔记中进行原地修改,可在所有 Anki 客户端(Windows、Mac、Linux、Android、iOS)上无缝工作。丰富的日志记录功能确保你可以追踪更改,并在需要时回滚。
提供商无关性:通过 LiteLLM 支持所有 LLM 提供商和模型,让你根据需求选择最适合的选项。
无限可扩展性:你可以向训练数据集中添加任意数量的示例;语义筛选功能会自动为每张卡片挑选最相关的条目。
工具
Illustrator
使用 AI 图像生成技术为你的卡片创建定制化的记忆图像。它能够:
- 分析卡片内容以识别关键概念;
- 生成富有创意的视觉记忆钩子;
- 保留已生成图像的历史记录;
- 同时支持 DALL-E2、DALL-E3 和 Stable Diffusion;
- 自动调整图像格式,使其居中显示并达到最佳尺寸;
- 可为每张卡片处理多张图像,且布局保持一致。
非常适合视觉型学习者,或那些从图像中受益较多的复杂主题。
AnkiIllustrator 所促进的工作流程的一个示例,请观看 pixorise 的 YouTube 频道,那里充满了优秀的图像记忆术,尤其适合“记忆宫殿”式的学习方法。
点击查看示例
例如,我有一张法语闪卡:

如果看不懂法语,请点这里
笔记内容翻译成中文如下:
单纯性热性惊厥的诊断标准:
- 年龄大于1岁
- 发热高于38°C (100.4°F) 时出现惊厥
- 对称性运动表现持续时间少于15分钟且无后遗症
- 每次发热仅发生一次惊厥
- 总发作次数不超过3次
illustrator.py 为我生成了这张图片:

同时还生成了以下文字内容,用于理解其思考过程:(请注意,这部分始终以英文呈现,无论原始语言为何)
主题:'单纯性热性惊厥的诊断标准'
记忆锚点:'热性/发烧:壁炉(发音类似 febrile)'
音标联想:'1 联想为泰语中的 T 音,如 tea、tie;3 联想为 M 音,如 mow、my、meh;8 联想为 F 音,如 fire、faux、few;5 联想为 L 音,如 low、lee、lie'
备注:
* 这些标准非常具体,应以易于记忆的方式呈现。
逐步分解:
* 年龄大于1岁:一个拿着茶杯的幼儿(T 代表 1)
* 发热超过38°C 时的惊厥:一个周围环绕火焰的体温计(F 代表 8)
* 持续时间少于15分钟且无后遗症的对称性运动表现:一只显示15分钟的钟表,两侧有对称移动的两个相同小人
* 每次发热仅发生一次惊厥:一道闪电击中壁炉(壁炉代表发烧)
* 总发作次数不超过3次:三支体温计,但只有两支显示高温
想象画面:
* 一个拿着茶杯的幼儿站在壁炉旁,一道闪电正击中壁炉。
* 壁炉上方是一只显示15分钟的钟表,钟表两侧是对称移动的小人。
* 幼儿旁边是一支周围燃烧着火焰的体温计,以及三支体温计,其中两支显示高温。
主题:'一个拿着茶杯的幼儿站在被闪电击中的壁炉旁,一只显示15分钟的钟表上有对称的小人,一支燃烧的体温计,还有三支体温计,其中两支显示高温'
描述词:'教育性、色彩丰富、引人入胜、生动、细致'
风格:'插画'
写实程度:'半写实'
一个拿着茶杯的幼儿站在被闪电击中的壁炉旁,一只显示15分钟的钟表上有对称的小人,一支燃烧的体温计,还有三支体温计,其中两支显示高温,教育性、色彩丰富、引人入胜、生动、细致,插画,半写实
[日期:2024年4月9日 版本:2.5 LLM 模型:openai/gpt-4-0125-preview 图像模型:openai/dall-e-3]
重写器
一款智能工具,可在保留卡片核心含义和结构的前提下重新措辞你的抽认卡。它在以下情况下非常有用:
- 卡片表述不佳或不够清晰
- 想通过变换表达方式来强化记忆
- 需要让卡片更简洁或更自然流畅
- 你偏好的卡片格式随着时间推移发生了变化
该工具利用大型语言模型(LLM)对内容进行改写,同时仔细保留填空标记和媒体内容。这对于长期使用Anki的用户尤其有价值——例如,在医学院学习期间,经过几个学期后,你对“完美”抽认卡的理解往往会不断演变。重写器可以帮助你轻松更新所有旧卡片,使其符合当前偏好的格式和风格。
点击查看示例
例如,对于这张表述不佳的抽认卡:
双侧对称性肺泡综合征,靠近肺门,常伴有胸腔积液,应考虑什么?
{{c1::APE}}
重写器会将其改进为:
在出现双侧对称性肺泡综合征、靠近肺门且常伴有胸腔积液的情况下,应考虑哪些情况?
{{c1::如果出现双侧对称性肺泡综合征、靠近肺门且常伴有胸腔积液,则应考虑APE。}}
重写器还可以根据需要使卡片更加简洁。例如,它可以将同一张卡片重新格式化为:
双侧对称性肺泡综合征、靠近肺门、常伴有胸腔积液的关键特征:
- {{c1::考虑APE}}
重写器真正的强大之处在于它的灵活性——唯一的限制就是你的想象力。它可以:
- 使问题在语法上完整且清晰
- 将内容组织成规范的问题、项目符号列表、表格,或任何你喜欢的格式
- 通过在必要时重复关键背景信息,使答案自成一体
- 调整文字的详略程度,从简明摘要到详细解释
- 在提高清晰度的同时保留精确的医学术语
- 在增强内容质量的同时保持填空标记的格式
- 适应任何格式风格(段落、列表、图表等)
- 将内容转化为记忆术、类比或记忆宫殿
- 为复杂主题创建层次化的结构
- 生成多种变体,以通过交错练习加强记忆
重写器不仅仅是一个用来修复表述不佳卡片的工具,它更是一位创意伙伴,可以帮助你探索新的信息组织和呈现方式。无论你想创建视觉思维导图、构建记忆宫殿,还是开发独特的记忆系统,重写器都能帮助你实现这些想法,同时保持Anki卡片的完整性。
记忆术生成器
根据你的卡片生成易于记忆的记忆术,具体功能包括:
- 为每张卡片生成多个记忆术选项
- 使用成熟的记忆技巧,如主要系统
- 结合你现有的记忆锚点
- 保留上下文和准确性
有助于建立持久的记忆连接,尤其适用于数字和序列的记忆。
点击查看示例
针对上面关于婴儿热性惊厥的卡片,生成的记忆术最终出现在AnkiMnemonics字段中,内容如下:
- “快乐的赫菲斯托斯发烧了,把他的唯一香蕉伸向火堆”
* 快乐 年龄大于1岁 “快乐”让人联想到成熟,因此表示年龄已超过1岁
* 发烧的赫菲斯托斯 发作时体温高于38°C 赫菲斯托斯是锻造之神,与火相关,而“发烧”则直接点明了这一概念
* 伸出他唯一的香蕉 每次发热发作仅有一次惊厥 “唯一的香蕉”暗示着仅发生一次惊厥
* 靠近火堆 总发作次数少于3次 “火堆”象征着发热,而其“靠近”的位置则暗示了数量上的限制,即总发作次数不超过3次
2. “一个孩子绊倒在火堆里,对称地跳舞,只有一下抽搐,而且火堆不超过三个”
* 一个孩子绊倒 年龄大于1岁 孩子刚开始学步的形象让人联想到刚过1岁的年纪
* 在火堆里 发作时体温高于38°C “火堆”代表高温,也就是发热
* 对称地跳舞 运动症状呈对称性 “跳舞”意味着运动,“对称地”则表明身体两侧的动作一致
* 只有一下抽搐 每次发热发作仅有一次惊厥 “一下”强调了每次发作中惊厥的唯一性
* 而且火堆不超过三个 总发作次数少于3次 “火堆不超过三个”用火堆的数量来比喻发热发作的次数,形象地表达了总发作次数不多的概念
3. “一个发烧的、动作对称的孩子,在草原上锻造了一个独一无二的泡泡”
* 一个孩子 年龄大于1岁 “孩子”表明对象是年幼者,因此年龄超过1岁
* 发烧 发作时体温高于38°C “发烧”直接关联到发热的概念
* 对称 运动症状呈对称性 直接对应“对称”这一特征
* 锻造 持续时间少于15分钟且无后遗症 “锻造”让人联想到短暂而剧烈的动作,就像持续时间短、不会留下后遗症的惊厥一样
* 独一无二 每次发热发作仅有一次惊厥 “独一无二”明确了惊厥的唯一性
* 泡泡 总发作次数少于3次 “泡泡”象征着稀有和有限,正好对应总发作次数不多的情况
* 在草原上 体温过高 “草原”代表着开阔的自然环境,“体温过高”则让人联想到阳光照耀下的草原般炽热的感觉
[日期:2024年4月9日 版本:2.1 模型:openai/gpt-4-0125-preview]
解释器
当你难以理解某些卡片时,提供清晰、详细的解释,具体功能包括:
- 将复杂概念拆解开来
- 突出关键关系
- 补充有用的背景信息
- 使用类比和示例
尤其有助于理解自己为何答错某张卡片,并填补知识空白。
点击查看示例
针对上面关于婴儿热性惊厥的卡片,生成的记忆术最终出现在AnkiExplainer字段中,内容如下(我将其从法语翻译成英语以便通用记录):
- 解释 简单性热性惊厥的特点是在发热过程中具有唯一性和短暂性,这有助于将其与其他复杂性惊厥或神经系统疾病区分开来。
* 机制 发热可能会降低某些儿童的惊厥阈值,这就解释了为什么体温升高会在易感人群中引发惊厥。
[日期:2024年4月9日 版本:1.7 LLM模型:openai/gpt-4-0125-preview]
记忆术助手
一款轻量级的交互式命令行工具,用于快速生成记忆术,具备以下功能:
- 接受一个概念,并查找语义相似的现有记忆术
- 使用大语言模型生成多个新的记忆术选项
- 支持通过类似 Vim 的导航方式从生成的选项中选择
- 自动保存所选记忆术以供日后参考
- 独立于 Anki 运行,非常适合头脑风暴环节
与批量处理 Anki 卡片的记忆术创建工具不同,此工具提供交互式界面,可逐个概念生成记忆术。这些新记忆术会自动添加到数据集文件中,方便其他工具直接使用,从而快速根据个人创意定制脚本。
常见问题解答
点击展开
这些工具的核心优势是什么?
基本上,如果您每天晚上运行这些工具来处理当天未能掌握的卡片,您的卡片库质量和学习效率将稳步提升:
- 自动优化您感到困难的卡片
- 节省手动改进卡片的时间
- 建立更牢固的记忆连接
- 通过详细的历史记录跟踪改进情况
- 在增强内容的同时保持卡片结构不变
什么是【主要系统】(Major System)?
主要系统是一种强大的记忆技巧,它将数字转换为辅音音素,再将这些音素组合成易于记忆的单词。例如:
- 0 = S 音(如“sea”)
- 1 = T 音(如“tea”)
- 2 = N 音(如“new”)
- 等等。
这样就可以通过将数字转化为单词来更容易地记住它们。例如,“92”可以变成“pen”(P=9,N=2)。
您可以在 维基百科 上了解更多相关信息。
什么是记忆锚点?
记忆锚点是您已经非常熟悉的既有联想,可用于构建新的记忆。例如,如果您已经强烈地将“拿破仑”与“法国”联系在一起,那么在学习法国历史的新知识时,就可以以拿破仑作为记忆锚点。
这些工具可以利用您个人的记忆锚点集合,生成基于已有知识的记忆术。
支持哪些大语言模型提供商?
这些工具使用 LiteLLM,它为几乎任何大语言模型提供商提供了统一的接口,包括:
- OpenAI
- Anthropic
- MiniMax(MiniMax-M2.7、MiniMax-M2.7-highspeed — 204K 上下文)
- OpenRouter
- Azure
- AWS Bedrock
- 本地模型
- 以及更多
只需按照 LiteLLM 格式指定模型(例如“openai/gpt-4”、“anthropic/claude-3-opus”或“minimax/MiniMax-M2.7”),其余工作将由工具自动完成。对于 MiniMax,请将您的 API 密钥放入 API_KEYS/ 目录下的名为 MINIMAX 的文件中(工具会将其加载为 MINIMAX_API_KEY)。
支持哪些语言?
这些工具支持您所选择的大语言模型所支持的任何语言。由于这些脚本通过 LiteLLM 支持几乎所有大语言模型提供商,您可以使用任何对您的语言效果良好的模型。例如:
- OpenAI 的模型支持 100 多种语言
- Anthropic 的 Claude 支持 100 多种语言
- 您也可以使用专门为您的语言训练的本地模型
- 等等。
这些工具会保留所有语言特定的格式,包括:
- 从右到左的文字
- 特殊字符和变音符号
- 语言特定的标点符号
- 等等。
记忆术是如何工作的?
记忆术工具使用了几种经过验证的记忆技巧:
- 数字方面使用【主要系统】(Major System)
- 生动的图像和可视化
- 个人记忆锚点
- 发音相似性
- 幽默和荒诞
- 基于故事的关联
这些方法能够创建令人难忘的联想,在保证准确性的同时强化记忆提取能力。
在哪里可以找到每个工具的示例数据集?
examples/ 文件夹中包含了每个工具的训练数据集和示例文件。虽然这些文件最初是用法语编写的,后来匆忙翻译成英语,但它们仍可作为创建您自己的数据集的良好模板。请参阅下方的“示例文件”部分,了解每个文件的详细信息。
该项目的未来发展方向是什么?
这套工具是在医学院期间学习数万张 Anki 卡片的过程中开发并经过实战检验的。它在高强度学习阶段维护和优化大型抽认卡库方面发挥了巨大作用。
然而,随着科研任务的增加,我现在已无太多时间将这些脚本改造成更加用户友好的软件包。目前这些工具虽然运行良好,但仍需:
- 打包成正式的 Anki 插件
- 通过 PyPI 进行安装
- 代码去重与清理
- 更完善的文档
我正在积极寻找各层次的贡献者,帮助使这些工具更易于被更广泛的 Anki 社区使用。无论您是经验丰富的开发者还是刚刚入门,我们都欢迎您的参与!我可以根据我在该代码库上的丰富经验提供指导和方向,而您则可以帮助完成打包和分发的技术性工作。
请查看下面的详细路线图,了解需要改进的地方。如果您有兴趣帮助将这些经过实战检验的脚本转化为精良的 Anki 插件,请随时与我联系——我非常乐意与您交流并协助您入门!
为什么各个工具之间存在代码重复?
该项目是在我学习 Python 的过程中,为解决医学院期间的实际需求而逐步发展起来的。每个工具都是在需要时独立开发的,优先考虑功能性而非代码的优雅性。虽然它们都能可靠地运行,但仍有很大的机会围绕共同的 API 统一代码库。
我可以提供详细的重构和整合代码的指导,但我本人没有足够的时间来实施这些改动。如果您有兴趣在保留其经过实战检验的功能性的前提下简化代码库,请查看下面的路线图。
我应该在什么情况下使用每个工具?
- 记忆术创建工具:最适合记忆数字、序列、列表和抽象概念
- 插画工具:非常适合视觉型学习者以及受益于图像表达的复杂主题
- 改写工具:当卡片措辞不清晰或希望有多种表述方式时使用。无需担心对格式良好的卡片进行操作——大语言模型经过训练,能够识别并保留符合最佳实践的卡片,避免不必要的更改扰乱您的学习过程
- 解释工具:非常适合理解自己为何答错某张卡片,并填补知识空白
- 记忆术助手:一款简单的脚本,可通过考虑新主题与您先前记忆术之间的【语义相似性】(Semantic similarity),快速请求大语言模型生成新的记忆术。
如果我在同一张卡片上多次运行脚本,会发生什么?
对于大多数工具(记忆术生成器、插画师、解释器),之前的内容会使用 <details> 和 <summary> 标签保存在一个可折叠的 HTML 区域中。新的内容则显示在这个区域之上。这样可以方便地:
- 首先查看最新生成的内容
- 通过展开可折叠区域访问之前的版本
- 跟踪卡片随时间的变化过程
而“重写器”则有所不同——它会直接替换原始字段的内容,但会将所有之前的版本和元数据保存到一个单独的 AnkiReformulator 字段中。这样做既保持了卡片的可读性,又保留了完整的历史记录。
我如何追踪哪些卡片被修改过?
每款工具都会通过标签和元数据仔细记录修改情况,以确保透明性和可逆性。例如,当工具处理一张卡片时,它会添加一个带日期的标签,如 AnkiIllustrator::done::02/07/2023。这使得你可以轻松地:
- 快速识别哪些卡片被每款工具修改过
- 跟踪修改发生的时间
- 查找尚未处理的卡片
- 在需要时回滚更改(尤其是使用“重写器”时)
你可以在 Anki 浏览器中利用这些标签来评估有多少卡片可以从每款工具中受益,并查看已做的修改。需要注意的是,如果某个脚本执行失败,相应的笔记会被加上一个标签,比如 AnkiI::failed。
运行这些工具的成本是多少?
成本取决于你的使用模式以及启用的功能:
- 可以先从小规模开始,用几张卡片熟悉每款工具
- 内置的安全措施可防止意外超支:
- 每次运行的卡片数量可以限制
- 每个脚本的费用统计会存储在数据库中
- API 调用失败不会计入配额
- 你可以设置严格的支出上限
- 每张卡片的典型成本:
- 重写器:约 $0.02–0.04(仅文本)
- 记忆术:约 $0.02–0.04(仅文本)
- 解释器:约 $0.03–0.06(涉及更复杂的推理)
- 插画师:约 $0.02 加上图片费用(每张图片 $0.04–0.12)
数据库会跟踪每个脚本的总支出,便于你进行预算和监控成本。你也可以先使用较便宜的模型进行初步测试,再逐步升级到功能更强的模型。
我能在手机上使用这些工具吗?
虽然你需要在电脑上运行这些脚本(而不是手机),但所有更改都会直接应用到你的 Anki 笔记中。这意味着:
- 在电脑或服务器上运行脚本
- 同步电脑端的 Anki
- 同步后,改进后的卡片会出现在 AnkiMobile 或 AnkiDroid 上
- 所有生成的内容(改写、记忆术、图片等)在移动端都能完美运行。
示例文件
examples/ 文件夹中包含一些示例文件,可以帮助你快速入门。请注意,这些示例最初是用法语编写的(系统提示除外),随后被迅速翻译成英语——因此部分示例可能不太通顺,但仍能展示基本用法:
anki_ai_utils_tmux_launcher.sh:这是我每天早上用来自动处理前一天遇到困难卡片的基于 tmux 的启动脚本。anchors.json:示例记忆锚点映射文件dataset_anchors.txt:用于记忆锚点处理的训练示例explainer_dataset.txt:解释器工具的示例illustrator_dataset.txt:用于图像生成的训练数据illustrator_sanitize_dataset.txt:用于清理图像提示的示例mnemonics_dataset.txt:用于记忆术生成的训练数据reformulator_dataset.txt:卡片改写的示例string_formatting.py:用于处理隐藏式填空和文本格式化。
你不担心大语言模型会产生幻觉吗?
尽管在将大语言模型用作搜索引擎或依赖其压缩的内部知识时,幻觉确实是一个值得关注的问题,但这些工具采用了不同的方法,能够有效降低这种风险:
少样本学习:通过提供精心设计的示例,我们引导大语言模型遵循特定的模式和格式,从而减少编造信息的可能性。
结构化输出:工具会强制执行严格的输出格式,使幻觉更容易被检测和纠正。
保留源材料:这些工具并不生成新事实,而是专注于改写和增强你卡片中的现有内容。
模型无关性:随着更可靠的新模型出现,你可以轻松切换到它们,而无需改变工作流程。
任务专业化:通过专注于特定任务(如改写、记忆术生成等),与通用聊天模型相比,幻觉发生的范围被大大缩小。
虽然没有任何系统是完美的,但这种方法在医学院期间经过大量测试已被证明非常可靠。随着大语言模型的不断改进,我们可以预期幻觉现象会越来越少见。
数据集文件的格式是什么?
数据集文件(如 explainer_dataset.txt、reformulator_dataset.txt 等)是简单的文本文件,消息之间用 ---- 分隔。其中第一条消息被视为系统提示,之后是用户和助手交替发送的消息。这种格式模拟了典型的 LLM 对话流程,同时易于阅读和编辑。
使用方法 / 入门
点击查看更多
要开始使用这些脚本(在有人帮我把它做成插件之前),大致步骤如下: 0. 注意:如果你不理解这些步骤,我建议你使用大语言模型自学。步骤会根据你使用的操作系统(macOS、Linux 或 Windows)略有不同,但核心思路是一致的。
- 确保你的终端中已安装 Python。推荐使用 Python 3.12.7 或 3.11.x 版本,因为这是我当时使用的版本。如果尝试使用更新的版本,可能会遇到问题。
- 使用
git clone https://github.com/thiswillbeyourgithub/AnkiAIUtils/克隆仓库。 - 建议在这个新创建的文件夹中为 Python 创建一个虚拟环境,例如在我的 Linux 系统上可以运行
uv venv,然后执行source .venv/bin/activate。 - 运行某个脚本,请参考下面的各个使用部分。
重述器
重述器可以通过命令行运行:
python reformulator.py \
--query "(rated:2:1 OR rated:2:2) -is:suspended" \
--dataset_path "data/reformulator_dataset.txt" \
--string_formatting "data/string_formatting.py" \
--ntfy_url "ntfy.sh/YOUR_TOPIC" \
--main_field_index 0 \
--llm "openai/gpt-4" \
--embedding_model "openai/text-embedding-3-small" \
--max_token 4000 \
--llm_temp 0
关键参数:
query: Anki 浏览器查询语句,用于选择卡片(默认为最近失败的卡片)。dataset_path: 用于重述的示例提示。string_formatting: 自定义文本格式化函数。ntfy_url: 可选的 ntfy.sh 通知地址。main_field_index: 需要重述的字段索引(0 表示第一个字段)。llm: 使用 litellm 格式的 LLM 模型。embedding_model: 用于语义相似度搜索的模型。max_token: 每次查询的最大 token 数。llm_temp: LLM 的温度参数(0 表示输出一致)。
其他选项:
--debug: 启用调试模式。--force: 即使卡片已经重述过,也强制处理。--print_db_then_exit: 显示数据库内容并退出。--parallel: 并发进程数(默认 4)。--exclude_media: 跳过包含媒体的卡片。--mode: 可以是reformulate(重述)或reset(恢复原始内容)。请注意,“reset” 功能并不能完全保证成功,但如果出现问题,我们特意保留了大量的日志,以确保你不会丢失任何数据。
记忆术生成器
记忆术生成器也可以通过命令行运行:
python mnemonics.py \
--field_names "body" \
--query "(rated:2:1 OR rated:2:2) -is:suspended" \
--memory_anchors_file "data/anchors.json" \
--dataset_path "data/mnemonics_dataset.txt" \
--string_formatting "data/string_formatting.py" \
--ntfy_url "ntfy.sh/YOUR_TOPIC" \
--llm "openrouter/anthropic/claude-3-sonnet" \
--embedding_model "openai/text-embedding-3-small" \
--n_mnemonic 1
关键参数:
field_names: 需要分析的笔记字段列表,用逗号分隔。query: Anki 浏览器查询语句,用于选择卡片(默认为最近失败的卡片)。memory_anchors_file: 将概念映射到记忆锚点的 JSON 文件。dataset_path: 用于生成记忆术的示例提示。string_formatting: 自定义文本格式化函数。ntfy_url: 可选的 ntfy.sh 通知地址。llm: 使用 litellm 格式的 LLM 模型。embedding_model: 用于语义相似度搜索的模型。n_mnemonic: 每张卡片需要生成的记忆术数量。
其他选项:
--debug: 启用调试模式。--force: 即使卡片已经有记忆术,也强制处理。--note_mode: 不重复计算同一张笔记中的卡片。--do_sync: 在处理前后同步 Anki 数据。
记忆术生成器 CLI
记忆术生成器 CLI 提供了一个交互式界面来生成记忆术:
python mnemonics_creator.py \
--top_k 100 \
--n_gen 10 \
--model "openrouter/anthropic/claude-3-sonnet" \
--embed_model "openai/text-embedding-3-small"
关键参数:
top_k: 作为示例使用的相似现有记忆术数量(默认 100)。n_gen: 每次查询生成的新记忆术数量(默认 10)。model: 使用 litellm 格式的 LLM 模型。embed_model: 用于语义相似度搜索的模型。query: 可选的初始查询。gui: 启用 GUI 界面(尚未实现)。
CLI 提供了一个交互式界面,你可以:
- 输入要生成记忆术的概念。
- 查看相关的现有记忆术作为参考。
- 从多个生成的选项中选择。
- 使用 vim 风格的键(j/k)或数字键进行导航。
- 将选定的记忆术保存到你的收藏中。
解释器
解释器可以通过命令行运行:
python explainer.py \
--field_names "body" \
--query "(rated:2:1 OR rated:2:2) -is:suspended" \
--dataset_path "data/explainer_dataset.txt" \
--string_formatting "data/string_formatting.py" \
--ntfy_url "ntfy.sh/YOUR_TOPIC" \
--llm "openrouter/anthropic/claude-3-sonnet" \
--embedding_model "openai/text-embedding-3-small" \
--llm_max_token 3000
关键参数:
field_names: 需要分析的笔记字段列表,用逗号分隔。query: Anki 浏览器查询语句,用于选择卡片(默认为最近失败的卡片)。dataset_path: 用于生成解释的示例提示。string_formatting: 自定义文本格式化函数。ntfy_url: 可选的 ntfy.sh 通知地址。llm: 使用 litellm 格式的 LLM 模型。embedding_model: 用于语义相似度搜索的模型。llm_max_token: 每次查询的最大 token 数。
其他选项:
--debug: 启用调试模式。--force: 即使卡片已经有解释,也强制处理。--note_mode: 不重复计算同一张笔记中的卡片。--do_sync: 在处理前后同步 Anki 数据。
插画师
插画师也可以通过命令行运行:
python illustrator.py \
--field_names "front,back" \
--query "(rated:2:1 OR rated:2:2) -is:suspended" \
--memory_anchors_file "data/anchors.json" \
--dataset_path "data/illustrator_dataset.txt" \
--dataset_sanitize_path "data/illustrator_sanitize.txt" \
--string_formatting "data/string_formatting.py" \
--ntfy_url "ntfy.sh/YOUR_TOPIC" \
--n_image 1
关键参数:
field_names: 需要分析的笔记字段列表,用逗号分隔。query: Anki 浏览器查询语句,用于选择卡片(默认为最近失败的卡片)。memory_anchors_file: 将概念映射到记忆锚点的 JSON 文件。dataset_path: 用于生成插图的示例提示。dataset_sanitize_path: 用于净化不安全提示的示例。string_formatting: 自定义文本格式化函数。ntfy_url: 可选的 ntfy.sh 通知地址。n_image: 每张卡片需要生成的图片数量。
其他选项:
--debug: 启用调试模式。--force: 即使卡片已经有插图,也强制处理。--disable_notif: 禁用 ntfy.sh 通知。
路线图
点击查看更多
此待办事项列表由 MdXLogseqTODOSync 自动维护
- 将这些脚本改造成插件(为此,请帮助我完成剩余的待办事项,这样插件化过程会更加直接)
适用于所有工具
- 改为从环境变量加载 API 密钥
- 创建一个通用类,用于统一所有代码
- 参数:
- name(用于区分不同子模块:例如“illustrator”)
- query
- 输出字段名
- template
- tags_regex(用于指定模板中包含哪些标签)
- llm 名称
- embedding_model
- llm_max_token
- llm_temp
- tkn_warn_limit(用于判断何时停止)
- exclude_media
- exclude_version
- exclude_done
- n_note_limit
- do_sync
- callback(如 ntfy_url 的函数)
- debug
- parallel
- force
- print_db_then_exit
- 方法:
- string_format(可被重载)
- load_history
- save_history
- total_cost
- execute_query(查找卡片并应用参数中的过滤条件)
- loop_over_notes(检查是否确实声明了 compute_new_field)
- addtags 和 removetags
- 注意事项:
- 在初始化时,检查是否确实存在 version 属性
- 确保使用 self.lock
- 重写每个脚本以使用该类
- 将 --help 重定向到每个项目的类
- 使每个类使用相同的入口点
- 参数:
- 使用 toml 替代 json?它还支持设置注释
- 在所有地方使用 beartype 进行静态类型检查和代码整洁化
- 将所有推理结果存储在压缩的 sqlite 数据库中,而不是 json 文件。后者会变得过于庞大
- 添加检查,确保已移除所有“已完成”标签
- 实际上无需存储“已完成”标签,因为所有重要信息都已存储在字段中
- 对示例使用 xml 格式
- 同时利用
标签
- 同时利用
- 告知用户每次回答花费的时间
- 添加一个参数,用于控制是否将标签纳入 LLM 的上下文中,否则 LLM 可能会被某些缩写词混淆
- 但通过 regex 参数仅保留与正则表达式匹配的标签。这样我们可以只让 LLM 处理部分标签
- 使其可以通过 setup.py 在 pypi 上安装
记忆术生成器
- 添加快捷键
- 绑定 e 键编辑命题
- 绑定重新开始生成
- 绑定进入聊天模式并与用户共同构建记忆术
- 添加快捷键
插画师
- 使用 LLM 提取数字
- 请求 LLM 进行快速转换,例如将 48 小时转换为 2 天、单位换算等
- 增加对包含音频、图片等媒体的笔记的支持
- 添加一种不实际生成图像的模式。这实际上也可以用作记忆术
重构器
- 为 LLM 提供 5 到 10 个处理图片等媒体的示例,然后增加对它们的支持
- 使其能够使用特定的 fstring 模板进行字段替换。否则它只能重构单个字段
- 更好的做法是添加一个参数来指定输出字段,以及一个参数来指定输入字段的逗号分隔列表
解释器
- 在开始时计算所有嵌入向量,从而提高速度
- 目前的实现相当糟糕。可以先用一次 LLM 调用来确定需要提出哪些后续问题,然后再用另一次 LLM 调用异步回答每个问题
- 将每个新问题的答案保存为 标签,以便在手机上只需轻触字段即可轻松访问
- 将每个新问题的答案保存为
Ankimnemonics
- 注释掉那些不遵守先添加主题规则的记忆术
- 弄清楚为什么有时运行过程中会卡住
- 使其能够区分“必须以明文形式出现”和“必须以记忆术形式出现”?
AnkiAiFilter
- 使用类似于 wdoc 中的评估 LLM 来更好地过滤 Anki 查询
- 实际上 wdoc 已经可以用于此目的!也许应该将其转换为插件?
标签器(正在进行中)
- 总是将标签前缀为 ankitagger:,但可自定义
- 总是按字母顺序对这些标签排序
- 添加模式:
- “预设”模式:用户提供标签列表,LLM 根据查询为每条笔记找到应应用的标签
- “自然列表”模式:LLM 自己创建标签列表
- 遍历每条笔记,请求 LLM 生成标签
- 同时显示迄今为止的标签列表
- 最后再次遍历,并请求 LLM 根据嵌入向量筛选出应适用的标签
- 但仍允许从预先准备好的列表开始
- 如果发现媒体,则添加图像支持的参数
- 如果卡片包含图像,应先对其进行哈希处理,然后缓存调用一个视觉模型来描述图像类型,再利用该回答的嵌入向量,为 LLM 推荐合适的分类标签
- 图像应有其专属标签,如“图像”、“决策树”、“分类”、“表格”等
致谢
本项目大量使用了 AnkiConnect 与 Anki 进行交互。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备