Aller au contenu principal

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_dimension permet de réduire la taille des vecteurs
  • Le paramètre output_dtype contrôle la précision (float, int8, binary, etc.)
  • Le modèle comprend la sémantique du code indépendamment du langage