Retrieval (RAG)
Antworten aus abgerufenen Textstellen, wobei die Antwort im gelieferten Kontext bleiben muss und ein Reranker oft so viel zählt wie das generierende Modell.
Der Router ordnet eine Aufgabe den möglichen Modellen zu und wendet dann Ihre Richtlinie an: zuerst Region, dann Preis, dann das Modell mit dem besser dokumentierten Ergebnis.
Bevorzuge ein generierendes Modell mit dokumentiertem Quellenverhalten und langem Kontextfenster, halte Embedding- und Reranker-Modell in derselben Residenzgrenze und route Dokumentenextraktion auf ein spezielles OCR-Modell.
{"model":"llmeu-auto","messages":[{"role":"user","content":"…"}],"llmeu":{"task":"rag"}}
Empfohlen
Retrieval-Augmented Generation (RAG) ist das Muster, bei dem ein Sprachmodell aus Textstellen antwortet, die die Anwendung ihm vorlegt, statt aus dem, was es im Training gespeichert hat. Das Modell ist der letzte Schritt dieser Pipeline, nicht die ganze: Zuerst muss etwas die Textstellen finden, und in einer mehrsprachigen europäischen Bereitstellung sind das meist drei getrennte Modelle.
Was sich ändert, wenn die Antwort aus abgerufenen Textstellen kommt
In einer einfachen Chat-Anfrage sind die Gewichte des Modells die einzige Faktenquelle. Bei RAG liefert die Anwendung die Fakten: Sie durchsucht einen Korpus, den sie kontrolliert, legt die besten Textstellen in den Prompt und lässt das Modell daraus antworten. Die Obergrenze der Antwortqualität setzt das, was das Retrieval zurückgegeben hat; Embedding-Modell und Reranker entscheiden also mehr über die endgültige Antwort als eine Stufe stärkerer Generator.
Diese Trennung ist in der API sichtbar. Nur die letzte Stufe ist eine OpenAI-kompatible Chat-Completion; Embedding und Reranking sind eigene Aufrufe mit eigenen Modellen. LLM EU führt das Muster als Aufgabe `rag`, und der Router akzeptiert sie im Request-Body als `"task": "rag"` neben den üblichen Chat-Feldern.
Die vier Stufen und die Karten, die der Katalog dafür empfiehlt
Einmal indexieren: Dokumente in Blöcke teilen und jeden Block einbetten. Zur Laufzeit abfragen: die Frage einbetten, die nächsten Vektoren nehmen, diese Kandidaten mit einem Cross-Encoder neu ordnen und die überlebenden Textstellen an den Generator geben. Vier Stufen, von denen drei ein anderes Modell sein können.
Zwei Embedding-Karten stehen auf der RAG-Liste. multilingual-e5-large ist ein XLM-RoBERTa-Modell mit 560M Parametern unter der MIT-Lizenz und rund 100 angegebenen Sprachen; die Karte verwendet eine maximale Sequenzlänge von 512 Token und kein Instruktionspräfix, Dokumente und Anfragen müssen also gleich eingebettet werden. embeddinggemma-300m ist mit 308M Parametern kleiner und nimmt 2048 Token auf, bei 768-dimensionaler Ausgabe, die sich auf 512, 256 oder 128 Dimensionen kürzen lässt; es erscheint unter Googles Gemma-Bedingungen, nicht unter einer OSI-Lizenz.
Beide Reranker sind Cross-Encoder: Sie betten keinen Index ein und erzeugen keinen Text, sondern bewerten eine Anfrage gegen eine Textstelle und gehören hinter die Vektorsuche. gte-multilingual-reranker-base hat 305M Parameter, ein Eingabelimit von 8192 Token und 75 angegebene Sprachen unter Apache-2.0; die Karte merkt an, dass die Beispiele auf 512 Token kürzen, sofern nichts anderes konfiguriert ist. llama-nemotron-rerank-1b-v2 hat 1,24B Parameter unter OpenMDW-1.1 und wurde laut Karte auf 26 Sprachen evaluiert, bis 8192 Token, ohne veröffentlichten Benchmark-Wert.
Für den Generator ist command-r-08-2024 die für dieses Muster gebaute Karte: 32,3B Parameter, 128K Kontext und Antworten, die die abgerufenen Dokumente belegen — unter CC-BY-NC-4.0, was kommerzielles Bereitstellen ausschließt. command-a-plus-05-2026 ist das Apache-2.0-Gegenstück mit 48 angegebenen Sprachen. Eingescanntes Papier geht zuerst durch glm-ocr, ein kleines MIT-Dokument-OCR-Modell mit dem Task-Tag rag.
Blockgröße nach der kleinsten Grenze der Kette
Die drei Grenzen der Kette sind 512, 2048 und 8192 Token, und die kleinste entscheidet. Wer mit multilingual-e5-large einbettet, dessen 900-Token-Block wird beim Einbetten gekürzt — still, egal wie gut der Generator ist. Die Blocklänge richtet sich nach der Embedding-Karte, nicht nach dem Kontextfenster des Generators.
Ein Reranker sieht Anfrage und Textstelle in einer Eingabe, also beide Teile einplanen und die Kürzung bewusst festlegen. Reranking ist ein Vorwärtsdurchlauf pro Kandidat: gib ihm eine Auswahl aus der Vektorsuche statt des ganzen Index und dem Generator nur die überlebenden Textstellen. Sprachlisten zählen, wenn Anfrage und Dokument in verschiedenen Sprachen sind: gte-multilingual-reranker-base nennt 75 Sprachen, llama-nemotron-rerank-1b-v2 wurde auf 26 evaluiert; ein Paar außerhalb der Liste einer Karte ist für dieses Modell unbelegt, nicht falsch, und keine Sprachliste ersetzt einen Test am eigenen Korpus.
Eine Anfrage, die der Router versteht
Das ist die Form, die /docs/quickstart ausgibt: ein POST auf /v1/chat/completions, ein Bearer-Schlüssel und ein namensraumgebundenes llmeu-Objekt neben den Standardfeldern. Das Modell `llmeu-auto` lässt den Router wählen; residency grenzt die Kandidatenmenge ein, task sagt dem Scoring, wofür die Anfrage gedacht ist. Offizielle SDKs ignorieren unbekannte Felder.
Die Antwort ergänzt einen llmeu-Block: trace_id, model_used, model_version, endpoint_id, inference_region, sovereignty_class, route_reason, retention und cost_estimate_usd. route_reason ist ein Satz, kein Code — für eine Coding-Anfrage liest er sich so: „auto routing for task "coding" + residency eu-hosted + qwen3-coder-30b @ de-ber (EU-owned, EU-operated); 4 endpoint(s) excluded; partner endpoints not allowed."
curl https://YOUR-API-ORIGIN/v1/chat/completions \
-H "Authorization: Bearer $LLMEU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "llmeu-auto",
"messages": [{"role": "user", "content": "Answer only from these passages and cite them.\n\n[1] …\n\nQuestion: …"}],
"llmeu": {"residency": "eu-hosted", "task": "rag"}
}'
Residenz: eine Grenze für die ganze Pipeline
Die Regel für eine Retrieval-Pipeline lautet: Retrieval, Embedding, Reranking und Generierung bleiben innerhalb einer Grenze. Eine Ebene ist schnell ausgeschert: Die Anfrage erreicht das Embedding-Modell, die Textstellen erreichen den Reranker, der zusammengesetzte Prompt erreicht den Generator. Läuft eine dieser Stufen unter einer anderen Jurisdiktion als der zugesagten, ist die Zusage schon gebrochen — auch wenn der Chat-Aufruf selbst innerhalb der EU geroutet wurde.
Was der Router zusichert, ist enger: Residenz ist ein Filter vor dem Scoring, nie eine Präferenz danach. Erfüllt kein Endpunkt sie, antwortet die Anfrage mit 409 no_endpoint_for_policy, Failover kann die gefilterte Menge nicht verlassen, und catalogue_unknown ist gar keine adressierbare Residenz, weil eine Zeile, die sie zulässt, nicht weiß, wo sie läuft.
Zwei Grenzen gehören daneben. Die Klassen ordnen Eigentum, Betrieb und Standort ein — kein rechtlicher Schutz gegen Herausgabe — und LLM EU ist ein privates Unternehmen, hier wird also kein Konformitätsstatus ausgestellt. Hosting ist Plattformzustand aus Endpunktzeilen: Die Embedding-Route antwortet in diesem Stand mit Platzhalter-Vektoren und markiert ihre Antwort mit llmeu.mock. GET /v1/models listet nur, was ein Schlüssel wirklich aufrufen darf, und eine Karte ohne lebenden Endpunkt trägt „nur im Katalog, noch nicht bei LLM EU gehostet".
Antworten, die sich hinterher prüfen lassen
Zwei Gewohnheiten machen eine Bereitstellung prüfbar. Den Generator belegen lassen: Er soll nur aus den gelieferten Textstellen antworten und sagen, wenn sie die Antwort nicht enthalten — eine Eigenschaft, die die Karte von command-r-08-2024 ausdrücklich nennt. Den Trace behalten: Jede Antwort trägt trace_id, und GET /platform/v1/traces/{id} liefert die gespeicherte Zeile.
Die Aufbewahrung gehört zu diesem Nachweis. Zero ist Standard und der einzige implementierte Modus: Prompt- und Antworttexte werden nie in die Datenbank geschrieben, die Spalten bleiben NULL. Eine Richtlinie kann 24h, 7d oder 30d als Auswahl speichern, was keine Speicherung aktiviert — eine Anfrage oberhalb der Grenze ergibt 403 retention_exceeds_policy, eine erlaubte effektive Aufbewahrung ungleich zero ergibt 501 retention_not_implemented. Ein Trace ist die eigene Betriebsaufzeichnung der Plattform, keine Geolokalisierung und keine Konformitätsbewertung, und die genannten Karten tragen keinen von LLM EU erhobenen Retrieval-Benchmark.
Häufige Fragen
Ist RAG ein Modell, das ich aufrufen kann?
Nein. RAG ist eine Pipeline, und nur ihre letzte Stufe ist eine Chat-Completion. Embedding und Reranking sind eigene Aufrufe mit eigenen Modellen; der Router akzeptiert llmeu.task = "rag" an der Generierungsanfrage.
Mit welchem Embedding-Modell fange ich an?
Mit multilingual-e5-large, wenn MIT-Lizenz, rund 100 angegebene Sprachen und Blöcke bis 512 Token zum Korpus passen. Mit embeddinggemma-300m, wenn es 2048 Token Eingabe oder 768 Dimensionen gekürzt auf 512, 256 oder 128 sein sollen — unter Gemma-Bedingungen, nicht unter einer OSI-Lizenz.
Brauche ich einen Reranker?
Er ist meist der günstigste Qualitätsgewinn der Kette: Der Routing-Hinweis der Aufgabe sagt, ein Reranker zähle oft so viel wie der Generator. Beide empfohlenen Reranker sind Cross-Encoder, sitzen also hinter der Vektorsuche und ersetzen das Embedding-Modell nicht.
Darf ich Command R kommerziell einsetzen?
Nicht mit command-r-08-2024 als Generator: Seine Gewichte stehen unter CC-BY-NC-4.0, was kommerzielles Bereitstellen ausschließt. command-a-plus-05-2026 steht unter Apache-2.0 und nennt 48 Sprachen. Prüfe die Lizenz der Karte, die du wählst.
Was passiert, wenn kein Endpunkt zu meiner Residenz passt?
Dann kommt 409 no_endpoint_for_policy statt einer Antwort von nebenan. Failover kann die gefilterte Menge nicht erweitern. Die Grenze zu erweitern bleibt deine Entscheidung; der Router tut es nicht still.
Stellt LLM EU Embeddings und einen Vektorspeicher bereit?
POST /v1/embeddings existiert und setzt ein gehostetes Embedding-Modell voraus; in diesem Stand antwortet die Route mit Platzhalter-Vektoren und markiert die Antwort mit llmeu.mock. Den Vektorindex betreibst du selbst.