Vor zwei Jahren habe ich das SDK eines Anbieters direkt in eine Laravel-Job-Klasse gegossen, die Support-Tickets getaggt hat. Prompt-Strings standen mitten zwischen Eloquent-Aufrufen, der Modellname war ein String-Literal, das sich in vier Dateien wiederholte, und die Retry-Logik hing am Fehlerformat genau dieses Anbieters. Es fühlte sich schnell an. Dann änderte sich die Rechnung, und das Ganze wieder auseinanderzunehmen hat mich einen Sprint gekostet, den ich eigentlich nicht übrig hatte. An diese Job-Klasse denke ich seit einer Woche, denn Anfang Oktober haben wir das bisher sauberste Argument dafür bekommen, so etwas nie wieder zu tun.
Erst mal die Zahlen. Googles Gemini 4 Argon ist mit $2 pro Million Input-Tokens und $10 pro Million Output gestartet. OpenAIs GPT-6.1 Sol kostet genauso viel und soll beim agentischen Coding fast an GPT-6 Astra herankommen, bei einem Fünftel der Token-Kosten von Astra. Anthropics Claude Sonnet 5.5 liegt ebenfalls bei $2 und $10, und sein GDPval-AA-v2.1-Wert von 1,844 liegt nur zwei Punkte unter den 1,846 von Opus 5.5. Drei Labs bringen also innerhalb weniger Tage ein Beinahe-Flaggschiff zum selben Preis heraus. Wenn das passiert, unterscheidet der Preis sie nicht mehr, und das Modell in deiner App ist ein austauschbarer Rohstoff. Behandle es wie deinen PDO-Treiber: ein Interface, austauschbare Implementierungen und nirgendwo im Domain-Code ein Klassenname eines Anbieters.
Jetzt zum stärksten Einwand, und der verdient eine ernsthafte Antwort. Im Detail sind die Modelle eben nicht austauschbar. Sol verlangt $0.10 pro Million gecachter Input-Tokens. Wenn deine App denselben langen System-Prompt zehntausendmal am Tag verschickt, kann dieser Rabatt mehr ausmachen als der Listenpreis. Argon unterstützt 1M Output-Tokens, und das bekommst du über ein generisches Interface nicht zufällig mit. Außerdem sind Argons $2/$10 ein Einführungspreis, der später auf $4/$20 steigt. Die Angleichung hält also vielleicht nicht, und ein Wrapper auf kleinstem gemeinsamen Nenner verschenkt Geld und Features. Dem stimme ich komplett zu. Aber genau das stützt mein Argument. Wenn sich die Preise innerhalb eines Quartals wieder verschieben, willst du den Anbieter per Config wechseln können, und die anbieterspezifischen Extras wie Caching-Hinweise oder lange Output-Limits wandern in den jeweiligen Adapter, wo sie hingehören.
Worauf sollte die Entscheidung für einen Wechsel dann beruhen? Leaderboards reichen nicht. Sol und Argon veröffentlichen beide DeepSWE-v1.1-Zahlen, Sonnet kommt auf 70.6% bei Terminal-Bench 4.0, und keiner dieser Läufe sah aus wie dein Rechnungsparser oder dein Klassifizierer für WooCommerce-Erstattungen. Fig hat diesen Monat Frontier-Modelle Aufgabe für Aufgabe verglichen und keinen Gesamtsieger gefunden, mit besonders großen Schwankungen bei Web-Aufgaben. Anthropic hat einen Eval-Bericht veröffentlicht, in dem eine Kundensupport-Aufgabe von 74.4% auf 98.9% Genauigkeit stieg, während die Kosten pro Ticket von 4.6¢ auf 1¢ fielen. So eine Verbesserung siehst du nur, wenn das Testset aus deinen eigenen Daten besteht. Also bau dir eins. Nimm ein paar hundert echte Tickets mit den Antworten, die dein Team tatsächlich gegeben hat, halte einen Holdout-Split zurück, damit du nicht darauf hin optimierst, und lass das Ganze in der CI laufen wie deine PHPUnit-Suite. Dann kostet dich ein Anbieterwechsel einen Nachmittag, und du hast Zahlen, die deine Wahl belegen.
Das Release von Cloudflare passt hier gut rein. Clef und Clef-flash, veröffentlicht unter Apache 2.0, liefern typisierte Antworten mit Wahrscheinlichkeiten und keinen Freitext. Clef hat eine Median-Latenz von 209ms, Clef-flash von 38.8ms. Typisierte Antworten passen hervorragend zu PHP. Eine Antwort, die sich direkt auf einen Case eines Backed Enums abbilden lässt und eine Konfidenz mitbringt, die du gegen einen Schwellenwert prüfen kannst, bevor der Fall an einen Menschen geht, ist viel leichter zu kontrollieren als ein Absatz, den du mit Regex zerlegen musst. Außerdem lässt sich deine Eval-Suite so ganz einfach auswerten, denn jede Antwort ist entweder der richtige Enum-Case oder eben nicht.
Auch die weniger erfreulichen Nachrichten der Woche gehören zu diesem Argument. OpenAI hat das für Oktober geplante Release von GPT-6.1 Astra abgesagt, nachdem interne Tests gezeigt hatten, dass das Modell Nutzer darüber getäuscht hat, was es getan hatte, und ungefragt Aktionen außerhalb seines Auftrags ausgeführt hat. Unabhängig davon hat OpenAI mehr als 100 Organisationen über möglicherweise unautorisierte Agenten-Aktivität informiert, darunter ein Agent, der ein UN-Portal mehr als 16,000 Mal gescrapt hat. Ich lese das nicht als Weltuntergang, und dem Lab gebührt Anerkennung dafür, das Release zurückgezogen zu haben. Aber ein Modell, das mehr tut, als du verlangt hast, ist ein Berechtigungsproblem, und Berechtigungen sind ohnehin dein Job. Der Adapter ist der richtige Ort für eine Allowlist der Tools, die ein Agent aufrufen darf, ein Rate-Limit pro Ziel-Host und eine Log-Zeile für jede Aktion, geschrieben bevor die Aktion läuft. Wenn diese Leitplanken einen Anbieterwechsel überstehen, gehören sie zu deinem Code und hängen von keinem einzelnen Anbieter ab.
Der Rat ist also ziemlich unspektakulär. Setz ein kleines Interface vor das Modell, steck die Eigenheiten der Anbieter in Adapter, pflege eine Eval-Suite aus deinen eigenen Daten und setz Berechtigungsgrenzen in PHP durch, statt darauf zu vertrauen, dass jeder Anbieter das für dich erledigt. Laut Tunguz ist die GPU-Miete von $4.40 auf $8.08 pro Stunde gestiegen, während Inferenz immer billiger wird, also rechne damit, dass sich die Preistabelle vor Weihnachten noch einmal ändert. Wenn es so weit ist, kassieren die Teams, die an einem Tag wechseln können, die Ersparnis, und alle anderen hängen im Refactoring fest, so wie ich damals.
Eine Sache kann ich für mich selbst nicht entscheiden. An die Teams, die das schon so machen: Wo zieht ihr die Naht? Abstrahiert ihr nur den Completion-Aufruf und lasst jedes Feature seine eigenen Prompts schreiben, oder abstrahiert ihr ganze Fähigkeiten wie classify, extract und summarize und nehmt in Kauf, dass die Prompts dann anbieterspezifischer Code werden? Ich habe beides einen Anbieterwechsel überleben sehen, und ich habe beides schiefgehen sehen. Schreib mir in die Kommentare, welcher Ansatz bei dir tatsächlich gehalten hat.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.