Modellwechsel mitten in der Sitzung kostet nichts
· 3 Min. Lesezeit
Und das ist eine Designentscheidung, kein Feature. Die meisten Agent-Tools werden gegen einen Anbieter geschrieben und erst danach an andere angepasst. Die Reihenfolge klingt nach einem Implementierungsdetail. Sie ist der Kern der Sache.
Nachträglich anpassen heißt: Wenn der zweite Anbieter dazukommt, tragen die Annahmen des ersten bereits die Last. Sie stecken im Gesprächsspeicher, in der Darstellung eines Tool-Aufrufs, im Parsen einer gestreamten Antwort – und an keiner dieser Stellen sucht ein Jahr später jemand. Was man bemerkt, ist nur das Symptom: Ein Anbieterwechsel bedeutet eine Migration, und eine Migration mitten in der Sitzung bedeutet, dass man den Anbieter nicht wechselt.
Wo die Annahme sich versteckt
Die naheliegende Stelle ist der HTTP-Aufruf, und die naheliegende Stelle ist die falsche. Zwischen den Endpunkten zweier beliebiger Anbieter liegt ein Wochenende Arbeit. Teuer ist, was man mit der Antwort gemacht hat.
Nehmen Sie ein Detail. Die meisten Anbieter ordnen ein Tool-Ergebnis über die ID des Aufrufs zu, der es erzeugt hat. Gemini ordnet es über den Namen der Funktion zu. Speichert Ihr Gesprächsspeicher Tool-Ergebnisse so, wie Anbieter A sie beschrieben hat, dann ist Gemini-Unterstützung kein neuer HTTP-Client – sondern eine Änderung an der Form, in der jeder Verlauf vorliegt, den Sie je geschrieben haben.
Das ist das ganze Problem im Kleinen. Kein Adapter behebt es, denn die Information wurde schon beim Schreiben verworfen.
Neutraler Verlauf
Die Alternative: Man legt fest, bevor der erste Anbieter implementiert ist, dass der Verlauf keinem von ihnen gehört.
OHarness speichert Sitzungsverläufe in einer Form, die die Engine definiert (packages/engine/src/core/types.ts), nicht im Format eines Anbieters. Ein Tool-Ergebnis trägt toolName ebenso wie toolCallId – nicht weil die Engine beides braucht, sondern weil Gemini den Namen braucht und alle anderen die ID, und die neutrale Form in beide übersetzbar sein muss.
Das Wire-Format eines Anbieters entsteht in dem Moment, in dem eine Anfrage hinausgeht, und wird verworfen, sobald die Antwort zurückgeführt ist. Nichts wird darin gespeichert.
Ein Anbieterwechsel mitten in der Sitzung konvertiert also nichts. Nicht weil die Konvertierung schnell ist, sondern weil es keine alte Form gibt, aus der man konvertieren müsste.
Was das konkret bringt
Ein Modell ist etwas mit Preisen, Kapazität, einem Ratenlimit und einer schlechten Woche. Sind das die Entscheidungen anderer und haben Sie nur ein Modell, werden sie zu Ihren Entscheidungen. Der Sinn eines austauschbaren Backends ist nicht Neuheit – sondern dass Sie an dem Tag, an dem ein Anbieter seine Bedingungen ändert, eine eigene Meinung dazu haben können.
Außerdem funktioniert damit der langweilige Fall. Entwerfen Sie mit etwas Günstigem, wechseln Sie für den schwierigen Teil zu etwas Teurem, und gehen Sie auf ein Modell auf Ihrem eigenen Rechner, wenn das Netz schlecht ist oder der Code das Haus nicht verlassen soll. Das ist alles dieselbe Sitzung.
Der Teil, der nicht kostenlos ist
Ehrlich zum Kompromiss: Das neutrale Format ist eine Verpflichtung. Jede Fähigkeit, die sich zwischen Anbietern unterscheidet – Reasoning-Aufwand, Prompt-Caching, parallele Tool-Aufrufe, Bildunterstützung –, muss als Flag am Modell ausgedrückt werden, statt aus dem Anbieter abgeleitet zu werden, denn die falsche Form zu senden ergibt einen 400er statt einer schlechteren Antwort. Das sind echte Kosten, einmal bezahlt, an einer Stelle, an der man sie sieht.
Die Alternative ist, sie immer wieder zu bezahlen, im Dunkeln, so lange das Projekt lebt.
OHarness ist ein quelloffenes Agent-Harness unter MIT-Lizenz. Es spricht nativ mit Anthropic, OpenAI und Google Gemini, mit jedem OpenAI-kompatiblen Endpunkt und mit lokalen Laufzeiten wie Ollama, LM Studio und vLLM. Die Architekturreferenz beschreibt, wie die Schichtung erzwungen und nicht bloß beabsichtigt wird, und Was ist ein Agent-Harness? behandelt die Idee dahinter.