Skip to content

Paperless-ngx + Ollama : L'IA locale pour documents privés

🎙️ Podcast : Écouter (9 min)

Vos documents méritent mieux qu'un dossier nommé Scans_2024_FINAL_v2. Paperless-ngx est depuis longtemps le standard de l'auto-hébergement de gestion documentaire, mais la version 2026 de cette stack change la donne. Vous pouvez maintenant la connecter à un LLM local pour une classification automatique, un étiquetage intelligent et une recherche qui comprend réellement le contenu de vos documents. Sans cloud. Sans frais d'API. Tout reste sur votre matériel.

Ce que vous construisez

Une stack Docker avec trois composants. Paperless-ngx pour l'ingestion de documents, l'OCR, la recherche et l'interface web. Ollama pour l'inférence de LLM locale, nous utiliserons Mistral pour la classification. Et un petit classificateur Python qui fait le pont entre les webhooks de Paperless et Ollama pour l'étiquetage automatique.

Le résultat, déposez un PDF dans un dossier ou envoyez-le par email, et il sera OCR'd, classé par IA, étiqueté et rendu searchable, le tout dans votre réseau local. C'est le workflow documentaire parfait pour l'IA locale éthique.

Les prérequis

Vous aurez besoin de Docker et Docker Compose. Au moins 8 gigas de RAM, 16 recommandés si vous faites tourner des modèles de 7 milliards ou plus. Environ 10 gigas d'espace disque pour les modèles Ollama. Et une machine qui reste allumée, un mini PC, un NAS, un vieux portable, n'importe quoi marche.

La stack Docker Compose

Le fichier docker-compose.yml définit trois services. Paperless-broker qui utilise Redis 7 pour la gestion des files d'attente. Paperless lui-même, l'image latest de Paperless-ngx, qui dépend du broker, expose le port 8000, monte les volumes pour les données, les médias et les dossiers consume et export, et configure l'OCR en anglais avec Tika activé. Et Ollama, l'image latest qui expose le port 11434 et monte le volume des données Ollama.

Quatre volumes sont définis pour la persistance des données. Redis-data, paperless-data, paperless-media et ollama-data. Lancez le tout avec docker compose up -d, puis tirez le modèle que vous utiliserez pour la classification avec docker exec -it ollama ollama pull mistral.

Le script de classification IA

C'est ici que ça devient intéressant. Paperless-ngx supporte les scripts post-consommation, du code qui s'exécute après chaque document ingéré. Nous utiliserons ce hook pour envoyer le texte extrait à Ollama et récupérer des étiquettes structurées.

Le script Python commence par définir les URLs et tokens, puis un prompt système qui demande au modèle de retourner du JSON valide avec des tags, un type de document et un correspondant. La fonction classify_document envoie le texte à Ollama et parse la réponse JSON. La fonction apply_tags crée les tags dans Paperless via l'API s'ils n'existent pas déjà.

Le wrapper shell classify.sh exporte simplement les variables d'environnement et lance le script Python. N'oubliez pas de rendre les scripts exécutables avec chmod +x.

Génération et configuration du token API

Pour que le script puisse communiquer avec Paperless, vous devez générer un token API. La commande docker exec avec manage.py shell crée un token pour le premier utilisateur et l'affiche. Ajoutez ce token à votre fichier docker-compose sous la variable PAPERLESS_API_TOKEN.

Test du pipeline

Déposez un PDF dans le dossier consume et surveillez les logs avec docker compose logs -f paperless. Vous devriez voir le document être ingéré, OCR'd, puis classé avec une sortie du type AI Classified, suivie du nom du fichier et de la classification retournée par le modèle.

Rendre le système plus intelligent

Vous pouvez swapper le modèle. Mistral fonctionne bien pour la classification, mais si vous avez la VRAM, essayez llama3:8b ou phi3 pour une meilleure précision sur les documents multilingues. Ajoutez une boucle de feedback. Quand vous corrigez manuellement un tag dans Paperless, loguez-le. Après suffisamment de corrections, vous pouvez fine-tuner votre prompt ou passer à un modèle spécialisé.

Activez l'ingestion IMAP. Paperless-ngx supporte la consommation IMAP nativement. Forwardez reçus et factures vers une adresse email dédiée, et ils atterrissent dans Paperless, classés et étiquetés, sans que vous ayez à lever le petit doigt.

Pourquoi le local compte

Chaque fois que vous uploadez un document vers un service cloud, vous faites confiance à quelqu'un d'autre pour vos déclarations d'impôts, vos dossiers médicaux et vos contrats. Faire tourner ça localement signifie que zéro donnée quitte votre réseau, même pour l'OCR. Aucuns frais mensuels, Ollama est gratuit, Paperless est gratuit. Aucune limite de taux, classez mille documents à trois heures du matin si vous voulez. Contrôle total, swappez les modèles, changez les prompts, ajoutez de la logique custom.

Le coût matériel, un mini PC d'occasion avec 16 gigas de RAM fait tourner cette stack confortablement. C'est un investissement unique de 150 à 200 dollars contre 10 à 20 dollars par mois pour une gestion documentaire cloud qui ne peut toujours pas auto-tagger vos documents.

Ce qui vient ensuite

C'est une fondation. À partir d'ici, vous pouvez ajouter la recherche sémantique avec des embeddings, faites passer le texte des documents à travers nomic-embed-text et stockez les vecteurs dans pgvector. Le support multi-langues en switchant les langues OCR et utilisant des modèles multilingues. Le scanning mobile avec des apps qui uploadent directement dans votre dossier consume via WebDAV.

La stack documentaire auto-hébergée en 2026 est franchement meilleure que la plupart des alternatives payantes. La couche IA la rend juste injuste.