PrivateGPT v2 : chatbot documents 100% privé
PrivateGPT v2 est un chatbot documents 100% privé pour discuter avec ses PDF, Word, Markdown sans qu'un seul octet ne sorte de la machine. La v2 a abandonné son moteur LLM intégré pour s'appuyer sur Ollama : on garde la qualité d'un RAG bien fait, on bénéficie de tous les modèles disponibles via Ollama, et on simplifie radicalement la stack. Ce guide couvre l'installation, la connexion à Ollama et trois cas métiers concrets (RH, juridique, comptable).
#Pourquoi PrivateGPT v2 pour un chatbot documents locaux
Le besoin est classique : pouvoir poser des questions en langage naturel à un corpus de documents internes (contrats, fiches de paie, factures, comptes-rendus) sans envoyer ces données à OpenAI, Anthropic ou Google. C'est exactement ce que vise PrivateGPT depuis la première version sortie en 2023.
La v2 du projet a tranché net : plus de moteur LLM embarqué, plus de gestion de quantization en interne. À la place, PrivateGPT v2 délègue la génération à un backend externe — Ollama dans la majorité des cas. Cela rend le projet bien plus maintenable et donne accès à toute la bibliothèque de modèles Ollama (Mistral, Llama, Qwen, Phi, etc.) sans configuration spécifique.
- 100% local
- Tout tourne sur votre machine. Aucune télémétrie, aucun appel sortant une fois les modèles téléchargés.
- UI Gradio incluse
- Une interface web s'ouvre sur localhost, prête à chatter avec vos documents — pas besoin de bricoler un front.
- API OpenAI-compatible
- Le serveur PrivateGPT expose aussi des endpoints REST proches du format OpenAI, utiles si vous voulez le brancher dans une app maison.
- Formats supportés
- PDF, DOCX, PPTX, MD, TXT, HTML, EPUB, CSV, et plusieurs autres via les loaders LlamaIndex sous-jacents.
#Prérequis
- Python 3.11
- PrivateGPT v2 ne supporte officiellement que Python 3.11. Avec 3.12+, certaines dépendances cassent encore.
- Poetry
- Le projet utilise Poetry pour gérer ses dépendances avec extras (ui, llms-ollama, embeddings-ollama, vector-stores-qdrant).
- Ollama installé et actif
- Daemon Ollama joignable sur http://localhost:11434. Si vous ne l'avez pas, installez-le d'abord — l'installateur prend 3 minutes.
- 8 Go de RAM minimum
- 16 Go confortables. Si vous chargez un modèle 7B Q4 en VRAM via Ollama, comptez 5 Go côté GPU en plus.
- GPU recommandé (optionnel)
- Un RTX 3060 12 Go ou supérieur permet d'utiliser des modèles 7B–14B avec un temps de réponse correct. Sans GPU, restez sur du 3B.
#1. Installer PrivateGPT v2
Le projet vit sur GitHub à zylon-ai/private-gpt. On clone, on installe Poetry si ce n'est pas déjà fait, puis on installe les dépendances avec les extras qui correspondent au backend choisi.
Cette commande installe quatre groupes d'extras : l'UI Gradio, le client LLM Ollama, le client d'embeddings Ollama, et Qdrant comme base vectorielle locale embarquée. L'installation prend 5 à 15 minutes selon votre connexion — il y a beaucoup de dépendances scientifiques (numpy, scipy, transformers).
#2. Configurer Ollama comme backend LLM et embeddings
PrivateGPT v2 utilise un système de profils YAML dans settings/. On active le profil ollama via la variable d'environnement PGPT_PROFILES.
Avant tout, on tire les deux modèles dont on aura besoin : un modèle de génération et un modèle d'embeddings. Pour du français, Mistral 7B est un bon défaut côté LLM, et nomic-embed-text est un excellent choix d'embeddings multilingue léger.
On vérifie ensuite le fichier settings/settings-ollama.yaml fourni dans le repo. Il doit pointer vers les bons noms de modèles et la bonne URL d'Ollama :
#3. Lancer le serveur et l'UI
- 01Vérifier qu'Ollama tourneTapez "ollama list" dans un terminal. Si la commande répond avec la liste des modèles, le daemon est actif. Sinon, lancez "ollama serve" dans un terminal séparé.
- 02Activer le profil ollamaDans le terminal où vous allez lancer PrivateGPT, exportez la variable PGPT_PROFILES=ollama. C'est ce qui dit au projet de charger settings-ollama.yaml par-dessus settings.yaml.
- 03Démarrer le serveurDepuis la racine du repo, lancez "PGPT_PROFILES=ollama make run". Le serveur démarre sur le port 8001, et Gradio ouvre l'UI sur la même adresse.
- 04Ouvrir l'UIRendez-vous sur http://localhost:8001 dans votre navigateur. Vous arrivez sur une interface chat avec un panneau latéral pour uploader des documents.
Au premier lancement, vous verrez dans les logs PrivateGPT contacter Ollama pour vérifier que les modèles déclarés sont disponibles. S'il manque un modèle, le serveur s'arrête avec un message explicite — tirez le modèle manquant avec ollama pull, puis relancez.
#4. Indexer ses documents
L'UI Gradio propose un onglet "Ingest" où l'on glisse-dépose ses fichiers. En coulisses, PrivateGPT découpe chaque document en chunks (par défaut ~1024 tokens avec un overlap de 200), calcule les embeddings via Ollama, et stocke le tout dans Qdrant.
- Texte extrait via pypdf. Les PDF scannés (image-only) ne sont pas OCRisés — passez par un outil comme ocrmypdf avant l'ingestion.
- DOCX / PPTX
- Pris en charge nativement par les loaders LlamaIndex. Tableaux et listes sont préservés en texte brut.
- Markdown / TXT / HTML
- Indexation immédiate, c'est le format qui marche le mieux pour le RAG en pratique.
- CSV
- Chaque ligne devient un chunk. Utile pour des bases de FAQ ou des extracts métier.
#Cas d'usage métiers concrets
#RH : interroger les fiches de paie et conventions collectives
Cas typique : un service RH avec 200 fiches de paie mensuelles archivées en PDF, plus la convention collective de la branche (souvent 100+ pages). PrivateGPT v2 permet à un collaborateur RH de poser des questions du type "Quel est le coefficient de Mme Dupont en 2025 ?" ou "Que dit la convention collective sur les jours pour enfant malade ?".
- Modèle recommandé
- Mistral 7B Q4 suffit pour de l'extraction factuelle. Pour de l'interprétation juridique de la convention, montez à Qwen2.5 14B ou Mistral Small 24B si la VRAM suit.
- Découpe
- Pour les fiches de paie (1 page), un chunk = un document. Pour la convention, le chunking par section (titre H2/H3) marche mieux que le chunking par tokens.
- Confidentialité
- C'est précisément le cas où PrivateGPT v2 fait la différence : les fiches de paie ne devraient jamais transiter par un service cloud, y compris en mode "entreprise".
#Juridique : analyser un portefeuille de contrats
Cas typique : un service juridique avec quelques centaines de contrats clients/fournisseurs en PDF, parfois scannés. Les questions courantes : "Quels contrats expirent dans les 6 prochains mois ?", "Quelle clause de résiliation s'applique au contrat ACME ?", "Lesquels contiennent une clause d'exclusivité ?".
- Pré-traitement
- Lancez ocrmypdf sur les scans avant ingestion. Sans OCR, ces PDF sont invisibles pour le retrieval.
- Modèle recommandé
- Mistral Small 24B ou Qwen2.5 14B Q4 pour la qualité de raisonnement juridique en français. Llama 3.1 8B suffit pour de la recherche pure.
- Prompt système
- Définissez un system prompt qui contraint à citer le nom du contrat et le numéro de clause à chaque réponse — sinon le modèle a tendance à synthétiser sans sourcer.
#Comptable : interroger un dossier de factures et de relevés
Cas typique : un cabinet comptable qui veut interroger un corpus de factures fournisseurs et de relevés bancaires d'un client (PDF + CSV). Questions visées : "Quel est le total des factures Free Mobile en 2025 ?", "Y a-t-il une facture impayée chez le fournisseur X ?".
- Limite à connaître
- Le RAG n'agrège pas naturellement : il retrouve les passages pertinents mais ne fait pas la somme parfaitement sur de gros volumes. Pour de l'analytique stricte, exportez le CSV des factures dans un outil dédié et utilisez PrivateGPT pour le contexte qualitatif.
- Format à privilégier
- Les CSV de comptabilité s'indexent ligne par ligne — c'est bien pour la recherche unitaire, mauvais pour les calculs. Joignez un PDF de synthèse par mois si vous voulez que le LLM ait une vue d'ensemble.
- Modèle
- Qwen2.5 14B est très solide sur les chiffres et la lecture de tableaux comparé à un Mistral 7B. Si vous avez un RTX 4070 ou plus, c'est le choix par défaut ici.
#Dépannage courant
- "Connection refused" au démarrage
- Le daemon Ollama n'est pas lancé. Vérifiez avec "curl http://localhost:11434" — vous devez voir "Ollama is running".
- Réponses très lentes
- Soit Ollama tourne sur CPU (vérifiez avec "ollama ps" — colonne PROCESSOR), soit votre context_window est trop élevée. Réduisez à 4096 pour tester.
- "Model not found"
- Le nom du modèle dans settings-ollama.yaml doit correspondre exactement à un modèle listé par "ollama list". Attention aux tags de quantization : mistral:7b ≠ mistral:7b-instruct-v0.3-q4_K_M.
- Embeddings différents entre ingestion et requête
- Si vous changez de modèle d'embeddings après une ingestion, vous devez ré-indexer. Supprimez local_data/private_gpt/qdrant/ et relancez l'ingestion.
- UI Gradio inaccessible
- Si vous êtes sur une machine distante, lancez avec "PGPT_PROFILES=ollama python -m private_gpt" et reconfigurez l'host dans settings.yaml (server.host: 0.0.0.0).
#Pour aller plus loin
PrivateGPT v2 est un excellent point d'entrée pour du RAG documentaire local, mais ce n'est qu'une brique. Quelques pistes pour aller plus loin :
- RAG sans coder avec Open WebUI ou AnythingLLM
- Si PrivateGPT vous semble lourd à installer (Poetry, Python 3.11), Open WebUI propose une expérience RAG comparable, plus simple à déployer en Docker.
- Embeddings français performants
- nomic-embed-text fait le job, mais des modèles spécialisés FR comme Solon ou BGE-M3 donnent de meilleurs résultats sur du contenu juridique ou administratif français.
- Stratégies de chunking avancées
- Le chunking par section (markdown headers, structure DOCX) bat largement le chunking par tokens fixes sur les corpus structurés — un gain de pertinence facile à obtenir.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.