Citations et références
Les citations permettent aux modèles de s'appuyer sur des documents et de fournir des références, ce qui en fait une fonctionnalité puissante pour le RAG ( Retrieval-Augmented Generation) et les applications agentiques. Cette fonctionnalité permet au modèle de fournir la source des informations extraites d'un document ou d'un fragment de données provenant d'un appel d'outil.
Nos modèles ont été profondément entraînés pour s'appuyer sur des documents et fournir des sources, avec une fonction intégrée pour extraire les références et les citations.
Avant de continuer, nous vous recommandons de lire la documentation sur les complétions de conversation pour en savoir plus sur l'API de complétions de conversation et sur son utilisation avant de poursuivre.
Utilisation
Comment utiliser les citations et références
Pour fournir des documents au modèle, vous pouvez inclure les sources sous forme de réponse d'appel de fonction. Voici un exemple de références, dans ce cas issu de Wikipédia, utilisant des appels d'outils.
Configurer l'outil
Pour utiliser les citations et références, vous devez configurer un appel d'outil qui retournera les références.
Exemple de références
references = {
"0": {
"url": "https://en.wikipedia.org/wiki/2024_Nobel_Peace_Prize",
"title": "2024 Nobel Peace Prize",
"snippets": [
[
"The 2024 Nobel Peace Prize, an international peace prize established according to Alfred Nobel's will, was awarded to Nihon Hidankyo (the Japan Confederation of A- and H-Bomb Sufferers Organizations), for their activism against nuclear weapons, assisted by victim/survivors (known as Hibakusha) of the atomic bombings of Hiroshima and Nagasaki in 1945.",
"They will receive the prize at a ceremony on 10 December 2024 at Oslo, Norway."
]
],
"description": None,
"date": "2024-11-26T17:39:55.057454",
"source": "wikipedia"
},
"1": {
"url": "https://en.wikipedia.org/wiki/Climate_Change",
"title": "Climate Change",
"snippets": [
[
"Present-day climate change includes both global warming—the ongoing increase in global average temperature—and its wider effects on Earth’s climate system. Climate change in a broader sense also includes previous long-term changes to Earth's climate. The current rise in global temperatures is driven by human activities, especially fossil fuel burning since the Industrial Revolution. Fossil fuel use, deforestation, and some agricultural and industrial practices release greenhouse gases. These gases absorb some of the heat that the Earth radiates after it warms from sunlight, warming the lower atmosphere. Carbon dioxide, the primary gas driving global warming, has increased in concentration by about 50% since the pre-industrial era to levels not seen for millions of years."
]
],
"description": None,
"date": "2024-11-26T17:39:55.057454",
"source": "wikipedia"
},
"2": {
"url": "https://en.wikipedia.org/wiki/Artificial_Intelligence",
"title": "Artificial Intelligence",
"snippets": [
[
"Artificial intelligence (AI) refers to the capability of computational systems to perform tasks typically associated with human intelligence, such as learning, reasoning, problem-solving, perception, and decision-making. It is a field of research in computer science that develops and studies methods and software that enable machines to perceive their environment and use learning and intelligence to take actions that maximize their chances of achieving defined goals. Such machines may be called AIs."
]
],
"description": None,
"date": "2024-11-26T17:39:55.057454",
"source": "wikipedia"
}
}Ensuite, vous devez définir l'outil qui sera utilisé pour récupérer les informations depuis la source externe.
Dans ce cas, nous allons créer un outil get_information qui retournera les références mentionnées précédemment.
get_information_tool = {
"type": "function",
"function": {
"name": "get_information",
"description": "Get information from external source.",
"parameters": {
"type": "object",
"properties": {},
"additionalProperties": False
},
"strict": True
},
}
def get_information():
return json.dumps(references)Initialiser le client
Pour commencer, vous devez initialiser le client avec votre clé API comme d'habitude.
import os
from mistralai.client import Mistral, ToolMessage
import json
api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-small-latest"
client = Mistral(api_key=api_key)Configurer l'historique de conversation
Vous pouvez configurer l'historique de conversation avec le message initial de l'utilisateur et le message système facultatif.
chat_history = [
{
"role": "system",
"content": "Answer the user by providing references to the source of the information."
},
{
"role": "user",
"content": "Who won the Nobel Prize in 2024?"
}
]Effectuer la première requête de conversation
Vous pouvez envoyer la première requête de conversation au modèle avec l'historique de conversation et l'outil.
chat_response = client.chat.complete(
model=model,
messages=chat_history,
tools=[get_information_tool],
)
tool_call = chat_response.choices[0].message.tool_calls[0]
chat_history.append(chat_response.choices[0].message)Le modèle souhaite appeler l'outil get_information pour récupérer les informations depuis la source externe.
Maintenant, de notre côté, nous pouvons traiter l'appel d'outil et ajouter le résultat à l'historique de conversation.
result = get_information()
tool_call_result = ToolMessage(
content=result,
tool_call_id=tool_call.id,
name=tool_call.function.name,
)
# Append the tool call message to the chat_history
chat_history.append(tool_call_result)Effectuer la requête de conversation finale
Enfin, vous pouvez effectuer la requête de conversation finale au modèle avec l'historique de conversation mis à jour, en fournissant la requête originale, l'appel d'outil du modèle et le résultat de l'outil.
chat_response = client.chat.complete(
model=model,
messages=chat_history,
tools=[get_information_tool],
)Comme vous pouvez le constater, le modèle a fourni la réponse à la requête de l'utilisateur ainsi que la référence vers la source de l'information.
Vous pouvez extraire et afficher ces références depuis la réponse comme vous le souhaitez.
from mistralai.client.models import TextChunk, ReferenceChunk
refs_used = []
# Print the main response and save each reference
for chunk in chat_response.choices[0].message.content:
if isinstance(chunk, TextChunk):
print(chunk.text, end="")
elif isinstance(chunk, ReferenceChunk):
refs_used += chunk.reference_ids
# Print references only
if refs_used:
print("\n\nSources:")
for i, ref in enumerate(set(refs_used), 1):
reference = json.loads(result)[str(ref)]
print(f"\n{i}. {reference['title']}: {reference['url']}")Exemples pratiques
Vous trouverez un guide complet explorant les citations et références avec le RAG et Wikipédia ici. Ce modèle vous aidera à démarrer avec la recherche web et l'ancrage de documents avec citations.