Multimodale Architektur von Mistral-Modellen
Auf dieser Seite
Wie verarbeitet ein Modell Text und Bilder?
Wenn Sie ein Bild an ein Mistral-Modell senden, „sieht” es es nicht so, wie ein Mensch. Die Verarbeitung stützt sich auf eine zweistufige Architektur: Zuerst wandelt ein visueller Encoder das Bild in eine Sequenz numerischer Tokens um; anschließend verarbeitet das Sprachmodell diese visuellen Tokens gemeinsam mit den Text-Tokens Ihres Prompts.
Diese Lektion mag theoretisch erscheinen, ist aber der kosteneffizienteste Teil des Kurses. Das Verständnis dieses Mechanismus erklärt, warum ein 4K-Bild keine besseren Ergebnisse liefert als ein 1080p-Bild, warum Ihre monatliche Rechnung schneller mit fünf Bildern als mit fünf Absätzen ansteigt und warum winziger Text auf einem Screenshot oft schlecht transkribiert wird.
Der visuelle Encoder
Der visuelle Encoder ist ein spezialisiertes neuronales Netz – typischerweise ein Vision Transformer (ViT) –, das das Bild in kleine quadratische Patches zerschneidet, beispielsweise 14×14 Pixel, und diese in numerische Embeddings umwandelt. Die Pipeline läuft in fünf Schritten ab:
- Vergrößerung: Das Bild wird auf eine Standardauflösung skaliert (z. B. 384×384 oder 768×768 Pixel)
- Patch-Extraktion: Das skalierte Bild wird in regelmäßige Patches unterteilt
- Projektion: Jedes Patch wird in einen numerischen Vektor (Embedding) umgewandelt
- Positionales Encoding: Positionsinformation für jedes Patch wird hinzugefügt
- Attention: Der visuelle Transformer verarbeitet die vollständige Sequenz
Das Ergebnis ist eine Sequenz von visuellen Tokens, die vollständig mit Text-Tokens vergleichbar sind, außer dass sie Regionen des Bildes statt Wortfragmente repräsentieren. Der erste Schritt verdient Ihre Aufmerksamkeit: Er erklärt, warum ein 4.000 Pixel breiter Rechnungsscan bereits vor Beginn der Analyse auf wenige hundert Pixel reduziert wird. Zeichen in feiner Schrift, die ohnehin an der Grenze der Lesbarkeit liegen, werden zu wenigen unscharfen Pixeln.
Text-Bild-Fusion im LLM
Sobald die visuellen Tokens erzeugt sind, werden sie in die Eingabesequenz des Sprachmodells neben die Text-Tokens eingefügt. Das Modell verarbeitet alles einheitlich dank des Cross-Attention-Mechanismus.
[text tokens: "Beschreibe dieses Bild"] + [visuelle Tokens: patch1, patch2, ..., patchN]
↓
Sprachmodell (LLM)
↓
[Ausgabetokens: "Dieses Bild zeigt..."]
Das Modell kann somit Bild und Text gleichzeitig „lesen”, wodurch es spezifische Fragen zum visuellen Inhalt beantworten kann. Dies erklärt auch, warum eine Frage, die vor dem Bild gestellt wird, und eine, die danach gestellt wird, nicht exakt das gleiche Ergebnis liefern: Alles befindet sich in derselben Sequenz, und die Reihenfolge ist von Bedeutung.
Auswirkungen auf die Token-Zählung
Jedes Bild verbraucht eine bestimmte Anzahl von Tokens, abhängig von seiner Auflösung nach der Vergrößerung. Dies ist der Schlüsselpunkt für die Kostenschätzung. Ein Standardbild von etwa 768×768 Pixeln verbraucht zwischen 800 und 1.500 Tokens – das entspricht einer oder zwei Seiten Text. Größere Bilder werden vor der Verarbeitung skaliert: Das Senden eines 4K-Bildes kostet nicht mehr als ein 1080p-Bild, bringt aber auch keinen Vorteil. Zu diesem Gesamtwert fügen Sie die Tokens Ihres Prompts und der generierten Antwort hinzu.
# Beispiel: Schätzung der Kosten für einen Vision-Aufruf
tokens_image = 1000 # Durchschnittsschätzung
tokens_prompt = 50 # "Beschreibe dieses Bild im Detail"
tokens_response = 200 # Geschätzte Antwort
total_tokens = tokens_image + tokens_prompt + tokens_response
print(f"Geschätzte Gesamt-Token: {total_tokens}")
# → Geschätzte Gesamt-Token: 1250
Führen Sie diese Berechnung vor der Industrialisierung auf Ihrem eigenen Volumen durch: Tausend Bilder pro Tag stellen mindestens eine Million Eingabetoken dar und verschieben das Gespräch vom Prototyp zum Budget.
Größen- und Auflösungsbeschränkungen
Mistral akzeptiert JPEG, PNG, GIF (erstes Bild) und WebP-Formate, mit einer maximalen Größe von etwa 20 MB pro Bild. Mehrere Bilder können in einer einzigen Nachricht koexistieren, ein Thema, das wir in Lektion 6 behandeln werden. Die kontraintuitivste Einschränkung bleibt die interne Vergrößerung: Sehr hohe Auflösungen verbessern die Ergebnisse nicht; sie verlängern lediglich die Übertragungszeit.
Die praktische Konsequenz ist, dass Sie Bilder vorab selbst vergrößern sollten, anstatt die API dies nach einer unnötig schweren Übertragung zu tun:
from PIL import Image
def prepare_image(path, max_size=1024):
"""Vergrößert ein Bild vor dem Senden, um die Latenz zu optimieren."""
img = Image.open(path)
img.thumbnail((max_size, max_size))
img.save(path, quality=85)
return path
Fügen Sie diese Funktion direkt vor der Base64-Kodierung oder der URL-Hostung ein. Bei einer Charge von 4 MB Smartphone-Fotos schneidet dies das übertragene Volumen um einen signifikanten Faktor, ohne die Qualität für die Analyse nennenswert zu beeinträchtigen.
Vereinfachte Architektur
End-to-End lässt sich eine Anfrage-Reise auf fünf Schritte reduzieren: Sie senden eine Nachricht mit Text und einem oder mehreren Bildern; die API vergrößert jedes Bild und sendet es an den visuellen Encoder; die resultierenden visuellen Tokens verschmelzen mit den Text-Tokens; das Modell generiert eine Antwort in natürlicher Sprache; Sie erhalten sie genau wie bei einem Standard-Textaufruf. An Ihrer API-Seite ändert sich nichts – Mistral übernimmt die gesamte Komplexität –, aber das bedeutet nicht, dass Sie ignorieren können, was es Ihnen kostet.
Kernaussagen
- Bilder werden durch einen Vision-Transformer-Encoder in visuelle Tokens umgewandelt
- Das LLM verarbeitet diese visuellen Tokens genau wie Text-Tokens
- Ein Standardbild verbraucht etwa 800 bis 1.500 Tokens
- Bilder werden intern vergrößert – es besteht kein Bedarf, sehr hohe Auflösungen zu senden
- Das Vergrößern von Bildern auf der Client-Seite reduziert die Latenz ohne Qualitätsverlust