LLM-Auswahl über den Modellkatalog und ein gemeinsamer Aufrufweg
Status: angenommen. Datum: 03.11.2026, überarbeitet am 04.11.2026 (Ersatzmodell, Rückfrage bei abgelehnten Antworten).
Anlass
Das Team will Claude (Anthropic) vor allem für die Kriterienanalyse erproben. Die
Sprachmodelle waren an Google und OpenAI gebunden. Kriterienanalyse und
Projekt-Extraktion riefen Gemini je mit eigenem Code über google-genai auf, mit
doppelter Upload- und Abbruchlogik. Modellnamen standen verstreut in sechs
Umgebungsvariablen, und nur der Chat las die Modellwahl aus der Datenbank.
Entscheidung
- Die Modellwahl liegt in der Datenbank. Plattform-Admins pflegen den Katalog
procur_regx.llm_modelsin der Oberfläche; das Hinzufügen prüft das Modell live.platform_settings.agent_model_idgilt für Chat, Zusammenfassung langer Chats, Zertifikatserkennung und Website-Import,platform_settings.criteria_model_idfür Kriterienanalyse, Projekt-Extraktion und Dokumentanalyse. - Anbieter sind
google,openaiundanthropic. OpenAI-kompatible Endpunkte laufen überopenaimitOPENAI_BASE_URL. Schlüssel und Base-URLs stehen nur in der Umgebung, nie in der Datenbank oder in API-Anfragen. - Die Umgebung enthält genau ein Ersatzmodell:
LLM_MODELim Formatanbieter:modell, Standardgoogle:gemini-3.8-flash. Es gilt, wenn für einen Zweck nichts gewählt ist. Ein Wert ohne Anbieter stoppt den Start. Ist für das gewählte Modell kein Schlüssel gesetzt, schlägt der Aufruf fehl; ein anderer Anbieter springt nicht ein. Ebenso bricht die Kriterienanalyse ab, wenn die Auswahl wegen eines Datenbankfehlers nicht lesbar ist; nur die noch nicht migrierte Spalte zählt als „nichts gewählt“. Der Standard ist Gemini und nicht Claude, weil Claude Haiku 5.5 in der Kriterienanalyse noch nicht verlässlich arbeitet (siehe Folgen); Claude bleibt im Katalog für jeden Zweck wählbar. - Alle strukturierten Dokumentauswertungen laufen über
criteria_extraction/service.generate()und die direkten Aufrufe von Pydantic AI: genau eine Anfrage mit strukturierter Ausgabe, bei Claude gestreamt. Gemini erzwingt das Schema beim Generieren. OpenAI erhält es als Antwortformat, aber nicht im Strict-Modus, weil unsere Schemas dessen Regeln nicht erfüllen; es ist also nicht erzwungen. Claude erhält es in den Anweisungen, weil Anthropic strikte Schemas in eine Grammatik übersetzt, deren Größengrenze fünf der sechs Schemas überschreiten; die Antwort wird danach wie bei allen Anbietern mit Pydantic validiert. Ein weggelassenes Feld, das leer sein darf, und ein unbekanntes Feld mit dem Wert null gelten dabei als leer, weil beide keinen Inhalt tragen; alles andere bleibt streng. Scheitern Validierung oder die Abschlussprüfung des Schritts, fragtgenerate()einmal mit der Fehlerliste nach; eine zweite Ablehnung lässt den Schritt scheitern. Anbieterspezifisch bleiben sonst nur Vorbereitungsschritte: Gemini lädt große Dateien über die Files API hoch und nutzt einen expliziten Prompt-Cache, Claude markiert den System-Prompt für das Prompt-Caching. - Ein Kriterienlauf speichert beim Anlegen sein Modell als
anbieter:modellund behält es beim Fortsetzen. Modellaufrufe in Kriterienläufen wiederholt bei 429, 5xx und verlorener Verbindung allein der Worker; Gemini-Uploads behalten die Wiederholungen des SDK. So wird kein Aufruf auf zwei Ebenen wiederholt.
Folgen
- Ein Modellwechsel braucht keine Codeänderung; nur
MODEL_CONTEXT_WINDOWfür die Kontextanzeige des Chats bleibt ein Handwert in der Umgebung. Entfallen sindMODEL_PROVIDER,AGENT_GOOGLE_LLM_MODEL,AGENT_SUMMARY_LLM_MODEL(im Agenten) undCRITERIA_V2_MODEL. Alte.env-Werte ohne Anbieter-Präfix stoppen den Start mit einer Meldung. - Der Agent startet nur, wenn
LLM_MODELauf einen Anbieter mit Schlüssel zeigt; mit dem Standard ist dasGOOGLE_API_KEY, der ohnehin für Embeddings und Transkription nötig ist.ANTHROPIC_API_KEYbraucht er erst, wenn ein Claude-Modell gewählt ist. - Claude erhält Dokumente direkt in der Anfrage: höchstens 600 PDF-Seiten und 128 MB. Größere Bestände scheitern vor dem Aufruf; gekürzt wird nichts.
- Das Nutzungsprotokoll weist Kosten nur für Modelle mit hinterlegtem Preis aus (Gemini 3.8 Flash), für Claude nur Tokens.
- Gemini über Pydantic AI formt Schemas leicht anders um als der direkte SDK-Aufruf. Vergleichsläufe auf denselben Unterlagen sichern die Ergebnisqualität ab.
- Prompts sind auf Gemini abgestimmt; die Qualität anderer Modelle ist zu messen.
- Ohne erzwungenes Schema scheitern Claude-Antworten häufig an der Validierung. Eine
Messung am 04.11.2026 mit Claude Haiku 5.5 im Dokumentschritt (drei
TED-Bekanntmachungen mit 5, 8 und 18 Seiten, je 4 Läufe pro Stufe, noch ohne
Rückfrage) ergab bei Thinking
low3 von 12 gültige Antworten ohne jedes Denken und beimedium5 von 12; zweimedium-Läufe auf derselben Bekanntmachung endeten auch nach 420 s und 900 s nicht. Die Fehler sind weggelassene Pflichtfelder, erfundene Felder mit dem Wert null und Bezeichnungen aus einer fremden Kategorie. Thinkinglowist für Claude keine Abhilfe: Es denkt dann gar nicht und findet in großen Bekanntmachungen deutlich weniger Kriterien. - Mit Bereinigung und Rückfrage waren in 9 Läufen (
medium, Zeitlimit 360 s) alle 8 beendeten Antworten gültig, schon ohne Rückfrage. Offen bleiben Läufe, in denen Claude trotzmediumnicht denkt: Einer fand in der 18-Seiten-Bekanntmachung 5 statt 24 bis 48 Kriterien, gültig, aber unvollständig. Für die Kriterienanalyse bleibt Gemini deshalb die Empfehlung, bis Claude in Vergleichsläufen gleichwertig abschneidet. - Hänger: 4 von 33 nicht gestreamten Läufen im Produktionspfad warteten bis zum Zeitlimit, obwohl 50 000 Tokens nach etwa 190 s erreicht sind. Der Auslöser ist nicht belegt, ließ sich am 05.11.2026 nicht wiederholen und ist nicht die Laufzeit (auch 190 s stumm liefen sauber durch). Mehrfach starben aber parallele Verbindungen im selben Moment; eine stumme Anfrage kann das nur am Zeitlimit bemerken. Deshalb streamt Claude, Stille über 120 s gilt als tote Verbindung (Anthropic pingt alle 30 s), und der Worker wiederholt verlorene Verbindungen. 9 von 9 Läufen, die der Verbindungsverlust nicht traf, und die 38-Seiten-Bekanntmachung liefen so sauber.
- Thinking
highist für Haiku 5.5 unbrauchbar: In 12 von 12 Läufen verbrauchte das Denken das Budget von 50 000 Tokens, fast ohne Antworttext. - Eine Rückfrage sendet Dokumente und Anweisungen erneut, kostet also einen zweiten Aufruf und erhält ein eigenes Zeitfenster; das Nutzungsprotokoll zählt beide Aufrufe.