11# doc2anki
22
3+ ⚠WARNING: _ This project is in an early development phase and is not ready for use._
4+
35## 概述
46
5- doc2anki 将知识库文档转换为 Anki 学习卡片。
7+ doc2anki 可以将任何知识库文档转换为 Anki 学习卡片。这是为了减轻 ankier 们繁重的制卡工作而诞生的
8+
9+ 通过 (自己提供 API 的) 大语言模型, 从 Markdown 或 Org-mode 文档中提取知识点,生成符合间隔重复学习规律的记忆卡片。
610
7- 通过大语言模型从 Markdown 或 Org-mode 文件中提取知识点,生成符合间隔重复学习规律的记忆卡片。
11+ 未来可能考虑支持别的笔记格式,如果有人提 issue 的话
812
913## 环境要求
1014
1115- Python 3.12 或更高版本
1216- 支持 OpenAI API 格式的语言模型服务
17+ - 像是 Anthropic, Google 的 API 就不支持 (截止至 2025-12-29)
1318
1419## 安装
1520
1621### 全局安装 (推荐)
1722
18- 使用 pipx 或 uv 全局安装后,可在任意位置运行:
23+ 由于这个包已经被我~~ 拉~~ publish 到了 PyPI,所以你可以使用 pipx 或 uv 全局安装
24+
25+ 安装了之后,可在任意位置运行:
1926
2027``` sh
2128# 使用 pipx
@@ -28,7 +35,7 @@ uv tool install doc2anki
2835### 开发环境
2936
3037``` sh
31- git clone https://github.com/your-repo /doc2anki
38+ git clone https://github.com/SOV710 /doc2anki
3239cd doc2anki
3340uv sync
3441```
@@ -37,6 +44,8 @@ uv sync
3744
3845### 配置文件位置
3946
47+ doc2anki 目前只有一种配置文件,就是配置 ai api 入口的 TOML 文件, 就是 ` ai_providers.toml `
48+
4049doc2anki 按以下顺序查找配置文件:
4150
42511 . 命令行指定的路径 (` --config ` )
@@ -45,23 +54,67 @@ doc2anki 按以下顺序查找配置文件:
4554
4655### 配置格式
4756
48- ``` toml
49- [provider_name ]
50- enable = true
51- auth_type = " env"
52- api_key = " YOUR_API_KEY_ENV_VAR"
53- default_base_url = " https://api.example.com/v1"
54- default_model = " model-name"
55- ```
56-
57- 支持三种认证方式:
57+ doc2anki 设计了三种认证方式
5858
5959| 认证类型 | api_key 含义 | 示例 |
6060| ---------| -------------| ------|
6161| ` direct ` | API 密钥本身 | ` api_key = "sk-xxx..." ` |
6262| ` env ` | 环境变量名 | ` api_key = "OPENAI_API_KEY" ` |
6363| ` dotenv ` | .env 文件中的键名 | ` api_key = "API_KEY" ` |
6464
65+ 1 . direct mode
66+ 这是最不安全的配置方式,将自己的 api key 直接放在 toml 配置文件中
67+
68+ 下面均以 deepseek 的 api 举例说明
69+
70+ ``` toml
71+ [deepseek ]
72+ enable = true
73+ auth_type = " direct"
74+ base_url = " https://api.deepseek.com"
75+ model = " deepseek-chat"
76+ api_key = " sk-xxxxxxxxxxxxxxxx"
77+ ```
78+
79+ 2 . env mode
80+
81+ 这是稍微安全一点的配置方式,将自己的 api key 配置在环境变量中,然后让 doc2anki 主动读取对应的环境变量
82+
83+ 当然,你可以设置 fallback 后的 default 模式,不过对于 api key 来说,没有什么"fallback mode"
84+
85+ ``` toml
86+ [deepseek ]
87+ enable = true
88+ auth_type = " env"
89+ base_url = " DEEPSEEK_BASE_URL"
90+ model = " DEEPSEEK_MODEL"
91+ api_key = " DEEPSEEK_API_KEY"
92+ default_base_url = " https://api.deepseek.com"
93+ default_model = " deepseek-chat"
94+ ```
95+
96+ 3 . dotenv mode
97+
98+ 这是最安全的配置方式,将自己的 api key 注入单独的 .env 文件中而不是对所有程序可见的环境变量中
99+
100+ 不过,你必须设置 .env 文件的 path, 否则 doc2anki 找不到
101+
102+ ``` toml
103+ [deepseek ]
104+ enable = true
105+ auth_type = " dotenv"
106+ base_url = " DEEPSEEK_BASE_URL"
107+ model = " DEEPSEEK_MODEL"
108+ api_key = " DEEPSEEK_API_KEY"
109+ dotenv_path = " /home/user/.env"
110+ default_base_url = " https://api.deepseek.com"
111+ default_model = " deepseek-chat"
112+ ```
113+
114+ 配置完成后,通过 ` doc2anki list ` 列出当前配置文件中被 enable 的 api providers, ` docs2anki list --all ` 列出所有 providers
115+
116+ 注:现在的 ` docs2anki list ` 还无法无法读 dotenv 文件中的 providers, 只能读到 ` default_base_url ` 和 ` default_model `
117+
65118## 使用
66119
67120### 查看可用的模型提供商
@@ -81,13 +134,13 @@ doc2anki validate -p provider_name
81134### 生成卡片
82135
83136``` sh
84- doc2anki generate input.md -p provider_name
137+ doc2anki generate input.md -p provider_name -o output.apkg
85138```
86139
87140处理整个目录:
88141
89142``` sh
90- doc2anki generate docs/ -p provider_name -o knowledge .apkg
143+ doc2anki generate docs/ -p provider_name -o output .apkg
91144```
92145
93146### 命令行选项
@@ -135,10 +188,10 @@ doc2anki generate docs/ -p provider_name -o knowledge.apkg
135188对于特殊文档结构,可手动指定分块级别:
136189
137190``` sh
138- # 按二级标题分块
191+ # 按二级标题分块, 在 markdown 中即为 ##
139192doc2anki generate input.md -p provider --chunk-level 2
140193
141- # 按三级标题分块,更细粒度
194+ # 按三级标题分块,在 markdown 中即为 ###
142195doc2anki generate input.md -p provider --chunk-level 3
143196```
144197
@@ -155,18 +208,17 @@ doc2anki generate input.md -p provider --chunk-level 3
155208
156209## 文档格式
157210
158- ### 全局上下文块
211+ ### 全局上下文块 (❗deprecated)
159212
160213在文档开头定义领域术语,供语言模型生成卡片时参考。
161214
162215Markdown 格式:
163216
164- ```` markdown
217+ ```
165218```context
166219- TCP: "传输控制协议"
167220- HTTP: "超文本传输协议"
168221```
169- ````
170222
171223Org-mode 格式:
172224
0 commit comments