Le Modèle codestral-embed
Embeddings spécialisés pour le code
Alors que mistral-embed est conçu pour le texte naturel, codestral-embed est un modèle d’embedding optimisé spécifiquement pour les langages de programmation. Il comprend la syntaxe, la sémantique et la logique du code, ce qui le rend nettement supérieur à un modèle textuel générique pour toutes les tâches liées au code source.
Caractéristiques techniques
Le modèle codestral-embed se distingue de mistral-embed sur plusieurs points :
- Dimensions par défaut : 1536 (contre 1024 pour mistral-embed)
- Dimensions maximales : 3072 (le double du défaut)
- Types de sortie : float, int8, uint8, binary, ubinary
- Optimisation : entraîné sur du code source multi-langage
Utilisation de base
L’API est identique à mistral-embed, avec le nom de modèle codestral-embed :
from mistralai import Mistral
client = Mistral(api_key=api_key)
# Encoder des snippets de code
response = client.embeddings.create(
model="codestral-embed",
inputs=[
"def fibonacci(n): return n if n <= 1 else fibonacci(n-1) + fibonacci(n-2)",
"function fibonacci(n) { return n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2); }",
"public int fibonacci(int n) { return n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2); }",
],
)
for i, data in enumerate(response.data):
print(f"Snippet {i+1}: vecteur de {len(data.embedding)} dimensions")
# Snippet 1: vecteur de 1536 dimensions
# Snippet 2: vecteur de 1536 dimensions
# Snippet 3: vecteur de 1536 dimensions
Remarquez que les trois snippets implémentent la même logique (Fibonacci) dans trois langages différents. Leurs embeddings seront très proches malgré la syntaxe différente.
Paramètre output_dimension
Vous pouvez réduire la taille des vecteurs pour économiser de l’espace de stockage, au prix d’une légère perte de précision :
# Dimensions réduites (512 au lieu de 1536)
response = client.embeddings.create(
model="codestral-embed",
output_dimension=512,
inputs=["def hello(): print('Hello, World!')"],
)
embedding = response.data[0].embedding
print(f"Dimensions: {len(embedding)}") # 512
Les premières dimensions du vecteur sont les plus informatives. Le modèle est conçu pour que les n premières dimensions conservent un maximum d’information, ce qui permet cette réduction sans perte catastrophique.
Choix de la dimension
# Recommandations par cas d'usage
DIMENSIONS = {
"recherche_precise": 3072, # Qualité maximale
"usage_general": 1536, # Défaut, bon compromis
"gros_volume": 768, # Compromis stockage/qualité
"prototype": 512, # Développement rapide
"embarque": 256, # Contrainte mémoire forte
}
Paramètre output_dtype
Le type de sortie contrôle la précision et la taille des valeurs :
# Float (défaut) - précision maximale
response_float = client.embeddings.create(
model="codestral-embed",
output_dtype="float",
inputs=["def add(a, b): return a + b"],
)
# Int8 - 4x plus compact que float32
response_int8 = client.embeddings.create(
model="codestral-embed",
output_dtype="int8",
inputs=["def add(a, b): return a + b"],
)
# Binary - extrêmement compact
response_binary = client.embeddings.create(
model="codestral-embed",
output_dtype="binary",
inputs=["def add(a, b): return a + b"],
)
Combiner dimension et dtype
Vous pouvez combiner les deux paramètres pour un contrôle précis :
# Compact et rapide : 512 dimensions en int8
response = client.embeddings.create(
model="codestral-embed",
output_dimension=512,
output_dtype="int8",
inputs=["SELECT * FROM users WHERE active = true"],
)
# Haute qualité : 3072 dimensions en float
response = client.embeddings.create(
model="codestral-embed",
output_dimension=3072,
output_dtype="float",
inputs=["SELECT * FROM users WHERE active = true"],
)
Langages supportés
codestral-embed fonctionne avec tous les langages de programmation courants :
- Python, JavaScript, TypeScript
- Java, C, C++, C#, Go, Rust
- SQL, HTML, CSS
- Shell/Bash, YAML, JSON
- Et bien d’autres (tout langage présent dans les données d’entraînement)
Points clés à retenir
- codestral-embed est optimisé pour le code source, pas le texte naturel
- 1536 dimensions par défaut, extensible jusqu’à 3072
- Le paramètre
output_dimensionpermet de réduire la taille des vecteurs - Le paramètre
output_dtypecontrôle la précision (float, int8, binary, etc.) - Le modèle comprend la sémantique du code indépendamment du langage