Guide
RAG : faire citer ses sources à chaque réponse
Faire citer ses sources par un RAG : métadonnées à garder, citations par consigne ou par l'interface du modèle, limites et affichage.
Mis à jour le
Pour qu'un RAG cite ses sources, il faut deux choses : que chaque passage indexé garde son origine (fichier, page, section), et que le modèle relie chaque affirmation au passage qui la justifie. La première se règle à l'indexation, la seconde par consigne ou par une fonction de l'interface du modèle. Une réponse citée se vérifie en un coup d'œil ; une réponse non citée oblige à faire confiance.
Pourquoi c'est la fonction qui fait accepter un RAG
L'article fondateur du RAG (Lewis et al., 2020) cite parmi les problèmes ouverts des modèles de langage le fait de ne pas pouvoir indiquer la provenance de leurs réponses. Dans un service juridique, qualité ou client, une réponse sans source n'est pas utilisable : il faut pouvoir montrer l'article, la page, la version du document.
Étape 1 : garder l'origine à l'indexation
Pour chaque morceau, conservez au minimum :
| Métadonnée | Usage |
|---|---|
| Identifiant et titre du document | afficher et ouvrir la source |
| Page ou plage de pages | renvoyer au bon endroit d'un PDF |
| Section ou titre parent | situer l'extrait |
| Date ou version | éviter de citer un document périmé |
| Lien vers l'original | permettre la vérification |
LlamaIndex rappelle que les métadonnées attachées aux documents servent justement à retrouver la source d'une réponse.
Étape 2, option A : citations par consigne
Vous numérotez les passages dans la requête et demandez au modèle d'indiquer le numéro de l'extrait après chaque affirmation. La documentation d'Anthropic sur la réduction des hallucinations propose d'aller plus loin : après la rédaction, faire rechercher pour chaque affirmation une citation qui l'étaye, et retirer celles qui n'en ont pas. Avantage : fonctionne avec n'importe quel modèle. Limite : rien ne garantit que le numéro cité correspond vraiment au texte.
Étape 2, option B : citations par l'interface
Certaines interfaces renvoient les citations sous forme structurée. C'est le cas de la fonction Citations de Claude : on transmet les passages comme documents avec "citations": {"enabled": true}, et la réponse arrive découpée en blocs de texte portant chacun leurs citations.
Ce que dit la documentation :
| Type de document | Découpage pour citer | Format de la citation |
|---|---|---|
| Texte brut | par phrase | positions de caractères (à partir de 0) |
| par phrase | numéros de page (à partir de 1) | |
| Contenu personnalisé | aucun : vos blocs tels quels | indices de blocs (à partir de 0) |
Pour un RAG, la documentation indique : si vous voulez pouvoir citer une phrase précise d'un passage, mettez chaque passage dans un document texte ; si vous ne voulez pas de découpage supplémentaire, mettez vos passages dans un document à contenu personnalisé, un bloc par passage.
Exemple de citation renvoyée, d'après la documentation :
{
"type": "char_location",
"cited_text": "The grass is green. ",
"document_index": 0,
"document_title": "My Document",
"start_char_index": 0,
"end_char_index": 20
}
Trois avantages mis en avant par Anthropic par rapport aux citations par consigne : les citations pointent forcément vers un passage réellement fourni ; le texte cité (cited_text) ne compte pas dans les jetons de sortie ; et, selon ses évaluations, la fonction cite plus souvent les passages les plus pertinents.
Les limites à connaître
- PDF scannés. Un PDF sans texte extractible ne peut pas être cité, les citations d'images n'étant pas prises en charge (voir RAG sur des PDF).
- Sorties structurées. Citations et sorties JSON strictes sont incompatibles ; activer les deux renvoie une erreur 400.
- Coût d'entrée. L'activation ajoute un peu de jetons d'entrée (consignes système et découpage).
- Une citation n'est pas une preuve d'exactitude. Elle montre d'où vient l'affirmation ; si le document source est faux ou périmé, la réponse l'est aussi.
Étape 3 : l'affichage
Côté interface utilisateur, quelques règles simples :
- un renvoi numéroté après chaque phrase citée, pas une liste globale en fin de réponse ;
- au survol ou au clic, l'extrait exact, puis le lien vers le document à la bonne page ;
- la date du document à côté du titre ;
- un message clair quand aucune source ne permet de répondre, plutôt qu'une réponse sans citation.
Une réponse sans aucune citation dans un RAG mérite d'être vérifiée : elle peut signaler que le modèle a complété avec ses propres connaissances (voir Hallucinations).
Questions fréquentes
Le texte cité par la fonction Citations de Claude est-il facturé ?
Le champ cited_text ne compte pas dans les jetons de sortie, ni dans les jetons d'entrée quand il est renvoyé dans les tours suivants. L'activation ajoute en revanche un peu de jetons d'entrée.
Peut-on combiner citations et sortie JSON stricte ?
Non, pas avec Claude : la documentation indique que les citations et les sorties structurées sont incompatibles, et que l'interface renvoie une erreur 400 si l'on active les deux.
Sources
Pages consultées pour écrire cet article :