AccueilBlogTest technique RAG : architecture, embeddings, bases vectorielles
Guide recrutement data

Test technique RAG : architecture, embeddings, bases vectorielles

Le RAG est le pattern dominant pour deployer des LLMs sur des donnees internes. En entretien, on evalue la capacite a choisir la bonne infrastructure et a optimiser la qualite du retrieval.

Data Builder·Juin 2025·7 min de lecture·Data Scientist · Data Engineer
Sommaire
  1. RAG vs fine-tuning
  2. Pipeline complet
  3. Embeddings et chunking
  4. Bases vectorielles
  5. Optimisation du retrieval
  6. Choix du LLM
  7. Grille

Le RAG (Retrieval-Augmented Generation) connecte un LLM a des donnees internes sans le reentrainer. En entretien Senior, on distingue les profils qui ont deploye un RAG en production de ceux qui en ont fait un POC.

1RAG vs fine-tuning : la question discriminante

Question discriminante

Quelle est la difference entre RAG et fine-tuning ? Dans quel cas choisissez-vous l un plutot que l autre ?

  • RAG — enrichit le prompt avec des documents pertinents. Le modele ne s entraine pas : il recoit du contexte
  • Fine-tuning — re-entraine le modele sur des donnees specifiques pour modifier son comportement. Plus couteux, moins flexible
  • Quand RAG — donnees qui changent frequemment, besoin de tracabilite, contraintes de confidentialite
  • Quand fine-tuning — style tres specifique, domaine ultra-specialise, modele embarque sans reseau

Rappel fondamental : UN RAG N APPREND PAS. Il cherche du contexte pour enrichir le prompt. Confondre RAG et fine-tuning est un NO-GO immediat.

2Pipeline RAG de bout en bout

Question discriminante

Decrivez les etapes d un pipeline RAG de la source documentaire jusqu a la reponse finale.

Pipeline OFFLINE (ingestion) : 1. Chargement docs (PDF, Word, HTML, SQL...) 2. Chunking : decoupage en morceaux 256-512 tokens 3. Embedding : conversion en vecteur numerique 4. Indexation dans la base vectorielle Pipeline ONLINE (temps reel) : 1. Question utilisateur 2. Embedding de la question 3. Recherche des k chunks les plus proches 4. Construction du prompt : question + chunks 5. Generation LLM 6. Citation des sources

3Embeddings et chunking

Question discriminante

Quelle est la taille de chunk optimale ? Comment gerez-vous le chevauchement ?

from langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50, separators=[' ', ' ', '.', ' '] ) chunks = splitter.split_documents(docs)
  • 256-512 tokens — sweet spot. Trop petit = perte contexte, trop grand = dilution pertinence
  • Chunk overlap 10-15% — evite de couper une idee entre deux chunks
  • Modeles d embedding — text-embedding-3-small (OpenAI), BGE-M3 (open source multilingue), Cohere Embed v3

4Bases vectorielles : savoir choisir

Question discriminante

Quelle base vectorielle choisissez-vous pour un RAG en production sur GCP ? Et pour un POC rapide ?

SolutionTypeIdeal pour
Vertex AI Vector SearchManagee GCPProduction GCP haute scalabilite
PineconeManagee tiersPOC rapide, SaaS
QdrantOpen source self-hostedProjets sensibles, controle total
ChromaDBOpen source localDev local, POC
pgvectorExtension PostgreSQLEquipes SQL, infra existante
  • HNSW — haute precision, memoire elevee. Defaut Qdrant et Weaviate
  • IVF-PQ — plus scalable, precision legerement reduite sur tres gros volumes
  • Similarite cosinus — metrique standard pour les embeddings de texte

5Optimisation du retrieval

Question discriminante

Comment ameliorez-vous la qualite du retrieval quand les resultats ne sont pas assez pertinents ?

  • Hybrid search — combiner recherche vectorielle (semantique) + BM25 (lexicale)
  • Re-ranking — apres retrieval, scorer avec un modele de cross-attention (Cohere Rerank, BGE Reranker)
  • Query reformulation — transformer la question en plusieurs requetes
  • Filtrage par metadata — filtrer par source, date, auteur avant la recherche vectorielle

6Choix du LLM de generation

LLMAvantagesCas d usage
GPT-4oQualite elevee, context 128k, multimodalProduction generale
Claude 3.5Context 200k, excellent documents longsAnalyse documentaire
Gemini 1.5 ProContext 1M tokensStack GCP, tres longs documents
Llama 3.1 / MistralOpen source, auto-hebergeDonnees confidentielles, on-premise
from qdrant_client import QdrantClient from qdrant_client.http.models import Distance, VectorParams import cohere # Qdrant en production + Hybrid Search client = QdrantClient("http://qdrant:6333") client.create_collection("knowledge_base", vectors_config={"dense": VectorParams(size=1536, distance=Distance.COSINE)}, sparse_vectors_config={"sparse": SparseVectorParams()} # pour hybrid search ) # Hybrid search : vectoriel (sémantique) + BM25 (lexical) results = client.query_points( collection_name="knowledge_base", prefetch=[ Prefetch(query=dense_vector, using="dense", limit=20), Prefetch(query=sparse_vector, using="sparse", limit=20), ], query=FusionQuery(fusion=Fusion.RRF), # Reciprocal Rank Fusion limit=10 ) # Re-ranking Cohere après retrieval co = cohere.Client() reranked = co.rerank( model="rerank-multilingual-v3.0", query=user_question, documents=[r.payload["text"] for r in results.points], top_n=3 ) # Évaluation avec RAGAS from ragas import evaluate from ragas.metrics import faithfulness, answer_relevancy, context_recall score = evaluate(dataset, metrics=[faithfulness, answer_relevancy, context_recall])
  • Chunking par structure — pour les documents structurés (PDF, markdown), chunker par heading plutôt que par taille fixe. Meilleure cohérence sémantique
  • Parent-child chunking — indexer de petits chunks pour la précision du retrieval, mais retourner le chunk parent (contexte plus large) au LLM
  • Metadata filtering — filtrer par date, source, auteur avant la recherche vectorielle. Réduit le bruit et améliore la précision sans changer le modèle
  • RAGAS evaluation — faithfulness (réponse ancrée dans le contexte ?), answer_relevancy (répond à la question ?), context_recall (contexte pertinent récupéré ?). Mettre en place avant la mise en prod
  • Observabilité — tracer chaque requête (query, chunks, réponse, score) avec Langfuse ou LangSmith. Détecter les gaps de connaissance et les hallucinations systématiques
  • Chunking par structure - pour les documents structures (PDF, markdown), chunker par heading plutot que par taille fixe. Meilleure coherence semantique
  • Parent-child chunking - indexer de petits chunks pour la precision du retrieval, retourner le chunk parent (contexte plus large) au LLM
  • Metadata filtering - filtrer par date, source, auteur avant la recherche vectorielle. Reduit le bruit et ameliore la precision sans changer le modele
  • RAGAS evaluation - faithfulness (reponse ancree dans le contexte ?), answer_relevancy (repond a la question ?), context_recall. Mettre en place avant la mise en prod
  • Observabilite - tracer chaque requete (query, chunks, reponse, score) avec Langfuse ou LangSmith. Detecter les gaps de connaissance et les hallucinations systematiques

7Grille par niveau

NiveauMaitriseSignal GONO-GO
JuniorComprend RAG, a fait un POC LangChainExplique pipeline offline/online, a utilise ChromaDBConfond RAG et fine-tuning
ConfirmeChunking, choix embedding, bases vecto productionJustifie la taille de chunk, a deploye sur Qdrant ou pgvectorN a utilise que ChromaDB local
SeniorHybrid search, re-ranking, evaluation RAGASA implemente re-ranking, mesure faithfulness avec RAGASN a jamais evalue la qualite de son RAG

Vous recrutez un profil GenAI ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.