01
📖 Qu'est-ce que l'API RAG ?
L'API RAG (Retrieval-Augmented Generation) combine la puissance de la recherche vectorielle avec celle des LLM (Grands Modèles de Langage) pour générer des réponses contextualisées, précises et sourcées.
💡 À retenir : Au lieu de demander à un LLM de répondre de mémoire (avec risque d'hallucinations), l'API RAG va d'abord chercher les documents pertinents dans notre graphe, puis les fournir au LLM pour générer une réponse basée sur des faits réels.
🌐 Endpoint public :
https://lemondesemantique.fr/api/v2/rag/query
Cas d'usage :
- 🤖 Chatbots intelligents sur votre corpus documentaire
- 📚 Assistants de recherche académique ou journalistique
- 🎓 QCM et évaluations générés automatiquement
- 📊 Analyse de documents et synthèse automatisée
02
🏗️ Architecture RAG
📊 Flux d'exécution :
[Question utilisateur] → [Embedding] → [Recherche Vectorielle] → [Documents pertinents]
↓
[Réponse finale] ← [LLM] ← [Contexte + Question]
Notre API RAG suit un processus en 5 étapes :
- 🔤 Embedding : La question est convertie en vecteur
- 🔍 Recherche : Recherche des documents similaires dans notre base vectorielle
- 📄 Récupération : Extraction des textes pertinents
- 🧠 Génération : Le LLM reçoit question + contexte et génère une réponse
- 📎 Sourçage : Les sources des documents sont incluses dans la réponse
🔗 RAG avec graphe de connaissances : Notre API peut aussi interroger directement le graphe RDF via SPARQL pour des questions relationnelles complexes.
03
🔌 Endpoints
POST /api/v2/rag/query - Question/Réponse
curl -X POST https://lemondesemantique.fr/api/v2/rag/query \
-H "Authorization: Bearer votre_clé_api" \
-H "Content-Type: application/json" \
-d '{
"question": "Quels discours Charles de Gaulle a-t-il prononcés sur la résistance ?",
"top_k": 3,
"model": "mistral",
"include_sources": true,
"temperature": 0.7
}'
POST /api/v2/rag/stream - Streaming (SSE)
curl -X POST https://lemondesemantique.fr/api/v2/rag/stream \
-H "Authorization: Bearer votre_clé_api" \
-H "Content-Type: application/json" \
-d '{
"question": "Qui était Victor Hugo ?",
"top_k": 5
}'
POST /api/v2/rag/chat - Conversation multi-tours
curl -X POST https://lemondesemantique.fr/api/v2/rag/chat \
-H "Authorization: Bearer votre_clé_api" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Parle-moi de l'Appel du 18 juin"},
{"role": "assistant", "content": "L'Appel du 18 juin est un discours de Charles de Gaulle..."},
{"role": "user", "content": "Quand a-t-il été prononcé ?"}
],
"top_k": 3
}'
04
🎯 Exemples de requêtes
Question simple
curl -X POST https://lemondesemantique.fr/api/v2/rag/query \
-H "Authorization: Bearer kg_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"question": "Qui était Charles de Gaulle ?",
"top_k": 3
}'
Avec filtrage par source
curl -X POST https://lemondesemantique.fr/api/v2/rag/query \
-H "Authorization: Bearer kg_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"question": "Quels discours parlent de l'Europe ?",
"top_k": 5,
"filter": {
"speaker_id": "emmanuel_macron",
"date_after": "2020-01-01"
}
}'
Avec instructions spécifiques
curl -X POST https://lemondesemantique.fr/api/v2/rag/query \
-H "Authorization: Bearer kg_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"question": "Résume les arguments de Victor Hugo contre la peine de mort",
"top_k": 4,
"instruction": "Tu es un historien spécialiste de Victor Hugo. Réponds de manière concise et cite tes sources."
}'
05
📄 Structure de la réponse
{
"question": "Quels discours Charles de Gaulle a-t-il prononcés sur la résistance ?",
"answer": "Charles de Gaulle a prononcé plusieurs discours majeurs sur la résistance, dont notamment l'Appel du 18 juin 1940 depuis Londres, considéré comme l'acte fondateur de la Résistance française. Il a également prononcé l'Appel du 22 juin 1940. Ces discours appellent les Français à ne pas cesser le combat contre l'occupant nazi.",
"sources": [
{
"id": "appel_18_juin",
"title": "Appel du 18 juin",
"speaker": "Charles de Gaulle",
"date": "1940-06-18",
"relevance": 0.94,
"url": "/speeches/appel_18_juin"
},
{
"id": "appel_22_juin",
"title": "Appel du 22 juin",
"speaker": "Charles de Gaulle",
"date": "1940-06-22",
"relevance": 0.89,
"url": "/speeches/appel_22_juin"
}
],
"metadata": {
"model": "mistral",
"tokens_used": 450,
"latency_ms": 850
}
}
| Champ | Description |
| answer |
Réponse générée par le LLM
|
| sources |
Documents utilisés (avec score de pertinence et URL)
|
| metadata.model |
Modèle LLM utilisé
|
| metadata.tokens_used |
Nombre de tokens consommés (facturation)
|
06
🔗 Intégration dans vos applications
Python
import requests
API_KEY = "kg_live_xxxxx"
url = "https://lemondesemantique.fr/api/v2/rag/query"
response = requests.post(
url,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json={
"question": "Quels sont les discours les plus célèbres de Victor Hugo ?",
"top_k": 3
}
)
data = response.json()
print(f"Réponse: {data['answer']}")
print("\nSources:")
for source in data["sources"]:
print(f" - {source['title']} ({source['relevance']:.2f})")
JavaScript / Node.js (avec streaming)
const API_KEY = "kg_live_xxxxx";
const response = await fetch(
"https://lemondesemantique.fr/api/v2/rag/stream",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
question: "Raconte-moi l'histoire de l'Appel du 18 juin"
})
}
);
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
console.log(chunk); // Affichage progressif de la réponse
}
PHP
$apiKey = "kg_live_xxxxx";
$url = "https://lemondesemantique.fr/api/v2/rag/query";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $apiKey",
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"question" => "Quels discours de résistance ?",
"top_k" => 3
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
echo $data['answer'];
07
🧠 Modèles LLM supportés
| Modèle | Description | Langues |
| mistral
| Mistral 7B, rapide et efficace
| Français, Anglais
|
| mixtral
| Mixtral 8x7B, plus puissant
| Français, Anglais, Espagnol, Italien
|
| llama3
| Llama 3 70B, haute qualité
| Anglais (français partiel)
|
| gpt4
| OpenAI GPT-4 (clé API tierce)
| Multilingue
|
💡 Conseil : Pour des questions en français, privilégiez mistral ou mixtral qui offrent les meilleures performances.