Eine Tür für jeden Modellaufruf
Ein Kunde fragte, wie hoch sein Anteil an unseren Modellkosten sei. Wir hatten eine Rechnung eines Anbieters über alles, keine Möglichkeit der Zuordnung — und eine Woche Arbeit vor uns für eine Frage, die eine Datenbankabfrage hätte sein sollen.
Die Frage, die wir nicht beantworten konnten
Es war eine berechtigte und alltägliche Frage: Was kostet Sie der Betrieb unseres Systems im Monat? Wir konnten eine Gesamtsumme über alle Kunden ausweisen und sie nicht aufteilen, weil elf Stellen in unserem Code einen Modellanbieter direkt mit demselben Schlüssel aufriefen.
Es aus Anbieterprotokollen zu rekonstruieren war möglich und unerfreulich, und die Schätzung, die wir schließlich gaben, trug einen Vorbehalt zu ihrer Genauigkeit. Das ist eine schlechte Lage für einen Anbieter, der die Leistung abrechnet und den Kunden bittet, den Zahlen zu vertrauen.
Was wir gebaut haben
Einen internen Dienst, durch den jeder Modellaufruf geht. Er nimmt eine benannte Fähigkeit statt einer Modellkennung, einen Mandanten und eine Anfrage. Er gibt die Antwort zurück und hält Mandant, Fähigkeit, tatsächlich genutztes Modell, Tokenzahlen und Latenz fest.
Mehr tut er nicht. Er ist kein Framework und hat bewusst keine Meinung zu Prompts, Wiederholungen oder Orchestrierung — denn ein Gateway, das anfängt zu entscheiden, wird zu einer Komponente, die jedes Team verstehen muss, statt zu einer, die es ignorieren kann.
Die vier Dinge, die es eingebracht hat
Zuerst die Zuordnung, wofür wir es gebaut haben. Kosten je Mandant, je Fähigkeit und je Anfrage sind heute eine Abfrage, und das Kundengespräch, das dies auslöste, dauert eine Minute statt eines Tages.
Dann die Austauschbarkeit: Weil Aufrufer eine Fähigkeit verlangen, ist der Wechsel des bedienenden Modells Konfiguration. Dann eine einzige Stelle für Zeitüberschreitungen und Ratenbegrenzungen je Mandant. Und schließlich ein Prüfpfad — was sich als das herausstellte, was unsere Sicherheitsprüfungen die ganze Zeit wollten.
| Je Aufruf festgehalten | Warum es zählt |
|---|---|
| Mandant und Fähigkeit | Zuordnung ohne Raten |
| Tatsächlich genutztes Modell und Version | Damit ein stiller Anbieterwechsel sichtbar wird |
| Tokenzahlen ein und aus | Kosten und Drift der Prompt-Größe |
| Latenz und ob gecacht wurde | Leistung und Trefferquoten |
Die Forschung zur selben Idee
Martin und Kollegen beschrieben in jenem Oktober eine Vermittlungsschicht zwischen Anwendungen und Modellanbietern, die die Zugangskosten senken soll, indem sie Anfragen routet und die Mechanik zentral erledigt statt in jeder Anwendung.
Wir hatten unseres für die Buchhaltung gebaut und nicht fürs Routing, und die Lektüre brachte uns dazu, das Routing zu ergänzen, um das wir uns gedrückt hatten. Das Gateway schickt die begrenzten mengenstarken Fähigkeiten heute an ein kleines Modell und die offenen an ein Spitzenmodell — eine Änderung, die möglich war, weil es eine Stelle dafür gab.
Was es zu tun sich weigert
Es wiederholt nicht. Die Wiederholungsstrategie hängt davon ab, was der Aufrufer tut, und ein Gateway, das still wiederholt, macht aus einem sichtbaren Fehlschlag drei unsichtbare plus Kosten, die der Aufrufer nicht bewilligt hat.
Es cacht nicht mandantenübergreifend, aus Gründen, über die wir gesondert geschrieben haben. Und es verändert keine Prompts — was offensichtlich klingt und das am häufigsten gewünschte Merkmal ist, meist als gut gemeinter Einfall, überall eine Standardanweisung einzuschleusen.
Die Zahl, die uns überrascht hat
Sobald wir Ausgaben je Fähigkeit sehen konnten, entfielen achtunddreißig Prozent der Rechnung auf einen Schritt. Es war eine Zusammenfassung, die bei der Aufnahme über jedes Dokument läuft und die niemand kalkuliert hatte, weil sie im Hintergrund läuft und niemand darauf wartet.
Wir haben sie auf ein kleineres Modell verschoben, und die Rechnung fiel um rund ein Viertel, ohne messbare Qualitätsänderung auf dem Referenzset. Dieser eine Fund deckte die Baukosten des Gateways mehrfach — und aus einer Rechnung hätten wir ihn nie gefunden.
Was wir jemandem raten würden, der anfängt
Baut es, bevor ihr es braucht, und haltet es dumm. Unseres kostete eine Woche bei elf Aufrufstellen; bei vierzig hätte es einen Monat gekostet und wäre vermutlich wieder zugunsten von etwas Dringenderem verschoben worden.
Die Disziplin, die es trägt, ist, dass Aufrufer Fähigkeiten benennen. Benennen sie Modelle, ist das Gateway nur eine Buchhaltungsschicht, und jede Modellentscheidung bleibt genau so über den Code verstreut wie zuvor.
Was wir nicht behaupten
Wir behaupten nicht, ein Gateway verbessere die Qualität. Es verbesserte unsere Sicht und unsere Änderbarkeit, und die folgenden Qualitätsgewinne kamen aus Entscheidungen, die diese Sicht ermöglichte, nicht aus der Komponente selbst.
Wir behaupten auch nicht, unseres sei ein Produkt. Es sind ein paar hundert Zeilen, zugeschnitten auf unsere Arbeitsweise, und der Grund gegen etwas Größeres ist, dass das meiste, was größere Frameworks mitbringen, genau jenes meinungsstarke Verhalten ist, das das Gateway nicht haben sollte.
