Elf KI-Anbindungen und kein gemeinsamer Standard

Elf KI-Anbindungen, unterschiedliche APIs und warum selbst OpenAI-kompatibel nicht immer wirklich kompatibel bedeutet.

Willkommen zu meinem Blog. Yippi.

Das hier wird alles selbst geschrieben. Jedes Zeichen, jeden verdammten Buchstaben werde ich selbst eintippen, einfach um noch ein Fünkchen Menschlichkeit ins Internet zu bringen. (Mit Ausnahme der englischen Version, die lasse ich vom Übersetzer erstellen. ;))

In Zeiten, wo immer mehr Text KI-generiert wird, weil es effizienter ist, wird es gefühlt zur Kunst, selbst was zu schreiben.

Ungefilterte Meinung und Worte. Checkst du?

Mein erstes Thema ist „Elf KI-Anbindungen und kein gemeinsamer Standard“. Als jemand, der aus einem Land kommt, in dem alles genormt ist, ist das ein extremer Kulturschock.

Man will einfach nur möglichst viele LLMs zum Laufen bringen in einer App und man sollte ja meinen, dass das einfach geht.

Text rein, Text raus.

Anstatt dass sich alle an den OpenAI-kompatiblen APIs orientieren, backen alle ihr eigenes Brot. Anthropic, Google und viele andere nutzen komplett andere Formate.

OpenAI-kompatibel heißt nicht wirklich kompatibel.

Selbst wenn man zwei Server mit derselben API-Struktur anfunkt, machen die mit den Parametern oft, was sie wollen.

Zum Beispiel ist presence_penalty nicht einfach ein anderer Name für repetition_penalty.

Die presence_penalty bestraft Tokens einfach danach, ob sie schon mal im Text aufgetaucht sind. Die repetition_penalty schraubt dagegen irgendwie anders an den Wahrscheinlichkeiten herum – wie genau, checke ich ehrlich gesagt selbst nicht ganz.

Beides soll Wiederholungen verhindern, aber halt mit unterschiedlicher Mathe.

Und besonders lustig wird es bei max_tokens.

Bei OpenAI Chat Completions begrenzt das Ding einfach die generierten Tokens, wurde bei den neueren Reasoning-Modellen aber direkt wieder durch max_completion_tokens ersetzt.

Bei Anthropic begrenzt max_tokens auch die maximal generierten Tokens. So weit, so gut.

Aber Moment mal: Was heißt hier eigentlich „maximal“? Sind nicht sowieso alle generierten Tokens gemeint?

Ja, dachte ich auch. Bei Anthropic zählen da aber einfach mal die Thinking-Tokens mit rein. Wenn das Modell also erst mal ordentlich nachdenkt, frisst es schon die Hälfte vom Token-Budget auf, bevor überhaupt die eigentliche Antwort um die Ecke kommt.

Du willst einfach nur die Antwortlänge begrenzen und musst plötzlich mit einrechnen, wie viel das Modell vorher grübelt. Herrlich.

Du möchtest in deiner App eine einheitliche Einstellung anbieten, kannst aber nicht einfach denselben Wert an jeden Anbieter schicken.

Im besten Fall ignoriert der Server einen Parameter, den er nicht kennt. Im schlechteren Fall knallt es direkt mit einer Fehlermeldung oder das Modell macht irgendwas komplett Unerwartetes.

Die Anfrage ist formal kompatibel, aber das Verhalten halt nicht.

Klingt erstmal nach Haarspalterei, aber genau solcher Kleinkram nervt extrem, wenn man eine App baut, die mit verschiedenen KI-Anbietern laufen soll.

Ich hab schließlich keine Lust, für jeden Anbieter eine komplett andere Benutzeroberfläche zu bauen oder das komplette Backend auf den Kopf zu stellen.

Würde ein gemeinsamer Standard die Welt zu einem besseren Ort machen?

Ein schönes gemeinsames Grundformat für Nachrichten, Streaming, Fehler und allgemein Tokens könnte weltweit vielen Entwicklern eine Menge Arbeit ersparen.

Klar, es gibt bereits bekannte Libraries wie LiteLLM, die einem diese Arbeit abnehmen können, aber wie immer hat Abstraktion einen Preis:

  1. Abhängigkeit: Es entsteht eine Abhängigkeit und man darf beten, dass neue Modelle zeitnah unterstützt werden und die Entwicklung nicht eingestellt wird!
  2. Sicherheit: Es entsteht eine größere Angriffsfläche, was nicht zwangsläufig für mehr Sicherheitslücken sorgt, aberrrr...
  3. Funktionsumfang: Neue oder ungewöhnliche Funktionen von vor allem kleinen Anbietern werden nicht sofort unterstützt.

Die Komplexität verschwindet nicht, man lagert sie nur aus.

Ich muss die Anbieter aber auch ein bisschen in Schutz nehmen: Ein gemeinsamer Standard würde auch nicht automatisch alle Probleme lösen.

Die Modelle ticken nun mal unterschiedlich. Manche können Bilder verarbeiten, andere Videos, manche haben Thinking, andere nicht. Dazu kommen Prompt-Caching, Tool-Calling und was weiß ich, was denen in Zukunft noch alles einfällt.

Wenn jeder Anbieter erst brav warten müsste, dass irgendein gemeinsamer Standard erweitert wird, würde das neue Funktionen nur unnötig ausbremsen.

Und ganz ehrlich, darauf hätten wir glaube ich alle keine Lust.

Vielleicht ist die Lösung also gar nicht, jeden Kleinkram bis ins Detail zu standardisieren, sondern sich wenigstens auf ein gemeinsames Grundformat zu einigen.

Nachrichten rein, Antworten raus, einheitliche Fehler und vernünftige Angaben zum Tokenverbrauch. Den ganzen Spezialkram könnte man dann über zusätzliche Funktionen erweitern.

Dann könnten die Anbieter weiterhin ihre eigenen Ideen ausprobieren, ohne dass jeder App-Entwickler das Rad zum hundertsten Mal neu erfinden muss.

Wäre doch ein fairer Kompromiss, oder?

Am Ende bleibt für mich jedenfalls die Erkenntnis, dass hinter einer scheinbar simplen Funktion wie „KI-Modell auswählen“ deutlich mehr Kopfschmerzen stecken, als man auf den ersten Blick denken würde.

Text rein, Text raus. Wir erinnern uns.

Tüdelü! :)