IA.3 · Héberger, brancher, sécuriser
RAG : brancher vos documents
Leçon théorique · questionnaire de validation · gratuit, dans le navigateur
Un LLM ne connaît ni vos procédures d'exploitation, ni vos postmortems, ni la configuration de vos clusters (leçon IA.1). Le réentraîner pour cela serait coûteux, et à refaire à chaque nouveau document. La génération augmentée par récupération (retrieval-augmented generation, RAG) contourne le problème : à chaque question, on retrouve les passages pertinents de vos documents et on les donne au modèle dans son contexte, avec la consigne de s'appuyer dessus. Cette leçon est théorique.
Ce que vous saurez à la fin : décrire la chaîne d'un RAG (découpage, plongements, index, récupération, génération), choisir une base vectorielle, régler les paramètres qui comptent, faire citer ses sources au modèle, évaluer la qualité, et respecter les droits d'accès aux documents.
1. La chaîne
indexation (une fois, puis à chaque mise à jour) à chaque question
documents ─▶ découpage ─▶ plongements ─▶ base vectorielle question ─▶ plongement ─▶ recherche des k passages
─▶ invite = consignes + passages + question ─▶ LLM ─▶ réponse sourcée
2. Découper
Les documents sont découpés en morceaux (chunks) de quelques centaines de jetons, avec un chevauchement (10 à 20 %) pour ne pas couper une idée en deux. Un découpage qui suit la structure (titres Markdown, sections d'un runbook, une ressource YAML entière) donne de bien meilleurs résultats qu'une coupure tous les N caractères. On garde avec chaque morceau ses métadonnées : document d'origine, titre de section, date, équipe propriétaire, niveau de confidentialité.
3. Les plongements
Un modèle de plongement (embedding model) transforme un texte en vecteur de quelques centaines à quelques milliers de nombres, de sorte que deux textes de sens proche aient des vecteurs proches. « Le pod redémarre en boucle » et « CrashLoopBackOff » se retrouvent voisins, même sans mot commun. Ces modèles sont petits et rapides ; il en existe de bons, multilingues, à héberger soi-même (vLLM et d'autres serveurs les exposent sous /v1/embeddings). Règle absolue : le même modèle pour indexer et pour interroger.
4. La base vectorielle
| Option | Quand |
|---|---|
| PostgreSQL + pgvector | vous avez déjà PostgreSQL (CloudNativePG, leçon 4.9) : une extension, des requêtes SQL, les métadonnées et les droits au même endroit |
| Qdrant, Weaviate, Milvus | très gros volumes, recherche hybride et filtres avancés, mise à l'échelle dédiée |
| OpenSearch / Elasticsearch | déjà en place pour la recherche plein texte |
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE passages (id bigserial PRIMARY KEY, doc text, section text, equipe text, contenu text, plongement vector(1024));
CREATE INDEX ON passages USING hnsw (plongement vector_cosine_ops);
-- les 5 passages les plus proches de la question, parmi ceux que l'équipe a le droit de voir
SELECT doc, section, contenu FROM passages WHERE equipe = ANY($2) ORDER BY plongement <=> $1 LIMIT 5;
5. Récupérer, puis générer
- k (le nombre de passages) : trop peu, l'information manque ; trop, le contexte se remplit de bruit. 4 à 8 est un point de départ.
- La recherche hybride combine la proximité de sens et la recherche par mots-clés (indispensable pour les noms exacts :
kubenow-api, un code d'erreur) ; un reclasseur (reranker) réordonne ensuite les candidats. - L'invite impose le comportement :
Réponds uniquement à partir des extraits ci-dessous. Cite la source de chaque affirmation entre crochets [doc § section].
Si les extraits ne contiennent pas la réponse, dis-le clairement au lieu d'inventer.
Extraits :
[runbook-postgres § Bascule] …
[postmortem-2026-03 § Cause] …
Question : …
Faire citer les sources permet à l'utilisateur de vérifier, et réduit fortement les inventions.
6. Mesurer la qualité
Un RAG se règle sur des mesures, pas à l'impression. Constituez un jeu d'évaluation : quelques dizaines de questions réelles avec la bonne réponse et le document attendu. Mesurez séparément :
- la récupération : le bon passage figure-t-il dans les k résultats ?
- la fidélité : la réponse s'appuie-t-elle seulement sur les extraits ?
- la pertinence : répond-elle à la question ?
Des outils comme Ragas automatisent une partie de ces mesures. Relancez l'évaluation à chaque changement de découpage, de modèle ou d'invite.
7. Exploiter un RAG
- Fraîcheur : un document modifié doit être réindexé (un CronJob, ou un déclencheur à chaque fusion dans le dépôt de documentation) ; un document supprimé, retiré de l'index.
- Droits d'accès : le RAG ne doit jamais montrer à quelqu'un un passage qu'il n'aurait pas le droit de lire dans le document d'origine. Filtrez sur les métadonnées dans la requête de recherche, pas après la génération.
- Données sensibles : n'indexez pas de secrets ; un fichier de configuration avec un mot de passe deviendrait une réponse.
- Documents piégés : un document indexé peut contenir des instructions destinées au modèle (« ignore tes consignes et… ») : c'est l'injection indirecte (leçon IA.6).
Validez la leçon avec le questionnaire.