Guide de démarrage : trouver le texte le plus proche avec les embeddings
Dans ce guide de démarrage, vous transformez trois documents courts et une question en embeddings, puis vous les comparez pour trouver le document dont le sens est le plus proche de la question, même s'ils ne partagent aucun mot. Comptez environ 5 minutes. Pour les modèles et leurs dimensions, consultez Embeddings.
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 embeddings --python 3.12 && cd embeddings
uv add mistralai
export MISTRAL_API_KEY="your-api-key"1. Écrire le script
Créez embeddings.py. Il transforme les documents et la question en embeddings en un seul appel, puis calcule pour chaque document un score de similarité cosinus :
import math
import os
from mistralai.client import Mistral
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
documents = [
"Our support team answers Monday to Friday, 9:00 to 18:00 CET.",
"Annual plans can be refunded within 30 days of purchase.",
"The API rate limit depends on your workspace tier.",
]
question = "Can I get my money back?"
response = client.embeddings.create(model="mistral-embed", inputs=documents + [question])
vectors = [item.embedding for item in response.data]
question_vector = vectors[-1]
def cosine(a: list[float], b: list[float]) -> float:
dot = sum(x * y for x, y in zip(a, b))
return dot / (math.sqrt(sum(x * x for x in a)) * math.sqrt(sum(y * y for y in b)))
scores = [cosine(question_vector, vector) for vector in vectors[:-1]]
for document, score in zip(documents, scores):
print(f"{score:.3f} {document}")
best = max(range(len(documents)), key=lambda i: scores[i])
print(f"\nClosest document: {documents[best]}")2. L'exécuter
uv run embeddings.pyRésultat attendu
Un score de similarité pour chaque document, puis le document le plus proche. La politique de remboursement l'emporte, bien que la question ne contienne jamais le mot « remboursement » :
0.675 Our support team answers Monday to Friday, 9:00 to 18:00 CET.
0.722 Annual plans can be refunded within 30 days of purchase.
0.616 The API rate limit depends on your workspace tier.
Closest document: Annual plans can be refunded within 30 days of purchase.Les scores exacts varient selon la version du modèle ; c'est l'ordre qui compte.