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

Avant de commencer

Configurer votre environnement

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

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-3a354dcc6c16
2. Ajouter un document

2. 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.
EOF

Cré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.py
Uploaded faq.md
Processing status: done
3. Poser une question

3. 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.py
Résultat attendu

Ré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

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.py
Deleted library quickstart-library
Aller plus loin

Aller plus loin