RAG en français : une IA qui répond depuis VOS documents
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",
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 | < 5 F (une seule fois) |
| Une question (embedding + réponse) | ~0,4 F |
📈 Au-delà de quelques milliers de documents, passez sur une base vectorielle (Qdrant, pgvector…) — le code d'appel API reste identique.
Combinez avec le bot WhatsApp et vous obtenez un service client qui connaît vraiment votre entreprise. Clé API gratuite ici.