Tous les projets
Étude de cas · 03

IA · Data · Recherche multimodale

SmartSearch / MAYbe Here

SmartSearch est un moteur de recherche contextuel multimodal, projet académique réalisé en binôme, conçu pour ingérer et interroger des données hétérogènes — images, documents, données structurées — à partir d’une requête textuelle ou visuelle.

Statut
Projet académique réalisé en binôme
Mon rôle
Travail en binôme sur l’architecture, l’ingestion multimodale, l’indexation vectorielle, la stratégie de recherche et les tests de charge.
Stack
Python · LanceDB · Apache Arrow · CLIP · Mistral · Ollama · FastAPI · Streamlit · Docker
03

Rechercher dans plus de 20 Go de données hétérogènes

01

Contexte

Retrouver une information pertinente dans des images, tableaux, PDF et textes demande davantage qu’un index par mots-clés. Le projet, initialement pensé comme le socle technique d’une expérience mobile appelée MAYbe Here, a progressivement été recentré sur le moteur de recherche lui-même — un pipeline capable de croiser plusieurs formes d’information à partir d’une requête textuelle ou visuelle.

Logo de MAYbe Here : les initiales « Mb?H » stylisées avec un point d’interrogation et un repère de localisation, suivies du nom complet « MAYbe Here ».
Identité initiale de MAYbe Here, avant le recentrage sur le moteur SmartSearch.

02

Architecture multimodale

Le pipeline s’organise en modules indépendants, de l’ingestion des sources jusqu’à la restitution des résultats.

FastAPIStreamlit
  • Ingestion et normalisation de sources hétérogènes
  • Stockage persistant dans un Vector Lakehouse
  • Embeddings visuels et textuels
  • Arbitrage sémantique local
  • Recherche hybride multi-passes et scoring de confiance
  • API de recherche et interface de démonstration

03

Vector Lakehouse

Le stockage repose sur LanceDB et Apache Arrow afin d’unifier vecteurs, métadonnées et données structurées dans une même base persistante. Ce choix remplace une première approche fondée sur des index vectoriels chargés en mémoire, trop dépendante de la RAM pour des volumes importants. Images et textes sont projetés dans un espace vectoriel commun avec CLIP, ce qui permet une recherche par similarité visuelle, textuelle ou combinée.

LanceDBApache ArrowCLIP
Interface SmartSearch Explorer affichant le catalogue multimodal indexé dans LanceDB, avec plus de 3,3 millions de vecteurs et un filtre SQL.
Catalogue multimodal du Vector Lakehouse : vecteurs, métadonnées et scores de confiance interrogeables en SQL.

04

Ingestion multimodale

Le moteur accepte plusieurs types de sources — dossiers d’images, CSV et données structurées, PDF et texte brut. Un scanning hiérarchique détecte les changements et limite la ré-indexation aux éléments réellement modifiés ; le traitement est réalisé en streaming et par lots pour maîtriser l’usage mémoire sur des corpus volumineux.

  • Détection des changements et ré-indexation incrémentale
  • Traitement en streaming et par lots
  • Contrat de confiance et domaine assigné par dossier ingéré
Terminal affichant l’exécution du pipeline d’ingestion en conteneur Docker : vérification de l’environnement, détection de LanceDB et d’Ollama, scan des jeux de données et arbitrage LLM pour le mapping des colonnes.
Interface listant les contrats de confiance par dossier ingéré, avec domaine assigné et score de confiance initial.
Un contrat de confiance est établi par dossier ingéré, avec un domaine assigné et un score de confiance initial.

05

IA locale et sobriété

Le LLM n’est pas appliqué systématiquement à chaque donnée. Mistral, exécuté localement via Ollama, intervient comme arbitre lorsque la structure ou la sémantique d’une source ne peut pas être déterminée de façon fiable par des règles simples. Pour les données structurées, le moteur analyse un échantillon afin de déterminer un plan de mapping, puis l’applique de manière déterministe au reste du fichier — une séparation qui réserve l’inférence générative aux étapes où elle apporte réellement de la valeur.

MistralOllama

06

Recherche multimodale

Une requête peut être analysée selon sa similarité visuelle, sa proximité sémantique entre image et texte, et son domaine ou intention estimée. Les résultats de ces différentes passes sont ensuite fusionnés, dédupliqués et classés à l’aide d’un score de confiance — une approche qui permet de traiter des requêtes visuelles ambiguës sans reposer sur une seule mesure de similarité.

Réponse de l’API de recherche à une requête par image : résultats classés avec domaine, label, score de confiance et détail des scores visuel, textuel et intention.
Résultat d’une recherche par image, avec score de confiance et détail des passes visuelle, textuelle et intention.

07

Robustesse

Plusieurs mécanismes permettent au moteur de fonctionner au-delà d’un simple notebook de démonstration.

Docker
  • Surveillance de l’utilisation mémoire et traitement par lots adaptatif
  • Mise en pause automatique si les ressources deviennent trop contraintes
  • Reprise des écritures en cas de verrouillage temporaire
  • Validation de l’environnement avant le lancement du pipeline
  • Déploiement conteneurisé reproductible

08

Validation

Le moteur a été évalué avec des scénarios d’ingestion massive et des tests de recherche, sur des jeux de données représentant plus de 20 Go de données hétérogènes et environ 100 000 images, complétés par des fichiers structurés et documentaires. Les essais ont couvert des environnements CPU et GPU.

  • Consommation RAM / VRAM
  • Temps d’ingestion et reprise d’un corpus déjà indexé sans retraitement complet
  • Latence de recherche et pertinence des résultats
  • Robustesse sur des requêtes absentes des jeux de données d’indexation

09

Chaîne de bout en bout

SmartSearch relie ingestion multimodale, stockage vectoriel, vision, traitement sémantique local, recherche hybride et restitution dans une même chaîne. Le projet se concentre moins sur l’interface finale que sur le socle technique permettant de transformer des données hétérogènes en résultats contextualisés, traçables et interrogeables localement.

Projet suivant

Université de Florence