Embedders
Les Embedders convertissent du texte en plongements vectoriels pour la recherche sémantique. Les plongements capturent le sens sémantique du texte, permettant de trouver des concepts similaires même avec des formulations différentes.
API Embedder
Tous les embedders implémentent la classe de base abstraite Embedder, qui fournit quatre méthodes :
| Méthode | Signature | Description |
|---|---|---|
embed | (texts: list[str], context: RetrievalContext = RetrievalContext()) -> EmbeddingResult | Méthode principale : générer les embeddings d’un lot de chaînes de caractères. |
embed_chunks | (chunks: list[DocumentChunk]) -> list[DocumentChunk] | Plonger des fragments et renvoyer des copies avec les plongements définis. |
embed_query | (text: str, context: RetrievalContext = RetrievalContext()) -> list[float] | Plonger une seule chaîne de caractères et renvoyer le vecteur. |
process | (document: Document, context: IngestContext) -> Document | Vectorise les fragments d'un document. Pipeline l'appelle. |
Seule la méthode embed est abstraite. Les autres méthodes sont construites à partir de celle-ci.
EmbeddingResult
Retourné par embed :
from pydantic import BaseModel
class EmbeddingResult(BaseModel):
embeddings: list[list[float]] # One embedding per input
total_tokens: int # Total tokens consumedMistral Embedder
MistralEmbedder appelle l'API de représentations vectorielles de Mistral pour vectoriser du texte.
Installation : Bibliothèque principale (aucune dépendance supplémentaire requise)
Exemple :
from mistralai.client import Mistral
from mistralai.search.toolkit.embedding import MistralEmbedder, MODEL_1024_EMBEDDING
client = Mistral(api_key="your-api-key")
embedder = MistralEmbedder(
client=client,
model_name=MODEL_1024_EMBEDDING,
)
embedded_chunks = await embedder.embed_chunks(chunks)Configuration :
| Option | Type | Valeur par défaut | Objectif |
|---|---|---|---|
model_name | str | MODEL_128_EMBEDDING | Modèle de représentations vectorielles à utiliser (voir les constantes de modèle dans le tableau suivant) |
client | Mistral | None | None | Client Mistral. Quand la valeur est None, l'embedder en construit un à partir de MISTRAL_API_KEY |
max_concurrency | int | asyncio.Semaphore | None | 10 | Nombre maximal de requêtes simultanées de représentations vectorielles |
Constantes de modèle d'embedding :
Utilisez ces constantes prédéfinies lors de la configuration de MistralEmbedder. Les dimensions doivent correspondre à l'embedding_model défini dans le schéma de votre index. Associez chaque constante au MistralEmbeddingPreset correspondant (voir Modèles d'embedding).
| Constante | Nom du modèle | Dimensions | Preset correspondant | Recommandé pour |
|---|---|---|---|---|
MODEL_1024_EMBEDDING | "mistral-embed" | 1024 | MistralEmbeddingPreset.MISTRAL_EMBED_DIM_1024 | Modèle à dimensions complètes ; à passer explicitement |
MODEL_256_EMBEDDING | "mistral-embed-dim256-2510" | 256 | MistralEmbeddingPreset.MISTRAL_EMBED_DIM_256 | Environnements à faible latence et contrainte mémoire |
MODEL_128_EMBEDDING | "mistral-embed-dim128-2510" | 128 | MistralEmbeddingPreset.MISTRAL_EMBED_DIM_128 | Dimensions minimales ; valeur par défaut de MistralEmbedder |
Importation et utilisation :
from mistralai.search.toolkit.embedding import MistralEmbedder, MODEL_1024_EMBEDDING, MODEL_256_EMBEDDING, MODEL_128_EMBEDDING
# Use the full-dimension model
embedder = MistralEmbedder(client=client, model_name=MODEL_1024_EMBEDDING)
# Or use a different model for specific use cases
embedder_compact = MistralEmbedder(client=client, model_name=MODEL_256_EMBEDDING)Traitement par batch (automatique) :
# embed_chunks handles batching internally
chunks_with_embeddings = await embedder.embed_chunks(chunks)
# For custom batching, embed() returns an EmbeddingResult (result.embeddings)
result = await embedder.embed([
"text 1",
"text 2",
"text 3",
])Embedders personnalisés
Implémentez la classe de base Embedder avec une seule méthode embed :
from mistralai.search.toolkit.context import RetrievalContext
from mistralai.search.toolkit.embedding import Embedder, EmbeddingResult
class MyEmbedder(Embedder):
async def embed(self, texts: list[str], context: RetrievalContext = RetrievalContext()) -> EmbeddingResult:
embeddings = my_provider.embed(texts)
return EmbeddingResult(
embeddings=embeddings,
total_tokens=sum(len(t.split()) for t in texts),
)
embedder = MyEmbedder(model_name="my-model") # Embedder.__init__ requires model_nameLes méthodes embed_chunks et embed_query sont héritées automatiquement.
Lorsque vous utilisez un embedder personnalisé, déclarez un CustomEmbeddingModel dans le schéma de votre index avec les mêmes dimensions, le même type de données et la même métrique de distance. Le schéma décrit l'index, tandis que l'embedder produit les vecteurs. Ils doivent utiliser la même forme de vecteur. Consultez Modèles d'embedding pour distinguer MistralEmbeddingModel et CustomEmbeddingModel.