Aller au contenu principal

Le Modèle mistral-embed

Mis à jour le 29 juillet 2026

Présentation de mistral-embed

Le modèle mistral-embed est le modèle d’embedding textuel de Mistral AI. Il transforme n’importe quel texte en un vecteur de 1024 dimensions, quelle que soit la longueur de l’entrée — une phrase courte ou un paragraphe entier produiront toujours un vecteur de taille identique. Cette taille fixe n’est pas un détail : elle vous autorise à placer dans le même index le titre d’une fiche produit et sa description complète, puis à les comparer directement, sans traitement particulier pour réconcilier des formats différents.

Ce modèle est optimisé pour les tâches de recherche sémantique, de classification et de clustering sur du texte naturel (articles, documents, conversations, etc.). C’est le modèle que vous utiliserez pour indexer une base de connaissances, une FAQ, des comptes rendus de réunion ou dix ans d’échanges avec le support.

Configuration et installation

Avant d’utiliser l’API, vous devez installer le SDK Python de Mistral et configurer votre clé API :

# Installation
# pip install mistralai

import os
from mistralai import Mistral

# Initialiser le client
api_key = os.environ.get("MISTRAL_API_KEY")
client = Mistral(api_key=api_key)

Vous pouvez obtenir votre clé API depuis la console Mistral. Stockez-la dans une variable d’environnement pour ne jamais l’exposer dans votre code. La lecture par os.environ.get n’est pas une précaution théorique : c’est ce qui vous évite de retrouver votre clé dans l’historique d’un dépôt Git le jour où le projet devient public.

Générer des embeddings

L’appel API est simple : vous passez une liste de textes et récupérez les vecteurs correspondants. Notez que même pour un seul texte, l’entrée reste une liste — l’API travaille toujours par lots, ce qui vous servira dès que le corpus grossira.

from mistralai import Mistral

client = Mistral(api_key=api_key)

# Générer des embeddings pour un ou plusieurs textes
response = client.embeddings.create(
    model="mistral-embed",
    inputs=[
        "Les embeddings capturent la signification sémantique.",
        "Mistral AI propose des modèles performants.",
        "Le RAG améliore la qualité des réponses."
    ],
)

# Accéder aux vecteurs
for i, data in enumerate(response.data):
    print(f"Texte {i+1}: vecteur de {len(data.embedding)} dimensions")
    print(f"  Premiers éléments: {data.embedding[:5]}")

Sortie typique :

Texte 1: vecteur de 1024 dimensions
  Premiers éléments: [0.0234, -0.1567, 0.0891, 0.0123, -0.0456]
Texte 2: vecteur de 1024 dimensions
  Premiers éléments: [0.0189, -0.1234, 0.0678, 0.0345, -0.0567]
Texte 3: vecteur de 1024 dimensions
  Premiers éléments: [0.0312, -0.1456, 0.0789, 0.0234, -0.0345]

Structure de la réponse API

La réponse ne contient pas que les vecteurs. Elle vous renseigne aussi sur le modèle réellement utilisé et sur les tokens consommés, deux informations que vous voudrez journaliser dès que l’encodage tourne en production et que la facture doit être expliquée à quelqu’un. Le champ index mérite une attention particulière : il indique la position du texte dans la liste que vous avez envoyée, et c’est lui qui vous permet de recoller chaque vecteur à son document d’origine.

response = client.embeddings.create(
    model="mistral-embed",
    inputs=["Exemple de texte à encoder."],
)

# Objet de réponse
print(response.model)          # "mistral-embed"
print(response.usage)          # tokens consommés

# Données d'embedding
embedding_data = response.data[0]
print(embedding_data.index)     # 0 (position dans la liste d'inputs)
print(len(embedding_data.embedding))  # 1024
print(type(embedding_data.embedding))  # list[float]

Exemple complet : encoder et stocker

Voici un pipeline typique pour encoder un corpus de documents et préparer les vecteurs pour une recherche ultérieure. La bascule vers NumPy est l’étape déterminante : tant que vos vecteurs sont des listes Python, chaque calcul de similarité se fait élément par élément ; une fois la matrice constituée, une seule opération compare la requête à l’ensemble du corpus.

import numpy as np
from mistralai import Mistral

client = Mistral(api_key=api_key)

# Corpus de documents
documents = [
    "Mistral AI est une entreprise française d'intelligence artificielle.",
    "Le RAG combine recherche d'information et génération de texte.",
    "Les embeddings permettent la recherche sémantique.",
    "Python est le langage le plus utilisé en data science.",
    "FAISS est une bibliothèque de recherche vectorielle par Meta.",
]

# Encoder tous les documents
response = client.embeddings.create(
    model="mistral-embed",
    inputs=documents,
)

# Convertir en matrice NumPy pour les calculs
embeddings_matrix = np.array([d.embedding for d in response.data])

print(f"Matrice d'embeddings: {embeddings_matrix.shape}")
# Matrice d'embeddings: (5, 1024)

# Sauvegarder pour usage ultérieur
np.save("document_embeddings.npy", embeddings_matrix)

La sauvegarde en .npy évite de repayer l’encodage à chaque redémarrage de votre application. Sur un corpus de plusieurs milliers de documents, c’est la différence entre un démarrage instantané et plusieurs minutes d’appels API facturés.

Limites et bonnes pratiques

Quatre points conditionnent la qualité de ce que vous obtiendrez. D’abord la longueur maximale : le modèle tronque les textes trop longs, et la troncature est silencieuse — un rapport de quarante pages encodé d’un bloc ne représentera en réalité que son début. Préférez des chunks de 512 à 2048 tokens, sujet de la leçon consacrée au chunking.

Ensuite, contrairement à d’autres APIs, mistral-embed ne distingue pas query et document : il n’y a pas de type d’input, vous passez simplement le texte. Concrètement, la question de l’utilisateur et les documents indexés passent par le même appel, avec les mêmes paramètres, ce qui simplifie votre code de recherche.

Le troisième point est le coût : les embeddings sont facturés au token. Encoder mille documents un par un coûte le même prix en tokens que de les encoder groupés, mais multiplie les allers-retours réseau et le temps de traitement ; on optimise donc en regroupant les appels, c’est l’objet de la leçon suivante sur le batching. Enfin, le déterminisme joue en votre faveur : pour un même texte, le modèle retourne toujours le même vecteur. Vous pouvez donc mettre en cache les embeddings par empreinte du texte et ne réencoder que ce qui a réellement changé entre deux versions d’un document.

Points clés à retenir

  • mistral-embed produit des vecteurs de 1024 dimensions pour tout texte
  • L’API accepte une liste d’inputs et retourne les vecteurs correspondants
  • Les vecteurs sont des listes de float, facilement convertibles en NumPy
  • Stockez vos embeddings en matrice NumPy pour les calculs de similarité
  • Pensez à découper les textes longs avant l’encodage