Mnemo — retrouver une information dans ses propres notes
Un moteur de recherche sémantique auto-hébergé, branché sur plusieurs milliers de notes personnelles. On pose une question en français, il renvoie les passages qui y répondent, avec leur source. Aucun appel à un service extérieur, aucun coût d’abonnement.
Le problème réel
La recherche par mots-clés échoue dès qu’on ne se souvient plus du terme exact employé. La recherche sémantique règle ça — sauf qu’en français, elle échoue sur ce qui compte le plus dans des notes personnelles : les noms propres, les sigles, les références à soi-même. C’est précisément ce que la première version faisait le plus mal.
Le protocole, avant les résultats
C’est la partie qui m’intéresse, et la seule qui rende un chiffre utilisable. Vingt requêtes de validation en français, réparties en sept catégories, chacune avec sa réponse attendue écrite à l’avance dans eval/queries.yaml. Les mesures — Hit@K et MRR, globales et par catégorie — sont produites par un script versionné, et chaque exécution laisse un rapport horodaté dans eval/results/.
Le jeu d’évaluation a été écrit avant le changement de modèle. C’est ce qui distingue une mesure d’une justification : sinon, on choisit les questions qui donnent raison à la réponse qu’on a déjà.
Résultats de l’arbitrage
Deux modèles d’embeddings comparés toutes choses égales par ailleurs,nomic-embed-text contre bge-m3 :
| Mesure | nomic-embed-text | bge-m3 |
|---|---|---|
| Hit@1 | 30 % | 90 % |
| Hit@3 | 55 % | 95 % |
| MRR | 0,434 | 0,917 |
| Score de similarité moyen | 0,703 | 0,636 |
Trois catégories passent de 0 % à 100 % : noms propres exacts, sigles, références personnelles. Exactement les cas qui échouaient.
La dernière ligne mérite qu’on s’y arrête, parce qu’elle va dans le sens inverse des autres. Le score de similarité moyen baisse pendant que le classement s’améliore massivement. Un tableau de bord qui afficherait ce score aurait donc signalé une régression au moment précis où le système devenait trois fois meilleur. C’est la raison pour laquelle je ne pilote jamais un système de recherche au score brut : il mesure la confiance du modèle, pas la justesse du résultat.
Ce que ce chiffre ne dit pas
18 / 20
90 %, c’est dix-huit requêtes sur vingt. Sur un échantillon de cette taille, l’intervalle de confiance reste large : le même système mesuré sur deux cents questions donnerait un autre chiffre, probablement plus bas.
Le corpus est le mien, les questions sont les miennes, personne d’autre ne les a validées. Sur vos documents et vos usages, il faudrait reconstruire un jeu d’évaluation — et c’est justement le premier livrable que je propose sur une mission de ce type. Ce que ce projet démontre, ce n’est pas un niveau de performance transposable : c’est qu’on peut décider sur des mesures plutôt que sur des impressions.
Comment c’est construit
Qdrant pour la base vectorielle, bge-m3 servi par Ollama pour les embeddings, FastAPI pour l’interface, un observateur de fichiers en service système qui réindexe une note modifiée en une poignée de secondes, et un serveur MCP qui expose le tout à un assistant. Python 3.11, le tout en cinq modules dans un même espace de travail.
Côté exploitation : une sonde de santé qui vérifie les quatre dépendances en parallèle et rend leur latence, des métriques Prometheus, des instantanés quotidiens de la base et un tableau de bord Grafana. Ce n’est pas de la décoration — c’est ce qui fait la différence entre une démonstration et quelque chose qui tourne sans qu’on le surveille.
Le code, les requêtes de validation et les rapports d’évaluation →
Autres projets publics
- Jarvis Local — un assistant multi-agents entièrement local : un coordinateur répartit le travail entre des agents spécialisés, sans qu’aucune donnée ne quitte la machine.
- Robot de trading — décision multi-horizons filtrée par un modèle d’apprentissage réentraîné toutes les six heures, avec comparaison systématique au modèle en place et refus de promotion en cas de régression. Plafonds d’exposition, coupe-circuit, en production continue.
Le point commun n’est pas la technologie : c’est qu’aucun des deux n’a été déclaré fini sans une mesure pour le prouver.