Skip to content

salim4n/quick-rag-typescript-qdrant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quick-RAG : Tutoriel sur les bases vectorielles avec Qdrant et HuggingFace

Ce projet est un tutoriel pratique pour comprendre comment stocker et interroger des données dans une base vectorielle Qdrant, en mettant l'accent sur l'importance du choix des modèles d'embedding et leurs dimensions.

🎯 Objectifs du tutoriel

  • Comprendre le fonctionnement d'une base de données vectorielle (Qdrant)
  • Apprendre à utiliser différents modèles d'embedding selon les besoins
  • Maîtriser l'importance de la dimension des vecteurs dans les collections
  • Implémenter une recherche sémantique simple avec TypeScript

🧩 Concepts clés

Bases de données vectorielles

Les bases de données vectorielles comme Qdrant permettent de stocker des données sous forme de vecteurs et d'effectuer des recherches par similarité. Contrairement aux bases de données traditionnelles qui recherchent des correspondances exactes, les bases vectorielles trouvent les éléments les plus "proches" sémantiquement.

Modèles d'embedding

Les modèles d'embedding transforment du texte en vecteurs numériques qui capturent le sens sémantique. Ce projet utilise deux modèles différents de HuggingFace :

  • sentence-transformers/bert-base-nli-mean-tokens : Génère des vecteurs de dimension 768
  • sentence-transformers/all-MiniLM-L6-v2 : Génère des vecteurs de dimension 384

Importance de la dimension des vecteurs

La dimension des vecteurs est cruciale pour plusieurs raisons :

  • Elle doit correspondre exactement à celle définie dans la collection Qdrant
  • Les dimensions plus élevées peuvent capturer plus de nuances sémantiques
  • Les dimensions plus faibles sont plus efficaces en termes de stockage et de vitesse de recherche

🛠️ Structure du projet

quick-rag/
├── src/
│   ├── index.ts         # Point d'entrée principal
│   ├── qdrantService.ts # Service pour l'interaction avec Qdrant
│   └── bot.ts           # Logique de recherche et démonstration
├── .env                 # Configuration (URL Qdrant, clés API)
├── .env.exemple         # Exemple de configuration
├── package.json         # Dépendances
└── tsconfig.json        # Configuration TypeScript

📋 Prérequis

  • Node.js (16+)
  • npm ou yarn
  • Une instance Qdrant (cloud ou locale) avec la doc Qdrant en collection
  • Accès aux modèles HuggingFace

🚀 Installation

  1. Clonez ce dépôt
  2. Installez les dépendances :
    npm install
  3. Configurez votre fichier .env en vous basant sur .env.exemple :
    QDRANT_URL="votre_url_qdrant"
    QDRANT_API_KEY="votre_clé_api"
    

💡 Fonctionnement du projet

1. Service Qdrant (qdrantService.ts)

Ce service gère l'interaction avec la base de données Qdrant :

  • Création de collections avec une dimension spécifique
  • Chargement de données depuis un fichier CSV
  • Conversion des données en vecteurs et stockage dans Qdrant
// Exemple de création d'une collection
await this.client.createCollection(this.collectionName, {
  vectors: { size: dimension, distance: "Cosine" }
});

2. Gestion des embeddings (bot.ts)

Le fichier bot.ts montre comment utiliser différents modèles d'embedding selon la collection :

// Sélection du modèle selon la collection
const embedding = await new HuggingFaceEmbedding({
  modelType: collectionName === "salim_embeddings" 
    ? "sentence-transformers/bert-base-nli-mean-tokens"  // 768 dimensions
    : "sentence-transformers/all-MiniLM-L6-v2",         // 384 dimensions
  quantized: false,
}).getTextEmbedding(query);

3. Recherche sémantique

Le projet démontre comment effectuer une recherche sémantique dans Qdrant :

  • Conversion de la requête en vecteur avec le même modèle que la collection
  • Recherche des vecteurs les plus similaires dans Qdrant
  • Affichage des résultats avec leur score de similarité

🔍 Exemple pratique

Le projet inclut deux collections d'exemple :

  • salim_embeddings : Utilise des vecteurs de 768 dimensions (BERT)
  • qdrant-doc : Utilise des vecteurs de 384 dimensions (MiniLM)

Pour chaque collection, une requête différente est utilisée pour démontrer la recherche sémantique.

🧪 Exécution du projet

npm run dev

Cette commande :

  1. Initialise la connexion à Qdrant
  2. Crée la collection si elle n'existe pas déjà
  3. Charge les données depuis le CSV (si nécessaire)
  4. Exécute une requête de démonstration
  5. Affiche les résultats au format JSON

📊 Résultats et interprétation

Les résultats montrent :

  • Le score de similarité (en pourcentage)
  • Le texte correspondant
  • Des métadonnées supplémentaires (si disponibles)

Plus le score est élevé, plus le résultat est sémantiquement proche de la requête.

🔄 Changement de collection et de modèle

Pour tester différentes configurations :

  1. Modifiez la variable collectionName dans bot.ts
  2. Le modèle d'embedding approprié sera automatiquement sélectionné
  3. Assurez-vous que la dimension correspond à celle définie dans la collection

🚧 Limitations et considérations

  • Les dimensions des vecteurs doivent correspondre exactement entre le modèle et la collection
  • Les performances de recherche dépendent de la qualité du modèle d'embedding
  • Différents modèles peuvent donner des résultats très différents pour la même requête

🔮 Extensions possibles

  • Implémenter un système RAG complet avec génération de réponses
  • Ajouter plus de modèles d'embedding pour comparaison
  • Intégrer des mécanismes de filtrage par métadonnées
  • Créer une interface utilisateur pour tester différentes requêtes

📚 Ressources supplémentaires

📝 Conclusion

Ce tutoriel vous a montré l'importance du choix des modèles d'embedding et de leurs dimensions dans le contexte des bases de données vectorielles. En comprenant ces concepts, vous pouvez construire des systèmes de recherche sémantique plus efficaces et plus précis.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published