Sites Web11 min de lecture

RAG production patterns : architecture LLM avec données privées 2026

Mohamed Bah·Fondateur, Kolonell
31 mai 2026
Partager :
RAG production patterns : architecture LLM avec données privées 2026

RAG production patterns : architecture LLM avec données privées 2026

Sites Web

RAG (Retrieval-Augmented Generation) = pattern dominant 2024-2026 pour combiner LLM (GPT-4, Claude, Llama) avec données privées (docs, KB, base produit). MVPs RAG simples partout, mais RAG production = différent. Voici patterns architecture qui marchent vraiment 2026.

TL;DR

- Chunking intelligent > chunking naïf 500 tokens.

- Hybrid search (vector + keyword BM25) > vector seul.

- Re-ranking essentiel (Cohere, Voyage, Cross-encoder).

- Citations + source attribution non négociable.

- Multi-step RAG (decompose, route, synthesize) pour requêtes complexes.

Architecture RAG production 2026

`

  • Ingestion pipeline :

Docs sources → parser → chunker → embedder → vector DB

  • Query pipeline :

User query → query rewriter → hybrid search → re-ranker

→ context assembly → LLM → citation

`

Pattern 1 — Chunking intelligent

Chunking naïf (à éviter)

`python

chunks = split_every_500_tokens(document) # ❌ MVP, pas production

`

Problèmes :

  • Coupures milieu phrases / sections
  • Perte contexte structurel (titres → paragraphes)
  • Embeddings dégradés

Chunking sémantique production

`python

def smart_chunk(doc):

# 1. Préserver structure

sections = parse_markdown(doc) # ou XML, HTML

chunks = []

for section in sections:

# 2. Chunks par section, max 800 tokens

if token_count(section) <= 800:

chunks.append({

'text': section.text,

'metadata': {

'title': section.title,

'level': section.level,

'parent_titles': section.parents

}

})

else:

# 3. Sous-chunks avec overlap 100 tokens

sub = split_with_overlap(section, max=800, overlap=100)

chunks.extend(sub)

# 4. Enrichir chaque chunk avec contexte parent

for chunk in chunks:

chunk['contextualized'] = (

f"Document: {doc.title}\n"

f"Section: {' > '.join(chunk['metadata']['parent_titles'])}\n\n"

f"{chunk['text']}"

)

return chunks

`

Pattern 2 — Hybrid Search (vector + BM25)

Vector seul rate les requêtes avec termes exacts (codes produits, IDs). BM25 seul rate sémantique. Combiner :

`python

def hybrid_search(query, k=20):

# 1. Vector search (sémantique)

query_embedding = embed(query)

vector_results = vector_db.search(query_embedding, k=k)

# 2. Keyword search (BM25)

keyword_results = bm25_index.search(query, k=k)

# 3. Reciprocal Rank Fusion (RRF)

fused = {}

for rank, doc in enumerate(vector_results):

fused[doc.id] = fused.get(doc.id, 0) + 1 / (60 + rank)

for rank, doc in enumerate(keyword_results):

fused[doc.id] = fused.get(doc.id, 0) + 1 / (60 + rank)

# 4. Top k par score fusionné

return sorted(fused.items(), key=lambda x: -x[1])[:k]

`

Pattern 3 — Re-ranking obligatoire

Hybrid search retrieve top 20-50 candidats. Re-ranker (cross-encoder) re-trie par pertinence vraie.

`python

import cohere

co = cohere.Client(api_key=...)

def rerank(query, candidates, top_n=5):

docs = [c.text for c in candidates]

response = co.rerank(

model='rerank-english-v3.0', # ou 'rerank-multilingual-v3.0'

query=query,

documents=docs,

top_n=top_n

)

return [candidates[r.index] for r in response.results]

`

Re-rankers populaires 2026 :

Besoin d'un site web professionnel ?

Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.

  • Cohere Rerank : managed, multilingual, fast
  • Voyage rerank-2 : excellent qualité
  • BGE Reranker : open source, à self-host
  • OpenAI text-embedding-3-large : usable mais slower

Re-ranking coût ~$1-3 / 1000 queries Cohere. ROI massif sur qualité.

Pattern 4 — Multi-step RAG (Decompose-then-Recombine)

Pour requêtes complexes, single-shot RAG fail. Décomposer :

`python

def multi_step_rag(query):

# Step 1 : Décomposer en sous-questions

subquestions = llm_decompose(query)

# Ex: "Compare Stripe vs PayPal pour SaaS Africa"

# → ["Quel est le pricing Stripe?", "Quel est pricing PayPal?",

# "Couverture Stripe Africa?", "Couverture PayPal Africa?"]

# Step 2 : RAG indépendant chaque

contexts = []

for sq in subquestions:

ctx = rag_retrieve(sq)

contexts.append((sq, ctx))

# Step 3 : Synthèse finale avec tous contexts

response = llm_synthesize(query, contexts)

return response

`

Augmente latence (3-5x) mais qualité spectaculaire pour comparatifs / analyses.

Pattern 5 — Citations + source attribution

Pas de RAG production sans citations. Confiance = vérifiabilité.

`python

def generate_with_citations(query, contexts):

prompt = f"""

Réponds à la question en utilisant uniquement les sources.

Pour chaque affirmation, cite la source [1], [2], etc.

Sources :

{format_sources(contexts)}

Question : {query}

Réponse (avec citations) :

"""

response = llm.complete(prompt)

return parse_citations(response, contexts)

`

UI doit afficher citations cliquables vers source.

Pattern 6 — Caching intelligent

`python

import hashlib

class RAGCache:

def cache_key(self, query):

# Normaliser : lowercase, strip, hash

return hashlib.md5(query.lower().strip().encode()).hexdigest()

def get(self, query):

# Semantic cache : embeddings similar > 0.95 → cache hit

query_emb = embed(query)

for cached_emb, response in self.cache:

if cosine(query_emb, cached_emb) > 0.95:

return response

return None

`

Économise 30-50 % API calls en production.

Vector DBs 2026 comparées

Vector DBBest forPricing
PineconeManaged, enterprise$70+/mo starter
QdrantSelf-host, OSSFree + cloud $25+
WeaviateHybrid (vector + filter)OSS + cloud
Postgres + pgvectorCombine relational$0 (déjà DB)
MongoDB Atlas VectorAlready MongoDB$0 (déjà DB)
ChromaDev/prototypeOSS
Milvus / ZillizHigh scaleCloud $50+

Pour startup avec MongoDB déjà : Atlas Vector Search = no-brainer.

Embeddings 2026 leaders

  • OpenAI text-embedding-3-large : excellent, $0.13/1M tokens
  • OpenAI text-embedding-3-small : bon rapport, $0.02/1M
  • Voyage voyage-3 : très bon qualité, multilingual
  • Cohere embed-multilingual-v3 : multilingual best
  • BGE-M3 : open source, self-host friendly

Erreurs RAG fréquentes

  • Chunks trop petits (< 200 tokens) — perte contexte.
  • Chunks trop grands (> 2000) — embeddings noyés.
  • Pas de metadata filtering — recherche tout le corpus tout le temps.
  • Pas de re-ranking — qualité dégradée.
  • Pas de citations — hallucinations cachées.
  • Pas de évaluation continue — drift silencieux.

Eval RAG en production

`python

# Métriques RAG

retrieval_recall = relevant_docs_in_top_k / total_relevant_docs

retrieval_precision = relevant_docs_in_top_k / k

answer_faithfulness = supported_claims / total_claims

answer_relevance = LLM_judge(query, answer)

answer_correctness = LLM_judge(answer, ground_truth)

`

Outils : Ragas, LangSmith, Phoenix Arize.

Coût RAG production estimé

ComposantCoût mensuel
Embedding 1M docs$20 (OpenAI small)
Vector DB$50-300
Re-ranker$50-200 (selon volume)
LLM calls (10K req/jour)$300-2000
Total RAG SaaS moyen$500-2500/mois

FAQ

Q : RAG vs fine-tuning ?

R : RAG pour knowledge dynamique. Fine-tuning pour style/format/domaine spécifique. Souvent les deux combinés.

Q : Open source RAG framework ?

R : LlamaIndex, LangChain pour starter. À production, custom code souvent meilleur.

Q : Combien de chunks retrieve ?

R : Hybrid 20-50 → re-rank → top 5-10 dans context final. Plus = noise.

Conclusion

RAG production 2026 ≠ RAG MVP. Patterns : smart chunking, hybrid search, re-ranking, citations, eval continu. Coût $500-2500/mois SaaS moyen. Investment dans qualité retrieval = ROI massif vs LLM seul.

Tags :#RAG#LLM#AI#Architecture#Vector DB#Embeddings
Partager :

Mohamed Bah

Fondateur, Kolonell

Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.