当前位置: 首页 > news >正文

anki-vocab:一个命令行工具,让背单词变成一件很酷的事

背单词这件事,我折腾了很久。

用了很多 App,要么卡片太简陋(只有单词+中文释义),要么复习流程太机械。我想做的是:把每个单词都变成一张"有温度"的卡片——有英文释义、有使用场景、有记忆技巧、有发音,还有地道的例句。

于是一口气做了这个 CLI 工具:anki-vocab。它把 Claude(LLM)、OpenAI TTS、Anki 串成了一条流水线,按下一个命令,所有事情自动完成。

更妙的是,我发现光"存卡片"还不够。记过的单词得用起来。于是我又加了一个阅读理解练习模式,从你的单词库里抽取词汇,让 Claude 生成一篇考研英语风格的阅读文章,你在浏览器里阅读、做题,鼠标悬停就能看词义。


功能一览

功能说明
🤖AI 制卡调用 Claude 生成结构化单词卡片(英文释义、用法、记忆技巧、Collins 释义、中文翻译)
🔊AI 发音OpenAI TTS 生成地道美音,即时播放并嵌入卡片
🃏一键入库自动存入 Anki,支持创建/更新/去重
📡AnkiConnect通过 HTTP API 与 Anki 交互,无需手动导入
💾离线缓存Anki 没开?自动写入 SQLite,下次自动同步
📖阅读练习生成考研英语风格阅读理解(400-500 词,5 道题),鼠标悬停查词义
🎯错题追踪答错的单词自动记录,下次优先练习弱词
🔌可插拔 TTSTTS 层完全解耦,换 ElevenLabs 只需一行代码

安装

git clone https://github.com/zhchoice123/anki-vocab.git cd anki-vocab python -m venv venv && source venv/bin/activate pip install -r requirements.txt # 配置 API Key cp .env.example .env # 编辑 .env,填入 ANTHROPIC_API_KEY 和 OPENAI_API_KEY

前置条件:

  • Python 3.11+
  • Anki 桌面版 + AnkiConnect 插件
  • 一个名为英语单词模板(vocab配色)的 Note Type(10 个字段)

用法一:查词制卡

最简单的方式:

./word tenacious

终端会显示一张漂亮的 Rich 渲染卡片:

╭──────────────────────────────────────────────────────────────╮ │ │ │ tenacious adj.顽强的;坚韧不拔的 │ │ │ │ ★★★★☆ │ │ │ │ 1. SIMPLE MEANING │ │ Someone who keeps trying and never gives up. │ │ │ │ 2. KEY IDEA │ │ It shows very strong will and determination. │ │ │ │ ... │ │ │ │ 🔊 ✓ Saved to Anki │ ╰──────────────────────────────────────────────────────────────╯

同时你会听到 TTS 朗读 "tenacious"。卡片已自动存入 Anki。

如果这个词已经在牌组里了,它会直接播放已有音频并展示卡片,不会重复调用 API。

支持短语:

./word "give up"

支持参数覆盖:

./word --deck "My Deck" serenity # 指定牌组 ./word --speed 0.8 verbose # 慢速发音,更清晰 ./word -v tenacious # 开启 debug 日志

用法二:阅读理解练习

这是我个人最喜欢的功能。

./word practice

它会做以下几件事:

  1. 从你的单词库中智能选词(优先选你答错过的弱词,不足再补新词)
  2. 调用 Claude 生成一篇阅读文章——题材随机(经济、科技、历史、政治、文化…),400-500 词,4-6 段,考研英语难度
  3. 生成 5 道选择题,覆盖考研五大题型:主旨大意、细节理解、推理判断、词义猜测、作者态度
  4. 启动本地 Web 服务http://127.0.0.1:8766),自动打开浏览器

页面效果:

  • 🌙深色主题,护眼
  • 目标单词蓝色高亮,鼠标悬停弹出英文简单释义
  • 做完提交后即时判分,标出对错并显示解析
  • 📝错题自动写入 SQLite,下次优先复习
./word practice -n 8 # 只用 8 个词生成文章 ./word practice --port 8767 # 换端口 ./word practice --no-browser # 不自动打开浏览器

错题追踪原理

每次你答错一道题,系统会读取这道题的target_word(它考察的是哪个单词),然后在 SQLiteword_errors表中记录一次错误。

下次运行./word practice时,WordSelector会:

  1. 先按error_count DESC, last_error DESC取出弱词
  2. 再用最新添加的单词补足到 10 个

也就是说,你的弱词会被反复"照顾",直到你真正掌握。


离线也能用

Anki 没开?完全没问题。

当你执行./word tenacious时,如果 AnkiConnect 连不上,工具会静默把完整卡片 + 音频 Base64 写入~/.anki-vocab/pending.db

下次运行任意命令时,后台线程会自动把这些 pending 的卡片推送到 Anki,并提示:

[sync] synced 3 pending word(s) to Anki

技术架构

这个项目代码量不大(约 2000 行 Python),但结构比较清晰:

anki-vocab/ ├── add_word.py # CLI 入口,子命令路由 ├── config.py # 环境变量配置 ├── models.py # 数据模型(WordCard、ReadingMaterial…) ├── anki/ │ ├── repository.py # AnkiConnect HTTP 客户端 │ ├── cache.py # LRU 缓存装饰器 │ ├── formatter.py # WordCard ↔ Anki 字段映射 │ └── local_store.py # SQLite 离线缓存 + 错题追踪 ├── llm/ │ ├── base.py # LLM 抽象基类 │ └── claude.py # Claude 提供商(查词 + 阅读生成) ├── tts/ # TTS 完全解耦 │ ├── base.py # TTS 抽象基类 │ ├── openai_tts.py # OpenAI TTS 实现 │ ├── player.py # 跨平台音频播放 │ └── utils.py # PCM → WAV 工具 ├── services/ │ └── word_service.py # 业务编排层 ├── practice/ # 阅读理解练习模式 │ ├── selector.py # 智能选词(错题优先) │ ├── generator.py # 阅读生成器 │ ├── server.py # Flask Web 服务 │ ├── templates/ │ │ └── practice.html # 阅读 UI │ └── static/ │ └── style.css # 深色主题 + Tooltip ├── display/ │ └── renderer.py # Rich 终端渲染 └── tests/ └── test_core.py # 单元测试(40+ 测试用例)

设计亮点

  1. Repository + Decorator 模式CachingAnkiRepository给 Anki 操作加了 LRU 缓存,find读缓存,save/update写穿缓存
http://www.jsqmd.com/news/1075007/

相关文章:

  • GDRE Tools深度解析:Godot逆向工程的终极解决方案
  • 放弃解决一类人的痛点,专注用AI解决一个又一个具体的问题,或许会有新的机会
  • Mixtral 8x7B:开源稀疏MoE模型实战指南
  • AI伦理落地实战:从数据层识别与修复算法偏见
  • 国企面试官:“你说这个项目是Agent,这和调用大模型API,有啥区别?” ,我震惊了:“Think-Execute 循环、RAG向量检索,你都不知道?”
  • 基础(四):强化学习入门-从斯金纳箱到大模型推理
  • 导师严选!盘点2026年最强的AI论文网站
  • Amazon Bedrock 生产级落地指南:免运维、可组合、生产就绪的生成式AI架构
  • AI开发实战:SSL/TLS加密通信部署与CERTIFICATE_VERIFY_FAILED排查
  • word中表格后的空白页如何删除
  • 阀门寿命仿真
  • 【电力系统】PMSM电机定子绕组匝间短路故障、电机故障诊断+转子磁场损失simulink仿真+万字详解说明论文
  • 5种强力解决方案:VisualCppRedist AIO终极指南解决软件运行故障
  • 爬虫转大模型:代码实践里的关键取舍
  • FanControl终极中文设置指南:3分钟让Windows风扇控制彻底汉化
  • NUC980与ESP32的SPI-WiFi联调实战:从驱动编译到网络连通
  • 5个简单步骤让Windows任务栏变透明:TranslucentTB终极美化指南
  • 2026年亲测揭秘:10款好用的降AI率软件,部分无限免费降AI!必看干货
  • DonkeyCar硬件设计原理与自动驾驶入门实践
  • 德克萨斯大学奥斯汀分校让问答机器人知道自己“几斤几两“
  • Dism++深度解析:为什么说它是Windows系统维护的“瑞士军刀“?
  • 早期停止聚合:提升自适应统计推断效率的元策略
  • 如何在3分钟内彻底告别网盘限速:LinkSwift直链解析终极指南
  • 公交车到站路线实时查询,到哪了自动提醒!
  • 阿里让AI大脑“术业专攻“:给不同神经元分配不同任务
  • FanControl终极指南:从卡顿到静音的风扇控制完整解决方案
  • 面试前和腾讯师兄聊:“明天面试需要准备啥?”,师兄:“看看Transformer层的结构”,我只好半夜爬起来恶补...牢记Attention、FNN
  • 独立开发者从0到1:产品验证、技术选型与增长闭环的工程化路径
  • FanControl终极指南:5步实现Windows风扇精准控制
  • 标题:大学生专属:如何零基础搭建一个酷炫的个人博客网页?