Citations avec Sources : Reference Object et RAG
Sur cette page
Leçon corrigée le 3 novembre 2026 d’après le guide Citations & References de Mistral : les sources se transmettent comme résultat d’outil, dans un objet dont les clés sont des numéros (
"0","1"…) et les valeurs portenturl,title,snippets(liste de listes),description,dateetsource; le « Référence Object » à champstype,reference_idetsource_idde l’ancienne version ne figure pas dans la documentation, pas plus que les seuils chiffrés sur le nombre de sources. Source : Citations & References.
Pourquoi les citations sont essentielles en production
Lorsque vous déployez un système RAG (Retrieval-Augmented Generation) en production, vos utilisateurs ont besoin de vérifier les réponses du modèle. Une réponse sans source est une affirmation invérifiable. Les citations transforment une réponse d’IA en réponse documentée, traçable et fiable.
Mistral AI intègre nativement un mécanisme de citations qui permet au modèle de fonder ses réponses sur des documents sources et de fournir des références précises. Le modèle a été profondément entraîné pour s’ancrer sur des documents et extraire les passages pertinents.
Le format des références
Chez Mistral, les sources ne passent pas par un paramètre dédié : elles arrivent au modèle comme le résultat d’un appel d’outil. Votre outil renvoie un objet JSON dont chaque clé est un numéro de source ("0", "1", "2"…) et chaque valeur décrit la source :
references = {
"0": {
"url": "https://docs.example.com/guide",
"title": "Guide de déploiement v3.2",
"snippets": [
[
"Le déploiement en production nécessite une vérification...",
"Les tests de charge doivent valider au minimum 1000 req/s..."
]
],
"description": None,
"date": "2026-03-15",
"source": "docs-deployment"
}
}
Champs d’une référence
- la clé (
"0","1"…) — l’identifiant de la source, que le modèle reprend dans ses citations url— l’adresse de la source originaletitle— le titre de la source, pour l’affichagesnippets— les extraits pertinents, sous forme de liste de listes de phrases : c’est le contenu sur lequel le modèle ancre sa réponsedescription— une description courte, ouNonedate— la date de publication ou de mise à joursource— l’origine de la source (une base documentaire, un site)
Architecture d’un pipeline RAG avec citations
Le workflow complet se décompose en quatre étapes.
1. Recherche de documents
Votre système de retrieval (Elasticsearch, Pinecone, pgvector, etc.) retourne les documents pertinents pour la requête utilisateur.
2. Construction des références
Vous structurez les documents retrouvés dans ce format :
def build_references(search_results):
"""Convertit les résultats de recherche au format de références de Mistral."""
return {
str(i): {
"url": result.get("url", ""),
"title": result["title"],
"snippets": [result["relevant_passages"]],
"description": None,
"date": result.get("date"),
"source": result.get("collection", "default"),
}
for i, result in enumerate(search_results)
}
3. Appel au modèle avec un outil
Vous déclarez un outil que le modèle appelle pour obtenir les sources. À son appel, votre code renvoie json.dumps(references) dans un ToolMessage, puis vous relancez la conversation (leçon suivante).
from mistralai.client import Mistral
client = Mistral(api_key="votre-clé-api")
get_information_tool = {
"type": "function",
"function": {
"name": "get_information",
"description": "Récupère les sources documentaires pertinentes",
"parameters": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"]
}
}
}
4. Le modèle cite ses sources
La réponse finale n’est pas une simple chaîne : son contenu alterne des TextChunk et des ReferenceChunk, dont le champ reference_ids contient les numéros des sources citées — 0 pour la clé "0". Vous les retrouvez dans votre table de références pour afficher titres et liens.
Bonnes pratiques pour les snippets
La qualité des citations dépend directement de la qualité de vos snippets, et le premier réglage à surveiller est leur longueur. Un snippet de deux à cinq phrases donne au modèle un passage dense et exploitable ; un extrait d’une page entière dilue l’information pertinente au point que le modèle cite la source sans vraiment s’y ancrer. Attention toutefois à ne pas couper trop court : un snippet arraché à son contexte peut être mal interprété — « le taux passe à 20 % » ne veut rien dire si la phrase précédente, qui précisait de quel taux il s’agit, a été coupée.
Le nombre de sources joue le même rôle que la longueur, à l’échelle de la requête : chaque source ajoutée se paie en tokens de contexte, qu’elle soit citée ou non. Commencez avec une poignée de sources et regardez, dans les reference_ids, lesquelles le modèle mobilise réellement avant d’en ajouter. Enfin, quand la temporalité compte (documentation versionnée, tarifs, réglementation), renseignez le champ date de chaque source : c’est une information que le modèle peut exploiter, et que vous pouvez afficher.
Points clés à retenir
- Les sources passent par un résultat d’outil, indexé par numéro (
"0","1"…), avec URL, titre, snippets et métadonnées - Le modèle Mistral est entraîné nativement pour ancrer ses réponses dans les sources fournies
- Les snippets doivent être concis et contextualisés pour des citations de qualité
- Limitez-vous à 3-7 références par requête pour une exploitation optimale
- Les citations transforment les réponses d’IA en informations vérifiables et traçables