J’ai créé un nouvel outil pour automatiser les tâches fastidieuses liées à la création de cartes mémoire Anki. J’ai écrit anki-api. Il s’agit d’un outil CLI et web minimaliste qui permet à des agents IA de créer des cartes à partir de presque n’importe quelle source. Il s’intègre directement à votre base de données Anki locale tout en vous laissant le contrôle total de la révision finale.
Vous gardez le contrôle
Il automatise l’acquisition de contenu. Il explore les sites web. Il télécharge les transcriptions YouTube. Il analyse les fichiers DOCX. Il automatise également la logistique de l’orchestration des processus et la gestion de l’état JSON.
Mais il n’automatise délibérément pas le jugement de qualité. Les agents proposent. Les humains approuvent.
J’ai remplacé les règles de validation heuristiques arbitraires par un document de 384 lignes sur les sciences cognitives. Le cadre est basé sur les principes EAT (Encoded, Atomic, Timeless). Les agents doivent lire ce document avant de générer une seule carte. L’invite mappe directement la théorie de la normalisation des bases de données à la conception des cartes flash. La première forme normale signifie l’atomicité. La troisième forme normale signifie l’absence de raccourcis contextuels.
Agent-native
Je me suis inspiré du guide Agent-Native Architecture de Every. Je voulais une parité des fonctionnalités entre l’utilisateur humain et l’IA.
Tout ce que vous pouvez faire via l’interface utilisateur, l’agent peut le faire à l’aide d’outils. Les deux utilisent exactement les mêmes primitives atomiques. Vous pouvez utiliser l’interface CLI pour ajouter, modifier ou supprimer des cartes. Par conséquent, votre agent peut également utiliser ces mêmes hooks pour gérer vos jeux de cartes, au-delà de la simple ajout de nouvelles cartes. Vous apportez vos propres sous-agents, sans clé API ni coût d’utilisation supplémentaire par rapport à ce que vous avez déjà.
Pas de frameworks lourds
Je voulais une pile minimale. Il n’y a pas de LangChain. Il n’y a pas de LlamaIndex. Le gros du travail est effectué à l’aide de bibliothèques ennuyeuses et bien connues telles que requests, click et pydantic.
L’ensemble du cycle de vie du processus est géré par environ 60 lignes de Python appelant des commandes tmux. Vous n’avez pas besoin de Docker. Vous n’avez pas besoin de systemd.
Lorsque vous exécutez anki-api up, cela génère simplement une session tmux détachée avec votre backend FastAPI en haut et votre serveur de développement Vite en bas.
L’interface utilisateur Web et MathJax
À l’origine, j’ai conçu cela uniquement pour le terminal. Plus tard, j’ai testé la génération d’interface utilisateur d’Anthropic pour prototyper une interface web. Le résultat était une interface React étonnamment épurée, que j’ai donc intégrée de manière permanente au projet.
Vous pouvez déclencher un pipeline complet à l’aide d’une seule commande en passant des URL ou des chemins d’accès à des fichiers locaux :
anki-api flow [https://example.com/article]
Cela vérifie si Anki est en cours d’exécution, lance un agent Claude, démarre la pile web via tmux et ouvre votre navigateur. Si vous transmettez une URL YouTube, il récupérera automatiquement la transcription et la générera à partir de celle-ci.
L’interface utilisateur web diffuse le processus de réflexion de l’agent en temps réel via WebSockets. Vous pouvez observer l’agent réfléchir, analyser et raisonner selon les principes EAT. Ensuite, vous accédez à une interface de révision claire pour approuver ou ignorer les cartes rédigées.
J’ai également ajouté récemment la prise en charge de MathJax. J’étudie l’algèbre linéaire et j’avais besoin de matrices parfaitement formatées. Le formatage est parfaitement conforme aux normes Anki, de sorte que l’interface web affiche exactement à quoi ressembleront vos équations dans l’application de bureau.
L’exécuter vous-même
Si vous utilisez Anki Desktop avec le plugin AnkiConnect, vous pouvez l’essayer dès maintenant. Le code est entièrement open source.
Vous aurez besoin de Python 3.11+ et d’uv installés.
# Clonez le dépôt et synchronisez les dépendances
uv sync
# Générez des cartes à partir de n'importe quelle URL ou chemin de fichier et lancez l'interface de révision
uv run anki-api flow [https://youtube.com/watch?v=example]