Aller au contenu principal

Outil document_library : QnA sur vos fichiers

Mis à jour le 28 juillet 2026

Le RAG intégré de Mistral

L’outil document_library est un système de RAG (Retrieval-Augmented Generation) intégré à l’API Agents. Votre agent accède à des documents que vous avez uploadés dans le cloud Mistral, y retrouve les passages pertinents et formule sa réponse en les citant. L’écart avec un RAG maison est considérable : vous n’avez ni base vectorielle à héberger, ni pipeline d’embeddings à entretenir, ni stratégie de découpage à régler. Vous déposez des fichiers, vous déclarez l’outil à la création de l’agent, et le modèle décide lui-même quand aller chercher dans la bibliothèque.

Créer une bibliothèque de documents

Une bibliothèque est le conteneur qui regroupe vos documents. Elle se crée en un appel, avant tout upload.

from mistralai import Mistral
import os

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

# Créer une bibliothèque
library = client.beta.libraries.create(
    name="Documentation Technique",
    description="Manuels et spécifications techniques de nos produits."
)

print(f"Library ID : {library.id}")

Notez bien l’identifiant retourné : c’est lui que vous passerez à l’agent, et il n’y a pas de raccourci par le nom. Dans une équipe qui gère une bibliothèque RH, une juridique et une technique, stockez ces identifiants dans votre configuration au même titre qu’une chaîne de connexion.

Uploader des documents

L’ajout se fait en deux temps : le fichier est d’abord déposé dans l’espace Files avec un purpose explicite, puis rattaché à la bibliothèque.

# Uploader un fichier PDF
with open("manuel-produit.pdf", "rb") as f:
    uploaded_file = client.files.upload(
        file=f,
        purpose="library"
    )

# Ajouter le fichier à la bibliothèque
client.beta.libraries.add_document(
    library_id=library.id,
    document_id=uploaded_file.id
)

Les formats supportés incluent PDF, texte et d’autres formats documentaires courants.

Créer un agent avec document library

agent = client.beta.agents.create(
    model="mistral-medium-latest",
    name="Agent Documentation",
    instructions="""Vous êtes un assistant documentaire.
- Répondez uniquement à partir des documents de la bibliothèque
- Citez les passages pertinents
- Si l'information n'est pas dans les documents, dites-le clairement""",
    tools=[{
        "type": "document_library",
        "library_ids": [library.id]
    }]
)

Le paramètre library_ids est une liste : vous pouvez associer plusieurs bibliothèques à un même agent, par exemple la documentation produit et les procédures internes pour un assistant de support. Les instructions font ici plus que du confort. Sans la consigne de se limiter aux documents, le modèle comble les trous avec ses connaissances générales et vous perdez la capacité de distinguer ce qui vient de vos fichiers de ce qui vient d’ailleurs. La troisième ligne — dire clairement quand l’information est absente — est celle qui transforme un agent bavard en agent fiable.

Interroger les documents

response = client.beta.conversations.start(
    agent_id=agent.id,
    inputs="Comment fonctionne l'encodeur vision de Pixtral 12B ?"
)

for entry in response.outputs:
    if entry.type == "message.output":
        for chunk in entry.content:
            if chunk.type == "text":
                print(chunk.text)
            elif chunk.type == "tool_reference":
                print(f"  [Source] {chunk.title}")

Comme pour le web search, la réponse arrive en morceaux de deux natures. Les chunks text portent la rédaction ; les chunks tool_reference portent la provenance, avec le champ title pour le nom du document source et le champ url pour la référence interne à ce document. C’est cette séparation qui vous permet d’afficher une réponse et, juste en dessous, la liste des documents qui l’ont produite.

Cette traçabilité n’est pas un ornement. Un conseiller qui répond à un client sur la base d’une procédure interne doit pouvoir dire de quelle procédure il parle ; un juriste qui s’appuie sur un contrat doit pouvoir remonter au contrat. Sans citation, un RAG produit des affirmations invérifiables.

Gérer les bibliothèques

# Lister les bibliothèques
libraries = client.beta.libraries.list()
for lib in libraries.data:
    print(f"{lib.name} ({lib.id})")

# Lister les documents d'une bibliothèque
documents = client.beta.libraries.list_documents(library_id=library.id)
for doc in documents.data:
    print(f"{doc.filename}{doc.bytes} bytes")

# Supprimer un document de la bibliothèque
client.beta.libraries.remove_document(
    library_id=library.id,
    document_id=uploaded_file.id
)

# Supprimer la bibliothèque
client.beta.libraries.delete(library_id=library.id)

Le retrait de document est l’opération la plus souvent négligée, et la plus coûteuse quand on l’oublie. Une version périmée d’un tarif ou d’une procédure reste indéfiniment citable par l’agent, avec toute l’apparence de la légitimité puisqu’elle est sourcée. Faites du remove_document un réflexe de la même publication qui met en ligne la nouvelle version.

Du support interne à l’analyse de contrats

Le support interne est le cas le plus immédiat : les employés posent leurs questions RH en langage naturel plutôt que de fouiller un intranet.

agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="Support Interne",
    instructions="Répondez aux questions des employés en utilisant la base documentaire RH.",
    tools=[{"type": "document_library", "library_ids": [rh_library.id]}]
)

L’analyse de contrats change de registre : l’agent ne restitue plus, il examine. Les instructions décrivent alors un travail, pas un périmètre.

agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="Analyste Contrats",
    instructions="""Analysez les contrats uploadés.
- Identifiez les clauses importantes
- Signalez les risques potentiels
- Comparez avec les standards du secteur""",
    tools=[{"type": "document_library", "library_ids": [contrats_library.id]}]
)

La base de connaissances produit illustre enfin la combinaison d’outils : la documentation officielle fait autorité, et la recherche web prend le relais quand elle ne couvre pas la question.

agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="Expert Produit",
    instructions="Répondez aux questions techniques sur nos produits en vous basant sur la documentation officielle.",
    tools=[
        {"type": "document_library", "library_ids": [docs_library.id]},
        {"type": "web_search"}  # Complément si les docs ne suffisent pas
    ]
)

Préparer les sources, cloisonner les bibliothèques

La qualité du RAG se joue en amont de l’API. Un PDF structuré, avec titres, sous-titres et paragraphes nets, se découpe et se retrouve infiniment mieux qu’un scan aplati ou qu’un document dont toute la logique tient dans la mise en page. Séparez ensuite vos bibliothèques par domaine plutôt que d’en constituer une seule fourre-tout : un agent branché sur la seule bibliothèque juridique ne risque pas de citer une note de service RH pour répondre à une question de contrat. Ces deux décisions — soigner la structure des sources, cloisonner les bibliothèques — pèsent plus lourd sur le résultat final que n’importe quel réglage de modèle.

Points clés à retenir

  • document_library est un RAG intégré — pas besoin de gérer votre propre infrastructure vectorielle
  • Créez des bibliothèques thématiques et uploadez vos documents via l’API Files
  • Les réponses citent les passages pertinents avec des tool_reference
  • Vous pouvez associer plusieurs bibliothèques à un même agent
  • Combinable avec les autres outils pour une couverture complète