# AnkiGen.LLM：利用大语言模型自动将任何内容转换为结构化Anki记忆卡片

> AnkiGen.LLM 是一个完整的 AnkiConnect API v6 Python 封装库，提供了一套高内聚、低耦合的面向对象自动化工具链，专为将LLM输出可靠地转换为Anki卡片而设计。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-05-13T03:00:00.000Z
- 最近活动: 2026-05-30T12:22:14.431Z
- 热度: 90.0
- 关键词: Anki, LLM, 记忆卡片, 间隔重复, 知识管理, 自动化工具, Pydantic, Python, 语言学习
- 页面链接: https://www.zingnex.cn/forum/thread/ankigen-llm-anki
- Canonical: https://www.zingnex.cn/forum/thread/ankigen-llm-anki
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者：** jacky917
- **来源平台：** GitHub
- **原始标题：** AnkiGen.LLM
- **原始链接：** https://github.com/jacky917/AnkiGen.LLM
- **发布时间：** 2026年5月13日

---

## 项目概述

AnkiGen.LLM 是一个完整的 AnkiConnect API v6 Python 封装库，提供牌组、笔记、卡片、媒体、模型管理的 CRUD 操作。它不仅仅是一个API封装，更是一套高内聚、低耦合的面向对象自动化工具链，专为"将大语言模型输出可靠地转换为 Anki 记忆卡片"而设计。

该项目采用强严格类型校验与 Pydantic 控制，确保从LLM生成的内容能够准确、可靠地导入到Anki中，解决了传统手动制卡效率低下和格式不一致的问题。

---

## 系统架构

### 整体架构设计

系统采用分层架构，通过HTTP POST与AnkiConnect插件通信：

```
Python应用程序 → HTTP POST → AnkiConnect插件(端口8765) → Anki数据库
```

配置通过.env文件管理，包括主机地址、端口和API密钥等连接参数。

### 核心组件

**config_manager.py**

读取.env文件并配置pydantic-settings与全局日志，为整个工具链提供统一的配置管理。

**llm_client.py**

封装异步AsyncOpenAI客户端，负责向兼容OpenAI格式的LLM（如Gemini）发送请求，并强制约束JSON返回格式，确保输出结构符合预期。

**anki_model_manager.py**

扫描./anki_models/目录中的JSON Schema文件作为LLM Response Format，并封装AnkiConnect的Action，利用httpx异步发送请求。这是连接LLM输出与Anki卡片的关键桥梁。

**main_workflow.py**

提供给终端用户的自动化入口点，协调各组件完成从文本到卡片的完整转换流程。

---

## 工作流程详解

### 标准执行流程

1. **配置加载：** 从环境变量读取API Key、URLs等配置
2. **模型Schema获取：** 从anki_models/目录加载指定的JSON Schema文件
3. **LLM结构化数据生成：** 使用response_format强制LLM输出JSON格式的结构化数据
4. **Anki Action创建：** 基于结构化数据创建添加笔记的Action
5. **异步提交：** 通过HTTP POST异步发送到AnConnect服务器
6. **结果返回：** 获取并返回新生成的笔记ID

### 错误处理机制

系统实现了完善的错误处理：
- 成功时返回操作结果
- 失败时抛出AnkiConnectError异常
- 包含详细的错误信息便于调试

---

## TOEIC_Coach 模型示例

项目自带一个复杂的TOEIC_Coach卡片模型定义，展示了如何针对大语言模型特性优化Anki卡片版型。

### 核心概念

通过TOEIC_Coach.json将单词的例句进行"语块化"(Chunking)，并通过LLM引导出语感、同义词比较与必考搭配词(Collocations)，为语言学习提供更丰富的上下文信息。

### 文件组成

- **TOEIC_Coach.json：** 包含modelName、inOrderFields以及专属的llm_schema嵌套参数设定，完美桥接安基生卡逻辑与OpenAI结构化输出请求
- **TOEIC_Coach_front/back.html：** 简约大方的卡片正背面设计，支持利用{{#Field}}隐藏空栏位
- **TOEIC_Coach_style.css：** 专业的多益配色（深蓝#1a3a5f、强调橘#e67e22）与一体化响应式排版

### 一键导入

为避免手动设置繁琐的HTML/CSS与栏位，可以使用import_model.py脚本直接安装模型：

```python
python import_model.py TOEIC_Coach
```

这将自动读取.json、_front.html、_back.html、_style.css文件并配置到Anki中。

---

## 使用示例

### 基础用法

```python
import asyncio
from main_workflow import MainWorkflow, config

async def main():
    config.setup_logging()
    workflow = MainWorkflow()
    
    # 默认会去./anki_models/vocabulary_model.json寻找Schema限制LLM输出
    note_id = await workflow.execute(
        deck_name="Default",
        model_name="基本",
        user_prompt="Ephemeral: lasting for a very short time. Example: Fashions are ephemeral.",
        model_schema_file="vocabulary_model.json",
        system_prompt="你是一位专业英文教师，请为学生抽取出单词含义与例句，并强制输出给定的JSON格式。",
        tags=["vocabulary", "ephemeral", "english"]
    )
    print(f"成功新增笔记！ID: {note_id}")

asyncio.run(main())
```

---

## 技术亮点

### 强类型校验

使用Pydantic进行严格的类型校验，确保LLM输出符合预期的JSON Schema，减少因格式错误导致的导入失败。

### 异步架构

采用asyncio和httpx实现异步操作，提高批量处理效率，特别是在需要生成大量卡片时优势明显。

### 模块化设计

各组件职责清晰，易于扩展和维护。用户可以根据需要替换LLM客户端、添加新的卡片模型或修改工作流逻辑。

### Schema驱动

通过JSON Schema定义卡片结构，使LLM输出与Anki卡片格式解耦，便于适应不同的学习场景和卡片类型。

---

## 应用场景

AnkiGen.LLM 适用于多种知识管理场景：

1. **语言学习：** 自动从阅读材料中提取生词并生成包含例句、同义词、搭配词的记忆卡片
2. **专业知识整理：** 将技术文档、论文内容转换为问答式或概念式的记忆卡片
3. **考试复习：** 针对特定考试（如TOEIC、GRE等）生成定制化的复习卡片
4. **读书笔记：** 将书籍章节内容自动转换为便于回顾的知识点卡片

---

## 总结与价值

AnkiGen.LLM 展示了如何将大语言模型与传统记忆工具相结合，实现知识管理的自动化。通过严格的类型控制、模块化的架构设计和Schema驱动的内容生成，它提供了一个可靠、可扩展的解决方案。对于需要高效管理大量知识的学习者和专业人士来说，这类工具代表了AI辅助学习的一个重要方向。
