Projets

Des projets personnels, pas des missions client — je n’en ai pas encore à montrer. Ce que je peux montrer, c’est du code public, des protocoles d’évaluation et des chiffres que vous pouvez rejouer.

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 :

Mesurenomic-embed-textbge-m3
Hit@130 %90 %
Hit@355 %95 %
MRR0,4340,917
Score de similarité moyen0,7030,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

Architecture de MnemoDeux chaînes convergent vers une même base vectorielle. En haut, l’indexation : les notes Markdown sont surveillées par un observateur de fichiers, converties en vecteurs par le modèle bge-m3, puis stockées dans Qdrant. En bas, l’interrogation : une question passe par l’API, qui lance une recherche dans Qdrant et renvoie les passages trouvés avec leur source.
Deux chaînes, une seule base. Indexer et chercher sont indépendants : une note modifiée est réindexée en quelques secondes sans interrompre les recherches en cours. La recherche renvoie les passages avec le document d’où ils viennent — c’est ce qui rend une réponse vérifiable.

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.

Vous voulez ce niveau de mesure sur vos données ?

Décrivez votre situation : volume documentaire, utilisateurs visés, contraintes d’hébergement. Je vous dis si l’approche s’applique, et sinon pourquoi.