
Comment fonctionne un bot RAG moderne
Un bon pipeline RAG, c’est bien plus que « mettre des documents dans une base de données vectorielle ». Le flux de base ressemble à ceci :
L’étape de re-ranking est l’amélioration qui rend ce système bien plus utile qu’une simple démo RAG. La recherche vectorielle est rapide et efficace pour trouver des passages sémantiquement similaires, mais elle peut encore retourner des passages qui sont adjacents au sujet plutôt que directement utiles. Un cross-encoder lit ensemble la question et chaque passage candidat, puis évalue à quel point ce passage répond réellement à la question.
Installation des dépendances
Nous utiliserons le SDK Python OpenAI car Venice expose une API compatible avec OpenAI. Nous utiliserons également le client Python de Qdrant avec le support de FastEmbed :requirements.txt avec les mêmes paquets :
Choix des modèles
Créez un fichier nommérag_bot.py, puis commencez par ajouter les imports, les structures de données, l’URL de l’API et les noms de modèles :
base_url et la clé API.
Vous pouvez lister les modèles Venice disponibles avec :
Création des clients Venice et Qdrant
Créez un seul client Venice compatible OpenAI pour les embeddings et les chat completions :
Pour un bot privé local, commencez avec un chemin Qdrant local sur disque :
Chargement et découpage des documents
Pour ce tutoriel, nous laisserons le bot ingérer des fichiers ou dossiers locaux. Commencez par les fichiers.md, .rst et .txt :
1000 caractères avec un chevauchement de 150 caractères constitue un bon point de départ pour des documents mixtes Markdown et texte. Des passages plus petits peuvent améliorer la précision. Des passages plus grands peuvent préserver davantage de contexte. Le bon paramétrage dépendra souvent du type de documents que vous stockez.
Embedding des documents avec Venice
Une fois que nous avons des passages, nous les encodons par lots :Stockage des vecteurs dans Qdrant
Avant d’insérer des points, créez une collection Qdrant avec la bonne taille de vecteur. Le plus simple pour connaître la taille du vecteur est d’encoder le premier lot, puis d’utiliserlen(embeddings[0]).
source, chunk_index et du contenu. Cela rend l’ingestion répétée idempotente pour les passages inchangés.
Récupération des passages candidats
Au moment de la question, le bot encode la question de l’utilisateur et demande à Qdrant les meilleures correspondances vectorielles :limit ici représente le nombre de candidats. Il devrait généralement être plus élevé que le nombre de passages que vous prévoyez d’envoyer au modèle, car l’étape suivante les re-classera. Une bonne valeur par défaut est de récupérer 8 candidats et d’envoyer les 4 meilleurs au modèle de chat.
Re-ranking avec FastEmbed
Nous ajoutons maintenant la partie qui rend la récupération bien plus intelligente.- Récupérer un ensemble de candidats plus large via la recherche vectorielle.
- Re-classer uniquement ces candidats localement.
- Envoyer les quelques meilleurs passages au modèle de langage.
candidate_k=8 et top_k=4. Augmentez candidate_k si la bonne source est souvent proche mais n’arrive pas dans le contexte final.
Réponse avec les chat completions Venice
Une fois le contexte sélectionné, formatez-le avec des numéros de source :Exécution du bot
Une fois que vous avez assemblé les pièces dans un script, sauvegardez-le sous le nomrag_bot.py. Une première exécution simple peut utiliser quelques documents d’exemple intégrés afin de vérifier le pipeline avant d’ingérer vos propres fichiers :
Options CLI utiles
Exposez les principaux paramètres de récupération comme options CLI afin de pouvoir ajuster le bot sans éditer le code :
Pour un développement local répété, un flux courant est :
Notes sur la confidentialité
Pour une configuration RAG privée, pensez à chaque couche séparément :
Le mode le plus privé par défaut pour ce tutoriel est Venice pour l’inférence, Qdrant local sur disque et re-ranking FastEmbed local. Cela vous donne un bot RAG pratique sans envoyer les payloads de votre base de données vectorielle à un magasin de vecteurs tiers.
Erreurs courantes à anticiper
Si vous changez de modèle d’embedding, recréez la collection Qdrant. Différents modèles d’embedding peuvent produire des vecteurs de dimensions différentes, et les collections Qdrant attendent une taille de vecteur fixe.
Pour aller plus loin
Une fois la base en place, les améliorations à plus fort impact sont généralement :- Ajouter des chargeurs spécifiques pour PDF, HTML, tickets ou pages de wiki internes.
- Stocker des métadonnées plus riches comme les titres, les en-têtes, les dates, les propriétaires et les URL.
- Ajuster
candidate_k,top_k, la taille des passages et le chevauchement sur de vraies questions. - Ajouter des questions d’évaluation afin de pouvoir mesurer la qualité de la récupération avant et après les changements.
- Streamer la chat completion finale de Venice pour une meilleure expérience de chat interactif.