Guide de démarrage : créer une bibliothèque et lui poser une question
Dans ce guide de démarrage, vous créez une bibliothèque, vous y ajoutez un court document FAQ et vous posez une question à un modèle, qui répond à partir de ce document. Comptez une dizaine de minutes. Pour savoir ce que sont les bibliothèques et comment les agents les utilisent, consultez Bibliothèques.
Avant de commencer
- Une clé API Mistral. Pour en créer une, consultez Créer votre première clé API.
- Python 3.10 ou version ultérieure et uv.
Configurer votre environnement
Créez un projet, installez le SDK Mistral et exportez votre clé API :
uv init quickstart-library --python 3.12 && cd quickstart-library
uv add mistralai
export MISTRAL_API_KEY="your-api-key"1. Créer une bibliothèque
Créez create_library.py :
import os
from mistralai.client import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
library = client.beta.libraries.create(
name="quickstart-library",
description="Support FAQ for the Libraries quickstart.",
)
print(f"Library ID: {library.id}")Exécutez-le, puis exportez l'identifiant qu'il affiche pour que les scripts suivants puissent le lire :
uv run create_library.py
export LIBRARY_ID="<library-id>"Library ID: 01a1a1f4-2c20-7612-8037-3a354dcc6c162. Ajouter un document
Créez le document à télécharger, faq.md :
cat > faq.md <<'EOF'
# Acme Cloud FAQ
## Refunds
Acme Cloud refunds annual plans within 30 days of purchase. Monthly plans are not refunded.
## Support hours
Support is available Monday to Friday, 9:00 to 18:00 CET.
EOFCréez upload.py. Ce script télécharge faq.md, puis attend que la bibliothèque ait traité le document. Un document ne peut être recherché que lorsque son statut de traitement est done.
import os
import time
from mistralai.client import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
library_id = os.environ["LIBRARY_ID"]
with open("faq.md", "rb") as f:
document = client.beta.libraries.documents.upload(
library_id=library_id,
file={"file_name": "faq.md", "content": f},
)
print(f"Uploaded {document.name}")
status = client.beta.libraries.documents.status(
library_id=library_id, document_id=document.id
)
while status.process_status in ("todo", "in_progress", "waiting_for_capacity"):
time.sleep(2)
status = client.beta.libraries.documents.status(
library_id=library_id, document_id=document.id
)
print(f"Processing status: {status.process_status}")Exécutez-le :
uv run upload.pyUploaded faq.md
Processing status: done3. Poser une question
Créez ask.py. Ce script démarre une conversation avec l'outil document_library ciblant votre bibliothèque, de sorte que le modèle effectue une recherche dans la bibliothèque avant de répondre. store=False empêche la conversation d'apparaître dans votre historique.
import os
from mistralai.client import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
library_id = os.environ["LIBRARY_ID"]
response = client.beta.conversations.start(
model="mistral-medium-latest",
instructions="Answer from the documents in the library. Cite the document you used.",
inputs="How long do I have to get a refund on an annual plan?",
tools=[{"type": "document_library", "library_ids": [library_id]}],
completion_args={"temperature": 0.2},
store=False,
)
for entry in response.outputs:
if entry.type == "tool.execution":
print(f"Tool called: {entry.name}")
answer = response.outputs[-1].content
if isinstance(answer, str):
print(answer)
else:
print("".join(chunk.text for chunk in answer if chunk.type == "text"))Exécutez-le :
uv run ask.pyRésultat attendu
Le modèle appelle document_library, puis répond avec le délai de remboursement issu de faq.md :
Tool called: document_library
You have **30 days from the date of purchase** to request a refund for an annual plan.Le délai de 30 jours vient de votre document, et non des connaissances générales du modèle. La formulation de la réponse peut varier d'une exécution à l'autre.
Si la réponse indique qu'aucune bibliothèque ou aucun document n'est disponible, relancez uv run ask.py. Si la commande échoue avec 401 Unauthorized, vérifiez MISTRAL_API_KEY.
Nettoyage
Pour supprimer la bibliothèque et son document, créez delete_library.py :
import os
from mistralai.client import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
deleted = client.beta.libraries.delete(library_id=os.environ["LIBRARY_ID"])
print(f"Deleted library {deleted.name}")Exécutez-le :
uv run delete_library.pyDeleted library quickstart-library