RAG en français : une IA qui répond depuis vos documents
9 min de lecture · mis à jour le 26 octobre 2026
Faire répondre une IA à partir de VOS documents (règlements, catalogues, FAQ internes), c'est le principe du RAG (Retrieval-Augmented Generation). Voici la version minimale et fonctionnelle en Python, avec des embeddings multilingues qui comprennent le français.
Le principe en 30 secondes
- 1. Indexer : chaque paragraphe de vos documents est converti en embedding (un vecteur numérique qui capture le sens)
- 2. Chercher : la question de l'utilisateur est convertie pareil, on trouve les paragraphes les plus proches
- 3. Répondre : on donne ces paragraphes au modèle de chat, qui répond en s'appuyant dessus
Le modèle d'embeddings qu'il vous faut
Pour du contenu en français (ou mélangé), multilingual-e5-large est excellent et coûte une fraction de franc par document. text-embedding-3-small est l'alternative classique.
Le code complet (sans base vectorielle)
Pour moins de ~5 000 paragraphes, pas besoin d'infrastructure : numpy suffit.
import numpy as np
from openai import OpenAI
client = OpenAI(base_url="https://api.deeprelay.io/v1", api_key="dr_votre_cle")
EMB = "intfloat/multilingual-e5-large"
documents = [
"Les livraisons à Dakar sont effectuées sous 24h pour 1500 F.",
"Les retours sont acceptés sous 7 jours avec le reçu d'achat.",
"Le service client répond au 77 000 00 00, du lundi au samedi 9h-18h.",
# … vos vrais documents ici
]
# 1. Indexation (à faire une fois, puis sauvegarder)
emb = client.embeddings.create(model=EMB, input=documents)
index = np.array([e.embedding for e in emb.data])
def repondre(question: str) -> str:
# 2. Recherche des 3 passages les plus pertinents
q = np.array(client.embeddings.create(model=EMB, input=question).data[0].embedding)
scores = index @ q / (np.linalg.norm(index, axis=1) * np.linalg.norm(q))
contexte = "\n".join(documents[i] for i in scores.argsort()[-3:])
# 3. Réponse ancrée dans le contexte
r = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V3.2",
messages=[
{"role": "system", "content": f"Réponds UNIQUEMENT à partir de ce contexte:\n{contexte}\nSi la réponse n'y est pas, dis-le."},
{"role": "user", "content": question},
],
)
return r.choices[0].message.content
print(repondre("C'est combien la livraison à Dakar ?"))Ce que ça coûte
| Opération | Coût |
|---|---|
| Indexer 1 000 paragraphes (~150 000 tokens) | ~1,1 F (une seule fois) |
| Une question (embedding + réponse) | ~0,37 F |
Combinez avec le bot WhatsApp et vous obtenez un service client qui connaît vraiment votre entreprise. Clé API gratuite ici.
Essayer avec 100 F offerts
Créez un compte, générez une clé, lancez le code de ce guide. Rechargez ensuite par Wave, Orange Money ou carte.