Zum Hauptinhalt springen
Lektion 5 von 18 · Embeddings, RAG und semantische Suche

Das codestral-embed-Modell

Lektion 5 von 18 Aktualisiert am 2. November 2026 Entwickler
Auf dieser Seite
  1. Spezialisierte Einbettungen für Code
  2. Technische Spezifikationen
  3. Grundlegende Verwendung
  4. Der output_dimension-Parameter
  5. Der output_dtype-Parameter
  6. Kombination von Dimension und Datentyp
  7. Unterstützte Sprachen
  8. Kernaussagen

Spezialisierte Einbettungen für Code

Während mistral-embed für natürliche Sprache konzipiert ist, ist codestral-embed ein Einbettungsmodell, das speziell für Programmiersprachen optimiert wurde. Es versteht Code-Syntax, Semantik und Logik, wodurch es bei Aufgaben mit Quellcode deutlich überlegen ist als ein generisches Textmodell.

Sie können den Unterschied in einem einfachen Fall erkennen. Zwei Funktionen, die dasselbe tun – eine mit einer for-Schleife geschrieben und die andere mit List Comprehension – teilen fast keine Token. Ein Textmodell sieht sie als zwei getrennte Blöcke von Zeichensymbolen; ein Modell, das auf Code trainiert wurde, bringt sie zusammen, weil es gelernt hat, dass diese beiden Formen denselben Zweck ausdrücken.

Technische Spezifikationen

Das codestral-embed-Modell unterscheidet sich vom mistral-embed in mehreren Schlüsselbereichen:

Featurecodestral-embedmistral-embed
Standarddimensionen15361024
Maximale Dimensionen3072 (das Doppelte des Standards)—
Ausgabetypenfloat, int8, uint8, binary, ubinary—
OptimierungTrainiert auf mehrsprachigem QuellcodeNatürliche Sprache

Diese Flexibilität bei Dimensionen und Ausgabetypen ist es, was die beiden Modelle in der Praxis wirklich voneinander unterscheidet. Ein Code-Index erreicht schnell eine Million Vektoren, und die Möglichkeit, ihr Gewicht um das Vierfache zu reduzieren, verändert die Infrastrukturkosten.

Grundlegende Verwendung

Die API ist identisch mit mistral-embed, außer beim Modellnamen codestral-embed. In Ihrem Aufrufcode ändert sich nichts anderes, was es ermöglicht, beide Modelle im selben Projekt zu betreiben, indem Sie nur einen Parameter anpassen.

from mistralai.client import Mistral

client = Mistral(api_key=api_key)

# Codestücke codieren
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"Ausschnitt {i+1}: Vektor mit {len(data.embedding)} Dimensionen")
# Ausschnitt 1: Vektor mit 1536 Dimensionen
# Ausschnitt 2: Vektor mit 1536 Dimensionen
# Ausschnitt 3: Vektor mit 1536 Dimensionen

Beachten Sie, dass alle drei Ausschnitte dieselbe Logik (Fibonacci) in drei verschiedenen Sprachen implementieren. Ihre Einbettungen werden sehr ähnlich sein, trotz der syntaktischen Unterschiede. Diese Eigenschaft ermöglicht die Suche über Sprachen hinweg: Ein Python-Entwickler kann in einem mehrsprachigen Codebestand die Java-Implementierung finden, die er benötigt, ohne ein Wort Java zu kennen.

Der output_dimension-Parameter

Sie können die Vektorgröße reduzieren, um Speicherplatz zu sparen, auf Kosten eines leichten Verlusts an Präzision:

# Reduzierte Dimensionen (512 statt 1536)
response = client.embeddings.create(
    model="codestral-embed",
    output_dimension=512,
    inputs=["def hello(): print('Hello, World!')"],
)

embedding = response.data[0].embedding
print(f"Dimensionen: {len(embedding)}")  # 512

Die ersten Dimensionen des Vektors sind die informativsten. Das Modell ist so konzipiert, dass die ersten n Dimensionen die maximale Informationsmenge beibehalten, was diese Reduktion ohne katastrophalen Verlust ermöglicht. Mit anderen Worten: Das Kürzen eines Vektors ist nicht wie das zufällige Wegwerfen eines Drittels der Bedeutung; Sie behalten das Kernsignal und verlieren die Nuance, was für eine initiale Filterung völlig tragfähig bleibt.

Dimension wählen

Verwenden Sie die folgenden Werte als Richtlinien basierend auf Ihrem Projekt-Kontext. Hochpräzise Suche in einem bescheidenen Korpus erfordert andere Einstellungen als ein Index auf einer ressourcenbeschränkten Maschine:

# Empfehlungen nach Verwendungszweck
DIMENSIONS = {
    "high_precision_search": 3072,   # Maximale Qualität
    "general_use": 1536,             # Standard, guter Kompromiss
    "large_volume": 768,             # Speicher/Qualitäts-Abwägung
    "prototype": 512,                # Schnelle Entwicklung
    "embedded": 256,                 # Strenge Speicherbeschränkungen
}

Der output_dtype-Parameter

Der Ausgabetyp steuert die Präzision und Größe der Werte. Während output_dimension die Anzahl der Werte reduziert, reduziert output_dtype das Gewicht jedes einzelnen. Diese beiden Hebel sind unabhängig und kumulativ.

# Float (Standard) - maximale Präzision
response_float = client.embeddings.create(
    model="codestral-embed",
    output_dtype="float",
    inputs=["def add(a, b): return a + b"],
)

# Int8 - 4x kompakter als float32
response_int8 = client.embeddings.create(
    model="codestral-embed",
    output_dtype="int8",
    inputs=["def add(a, b): return a + b"],
)

# Binary - extrem kompakt
response_binary = client.embeddings.create(
    model="codestral-embed",
    output_dtype="binary",
    inputs=["def add(a, b): return a + b"],
)

Kombination von Dimension und Datentyp

Sie können beide Parameter kombinieren, um präzise Kontrolle zu erhalten. Die beiden Aufrufe unten codieren dieselbe SQL-Abfrage und illustrieren die Extreme des Spektrums: das erste Ziel ist ein leichtgewichtiger Index, der kontinuierlich abgefragt wird, während das zweite eine Referenzsuche dient, bei der jeder Punkt an Präzision zählt.

# Kompakt und schnell: 512 Dimensionen in int8
response = client.embeddings.create(
    model="codestral-embed",
    output_dimension=512,
    output_dtype="int8",
    inputs=["SELECT * FROM users WHERE active = true"],
)

# Hohe Qualität: 3072 Dimensionen in float
response = client.embeddings.create(
    model="codestral-embed",
    output_dimension=3072,
    output_dtype="float",
    inputs=["SELECT * FROM users WHERE active = true"],
)

Hier ist eine Regel, die Sie sich jetzt merken sollten: Vektoren in Ihrem Index und Vektoren in Ihren Abfragen müssen exakt dieselben Parameter teilen. Das Codieren eines Korpus in 512 Dimensionen und anschließende Abfrage in 1536 Dimensionen führt nicht nur zu schlechten Ergebnissen; es erzeugt einen Fehler oder bedeutungslose Scores.

Unterstützte Sprachen

codestral-embed funktioniert mit allen gängigen Programmiersprachen. Auf der Anwendungsebene deckt es Python, JavaScript und TypeScript sowie Java, C, C++, C#, Go und Rust ab. Für Daten und Präsentation verarbeitet das Modell SQL, HTML und CSS. Für Tools und Konfiguration verwaltet es Shell/Bash, YAML und JSON – und viele andere, effektiv jede Sprache, die in den Trainingsdaten vorhanden ist. In der Praxis kann ein typischer Repository, das Python, HTML-Vorlagen, SQL-Migrationen und YAML-Manifeste mischt, vollständig mit einem einzigen Modell indiziert werden.

Kernaussagen

  • codestral-embed ist für Quellcode optimiert, nicht für natürliche Sprache
  • 1536 Dimensionen standardmäßig, skalierbar bis 3072
  • Der output_dimension-Parameter ermöglicht die Reduzierung der Vektorgröße
  • Der output_dtype-Parameter steuert die Präzision (float, int8, binary etc.)
  • Das Modell versteht Code-Semantik unabhängig von der Sprache