Le RAG (Retrieval-Augmented Generation) est devenu la pierre angulaire des applications d'IA générative en entreprise. Mais comment fonctionne réellement la recherche derrière un RAG ? Mots-clés, sémantique, vectorielle... Ce guide complet vous explique tout ce que vous devez savoir pour faire les bons choix et configurer Azure AI Search de manière optimale.
1. Qu'est-ce qu'un RAG ?
RAG signifie Retrieval-Augmented Generation (Génération Augmentée par Récupération). C'est une architecture qui combine deux composants essentiels :
1. Retrieval (Récupération)
Un moteur de recherche qui trouve les documents ou passages pertinents dans votre base de connaissances en fonction de la question posée.
2. Generation (Génération)
Un LLM (GPT-4, GPT-4o) qui génère une réponse en s'appuyant sur les documents récupérés, garantissant des réponses sourcées et vérifiables.
💡 Pourquoi le RAG est révolutionnaire ?
Sans RAG, un LLM ne connaît que ses données d'entraînement (coupure en 2023 pour GPT-4). Avec RAG, il accède à vos documents internes, actualisés, confidentiels — tout en gardant le contrôle sur les sources citées.
🔄 Flux d'un RAG typique
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Question │ ──▶ │ Azure AI Search │ ──▶ │ Top K Documents│
│ utilisateur│ │ (Retrieval) │ │ pertinents │
└─────────────┘ └──────────────────┘ └────────┬────────┘
│
▼
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Réponse │ ◀── │ Azure OpenAI │ ◀── │ Prompt + Docs │
│ finale │ │ (Generation) │ │ contexte │
└─────────────┘ └──────────────────┘ └─────────────────┘
2. Les 3 Types de Recherche
La qualité d'un RAG dépend directement de la qualité de la phase de récupération. Voici les trois approches principales :
🔤 2.1 Recherche par Mots-Clés (Keyword Search / BM25)
La méthode classique, basée sur la correspondance exacte des termes.
Comment ça fonctionne ?
- Tokenisation : découpe le texte en mots individuels
- Index inversé : mappe chaque mot aux documents qui le contiennent
- Scoring BM25 : calcule la pertinence selon la fréquence des termes (TF-IDF amélioré)
Exemple :
Question : "procédure remboursement assurance"
→ Cherche les documents contenant exactement ces mots
✅ Avantages
- • Rapide et économique
- • Excellent pour les termes techniques exacts
- • Pas de modèle d'embedding requis
- • Résultats prévisibles et explicables
❌ Inconvénients
- • Ne comprend pas le sens
- • Échoue sur les synonymes
- • Sensible aux fautes d'orthographe
- • "Voiture" ≠ "automobile"
🧠 2.2 Recherche Sémantique (Semantic Search)
Comprend le sens de la requête, pas juste les mots.
Comment ça fonctionne ?
- Modèle de langue : analyse la requête avec un transformer (BERT, etc.)
- Reranking : ré-ordonne les résultats selon la compréhension sémantique
- Captions & Answers : extrait les passages les plus pertinents
Exemple :
Question : "Comment me faire rembourser ?"
→ Comprend que c'est lié aux procédures de remboursement, même sans le mot exact
✅ Avantages
- • Comprend les synonymes et paraphrases
- • Robuste aux reformulations
- • Extraction de passages précis
- • Meilleur pour le langage naturel
❌ Inconvénients
- • Coût supplémentaire (reranker)
- • Moins bon sur les codes/références exactes
- • Latence légèrement supérieure
- • Limité en langues supportées
📐 2.3 Recherche Vectorielle (Vector Search)
Transforme textes et requêtes en vecteurs mathématiques pour mesurer leur similarité.
Comment ça fonctionne ?
- Embedding : convertit chaque document en vecteur (ex: 1536 dimensions avec text-embedding-3-large)
- Index vectoriel : stocke les vecteurs dans un index HNSW optimisé
- Similarité cosinus : mesure la proximité entre le vecteur requête et les vecteurs documents
Exemple simplifié :
"Chat" → [0.2, 0.8, 0.1, ...] (vecteur 1536D)
"Félin" → [0.19, 0.82, 0.09, ...] ← très proche !
"Voiture" → [0.9, 0.1, 0.7, ...] ← très différent
✅ Avantages
- • Capture le sens profond
- • Multilingue (même vecteur pour traductions)
- • Recherche cross-modale possible
- • Excellent pour le RAG
❌ Inconvénients
- • Coût d'embedding (API calls)
- • Stockage plus important
- • Peut "halluciner" des similarités
- • Termes exacts parfois manqués
3. Comparatif : Quand Utiliser Quoi ?
| Critère | Mots-Clés | Sémantique | Vectorielle |
|---|---|---|---|
| Termes exacts (codes, IDs) | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| Synonymes / Paraphrases | ⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Questions en langage naturel | ⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Coût | 💰 | 💰💰 | 💰💰💰 |
| Latence | ⚡ ~10ms | ⚡ ~50ms | ⚡ ~30ms |
| Multilingue | ❌ | Limité | ✅ |
🎯 Recommandations par cas d'usage
- 📋 Documentation technique (codes, références) → Mots-clés + Vectorielle
- 💬 FAQ / Support client → Sémantique + Vectorielle (Hybrid)
- 📚 Base de connaissances générale → Recherche Hybride complète
- 🌍 Contenu multilingue → Vectorielle obligatoire
- 💰 Budget serré → Mots-clés seuls avec bons synonymes
4. La Recherche Hybride : Le Meilleur des Deux Mondes
La recherche hybride combine mots-clés et vectorielle, puis fusionne les résultats avec un algorithme appelé Reciprocal Rank Fusion (RRF).
🔀 Comment fonctionne RRF ?
Score_RRF(doc) = Σ 1 / (k + rank_i(doc))
Où:
- k = constante (généralement 60)
- rank_i = position du document dans la liste de résultats i
Un document bien classé dans les deux types de recherche obtiendra un score RRF élevé, combinant le meilleur des deux approches.
Keyword Results
Doc A: #1, Doc B: #3, Doc C: #2
Vector Results
Doc B: #1, Doc A: #2, Doc D: #3
Hybrid (RRF)
Doc A: #1, Doc B: #2, Doc C: #3
5. Configurer Azure AI Search pour un RAG Optimal
📋 5.1 Créer l'Index avec Champs Vectoriels
{
"name": "documents-index",
"fields": [
{"name": "id", "type": "Edm.String", "key": true},
{"name": "content", "type": "Edm.String", "searchable": true, "analyzer": "fr.microsoft"},
{"name": "title", "type": "Edm.String", "searchable": true, "analyzer": "fr.microsoft"},
{
"name": "contentVector",
"type": "Collection(Edm.Single)",
"searchable": true,
"dimensions": 1536,
"vectorSearchProfile": "myHnswProfile"
}
],
"vectorSearch": {
"algorithms": [
{
"name": "myHnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"profiles": [
{
"name": "myHnswProfile",
"algorithm": "myHnsw"
}
]
},
"semantic": {
"configurations": [
{
"name": "my-semantic-config",
"prioritizedFields": {
"titleField": {"fieldName": "title"},
"contentFields": [{"fieldName": "content"}]
}
}
]
}
}
🔍 5.2 Requête Hybride avec Semantic Reranking
from azure.search.documents import SearchClient
from azure.search.documents.models import VectorizedQuery
# Configuration
search_client = SearchClient(
endpoint="https://your-search.search.windows.net",
index_name="documents-index",
credential=AzureKeyCredential(api_key)
)
# Embedding de la question
query_vector = get_embedding("Comment fonctionne le remboursement ?")
# Recherche Hybride + Semantic
results = search_client.search(
search_text="remboursement procédure", # Keyword search
vector_queries=[
VectorizedQuery(
vector=query_vector,
k_nearest_neighbors=50,
fields="contentVector"
)
],
query_type="semantic",
semantic_configuration_name="my-semantic-config",
query_caption="extractive",
query_answer="extractive",
top=10
)
for result in results:
print(f"Score: {result['@search.score']}")
print(f"Reranker Score: {result['@search.reranker_score']}")
print(f"Title: {result['title']}")
print(f"Captions: {result['@search.captions']}")
⚙️ 5.3 Paramètres Clés à Ajuster
| Paramètre | Description | Recommandation |
|---|---|---|
| k_nearest_neighbors | Nombre de vecteurs similaires à récupérer | 50-100 pour hybrid, 10-20 pour vector only |
| efSearch | Qualité de recherche HNSW (plus = meilleur mais plus lent) | 400-500 pour production |
| top | Nombre de résultats finaux | 5-10 pour le contexte LLM |
| dimensions | Taille des vecteurs (dépend du modèle) | 1536 (text-embedding-3-small) ou 3072 (large) |
| analyzer | Analyseur linguistique pour keywords | fr.microsoft pour le français |
6. Bonnes Pratiques et Pièges à Éviter
✅ À FAIRE
- ✓ Chunking intelligent : découper les documents en passages de 500-1000 tokens avec chevauchement de 10-20%
- ✓ Métadonnées enrichies : ajouter titre, date, source, catégorie pour le filtrage
- ✓ Test A/B : mesurer la pertinence avec différentes configurations
- ✓ Semantic reranking : toujours activer pour améliorer la précision finale
- ✓ Caching : mettre en cache les embeddings de requêtes fréquentes
❌ À ÉVITER
- ✗ Chunks trop longs : dilue le signal sémantique, augmente le bruit
- ✗ Ignorer les keywords : la recherche vectorielle seule manque les termes exacts
- ✗ Trop de résultats : plus de 10-15 documents sature le contexte du LLM
- ✗ Embedding une seule fois : ré-indexer quand le contenu change
- ✗ Négliger les filtres : utilisez les filtres pour réduire l'espace de recherche
🚀 Prêt à Implémenter votre RAG ?
Galaxy AI accompagne les entreprises dans la conception et le déploiement de solutions RAG performantes sur Azure. De l'architecture à la mise en production, nous vous guidons à chaque étape.
Réserver une consultation gratuite