Outil de recherche rapide dans des archives locales de messages Thunderbird. Le projet vise à fournir une interface capable de retrouver des courriels à partir de requêtes par mots-clés classiques ou d'une recherche sémantique plus avancée, tout en conservant le maximum de traitements en local.
- Réactivité : offrir un temps de réponse minimal pour la recherche dans de grands volumes de messages archivés.
- Respect de la confidentialité : limiter les échanges vers l'extérieur et garder les données sur la machine locale.
- Recherche hybride : combiner des recherches lexicales traditionnelles et des techniques d'analyse sémantique.
- Le fonctionnement doit rester majoritairement hors ligne.
- Les appels à des services LLM externes doivent être réduits au strict nécessaire.
- Compatible avec des archives Thunderbird stockées localement.
Le dépôt contient désormais un premier prototype 100% local permettant :
- Indexation d'un fichier
mboxThunderbird vers une base SQLite embarquée avec un index FTS5. - Génération d'embeddings locaux (hashing déterministe par défaut, modèles
sentence-transformersoptionnels) pour une recherche sémantique. - Recherche plein texte via un moteur simple qui retourne des extraits contextualisés.
- Consultation du contenu complet d'un message précédemment indexé.
Le projet n'a pas de dépendances obligatoires au-delà de Python 3.11+. Pour activer des modèles d'embeddings plus riches, installez en option sentence-transformers et placez le modèle choisi sur la machine (mode offline supporté).
python -m mail_search index --db path/vers/index.db path/vers/archive.mboxOptions utiles :
--no-embeddings: désactive la génération d'embeddings (index lexical seul).--embedding-backend hash:512: force un backend spécifique (hash:<dimension>ou nom de modèlesentence-transformers).
python -m mail_search search --db path/vers/index.db "search"Options :
--mode semantic: interroge uniquement l'index vectoriel (similitude cosinus).--mode hybrid: combine les scores lexicaux (BM25) et vectoriels.--embedding-backend: choisit le backend à utiliser lors de la requête sémantique.
python -m mail_search show --db path/vers/index.db "<message-id>"- Indexation locale
- Le prototype actuel repose sur SQLite + FTS5 via le module
mail_search.database. Les métadonnées et le corps des messages sont stockés dans des tables classiques et l'index plein texte est maintenu automatiquement lors de l'ingestion. - L'ingestion (
mail_search.indexer.MailIndexer) lit aujourd'hui les archives Thunderbird au formatmbox. Le support demaildirreste une piste d'évolution prioritaire.
- Le prototype actuel repose sur SQLite + FTS5 via le module
- Recherche sémantique
- Les embeddings sont générés localement : par défaut le projet tente de charger
sentence-transformers/all-MiniLM-L6-v2, puis rétrograde vers un backend de hachage déterministe (mail_search.semantic.HashEmbeddingBackend). - Les vecteurs sont conservés dans la table
message_vectorsde SQLite et la similarité cosinus est calculée en Python (mail_search.database.MailDatabase.semantic_search). Une migration vers un moteur vectoriel spécialisé (ex.faiss,qdrant) pourra être étudiée si les jeux de données deviennent volumineux. - Aucun appel LLM externe n'est effectué tant qu'un backend local est disponible, ce qui garantit un fonctionnement hors ligne.
- Les embeddings sont générés localement : par défaut le projet tente de charger
- Interface utilisateur
- L'interface CLI (
mail_search.cli) couvre les besoins de base : indexation (index), recherche (searchen modes lexical, sémantique ou hybride) et affichage (show). - Une interface web légère (ex.
FastAPI+SvelteouReact) pourra compléter la CLI si une interaction plus riche devient nécessaire.
- L'interface CLI (
- Analyse des archives : identifier la structure des dossiers Thunderbird à traiter.
- Ingestion & indexation : parser les messages et alimenter l'index lexical + vectoriel.
- Moteur de recherche : implémenter les requêtes combinant mots-clés et similarité sémantique.
- Interface : fournir un MVP CLI permettant de lancer des requêtes et d'afficher les résultats.
- Optimisation : surveiller la latence, la consommation mémoire et la précision des résultats.
flowchart TD
subgraph Source
A["Archives Thunderbird<br/>(mbox/maildir)"]
end
subgraph Ingestion
B[Parser & normalisation]
C["Indexation SQLite FTS5"]
D["Génération d'embeddings"]
end
subgraph Stockage
E["Base SQLite<br/>+ index FTS5"]
F["Stockage vectoriel<br/>local"]
end
subgraph Recherche
G[Requête utilisateur]
H[Moteur plein texte]
I[Recherche sémantique]
J[Combinaison des scores]
end
subgraph Restitution
K[Résultats contextualisés]
L[Affichage du message complet]
end
A --> B
B --> C
B --> D
C --> E
D --> F
G --> H
G --> I
H --> J
I --> J
J --> K
K --> L
E -. données -.-> H
F -. embeddings -.-> I
- Thunderbird: Exporting emails pour obtenir les fichiers d'archives.
- Sentence Transformers pour les modèles d'embeddings.
- FAISS ou Qdrant pour la recherche vectorielle.
À définir selon les besoins du projet.