Um 07:20 habe ich die Abrechnung gesehen: 41,80 Euro für eine Nacht. Ich habe in dieser Nacht geschlafen, der Agent hat gearbeitet, und das war der Plan. Er sollte 30 Dateien durchsehen, Fehler finden und mir morgens einen Bericht hinlegen. Bekommen habe ich eine Rechnung und einen Bericht mit vier Zeilen.

Das Teure war nicht die eine falsche Antwort. Es war die Schleife, in der er sie gesucht hat, und die Tatsache, dass jede Runde teurer wurde als die vorherige.

Der Agent hat nicht geantwortet, er hat gearbeitet

Ein Chat-Modell kostet Geld pro Token, und ein Agent produziert Tokens, ohne dass jemand zusieht. Jede Runde besteht aus einem Aufruf mit dem bisherigen Gesprächsverlauf, einem Werkzeugaufruf, dessen Ergebnis zurückkommt, und einem neuen Aufruf mit dem Verlauf plus Ergebnis. Der Verlauf wächst. Der Preis pro Runde wächst mit ihm, und zwar nicht linear, sondern mit der Anzahl der bisherigen Runden.

Genau diese Stelle habe ich unterschätzt. Ich hatte ein Budget im Kopf, aber ein Budget pro Frage. Der Agent hat keine Frage gestellt, er hat 38 Runden lang gearbeitet.

Wo das Geld hingeht

Bildschirmfoto einer Kostenübersicht mit einer steil ansteigenden Kurve über 38 Runden und einer Tabelle mit Tokenzahlen pro Aufruf
Die Kurve aus der Abrechnung: Die ersten zehn Runden kosten zusammen 1,70 Euro, die letzten zehn kosten 28 Euro. Der Verlauf wächst mit jeder Runde mit.
PhaseRundenToken pro AufrufKosten
Orientierung1 bis 104.000 bis 9.0001,70 Euro
Dateien lesen11 bis 2512.000 bis 31.00011,10 Euro
Schleife26 bis 3834.000 bis 58.00028,00 Euro
Bericht161.0001,00 Euro

Die letzte Zeile ist die bitterste. Der Abschlussbericht hat mehr gekostet als die ersten zehn Runden zusammen, weil er den gesamten Verlauf mitgeschickt bekommt. Ein Agent, der lange arbeitet, bezahlt für seine eigene Geschichte.

Der teuerste Bug war eine Schleife, die aussah wie Sorgfalt

Ab Runde 26 hat der Agent eine Datei gesucht, die er in Runde 12 schon gelesen hatte. Er hat sie nicht gefunden, weil er im falschen Verzeichnis gesucht hat, und statt das Verzeichnis zu ändern, hat er die Suche wiederholt. Zwölfmal. Jedes Mal mit demselben Ergebnis und einem etwas längeren Verlauf.

Von außen sah das nach Sorgfalt aus. Ein Agent, der prüft, ist besser als einer, der rät. Aber es gab keine Bedingung, unter der er aufhört, und keine Erinnerung daran, dass er diese Suche schon gemacht hatte. Für mich war es ein Bug. Für das Modell war es eine plausible nächste Handlung.

Das ist die unangenehme Eigenschaft von Agenten: Sie haben kein Gefühl für Fortschritt. Ein Mensch merkt nach der dritten erfolglosen Suche, dass er etwas falsch macht. Ein Modell sieht nur den Verlauf und die letzte Fehlermeldung, und die sieht nach einem neuen Problem aus, auch wenn es dasselbe ist. Ohne einen Zähler von außen wiederholt es die Höflichkeit so lange, bis das Budget entscheidet.

Was ich einbaue, bevor ich ihn wieder starte

Drei Dinge, alle billig, alle langweilig. Erstens eine harte Obergrenze für Runden. Zweitens ein Budget in Euro, nicht in Tokens, weil ich die Preise nicht im Kopf habe und das Modell sie auch nicht kennt. Drittens ein Gedächtnis für Werkzeugaufrufe: Wenn dieselbe Suche mit derselben Eingabe zweimal passiert, bekommt der Agent das gespeicherte Ergebnis und einen Hinweis, dass er das schon versucht hat.

class Budget:
    def __init__(self, max_eur: float, max_steps: int = 20):
        self.left = max_eur
        self.steps = max_steps
        self.spent = 0.0

    def charge(self, prompt_tokens: int, completion_tokens: int, price: dict):
        cost = (
            prompt_tokens * price["in"] + completion_tokens * price["out"]
        ) / 1_000_000
        self.spent += cost
        self.left -= cost
        self.steps -= 1
        if self.steps == 0 or self.left <= 0:
            raise RuntimeError(
                f"budget exhausted after {self.spent:.2f} EUR"
            )

    def should_stop(self) -> bool:
        return self.steps == 0 or self.left <= 0

Die Ausnahme ist Absicht. Ein Agent, der bei leerem Budget weiterläuft und nur eine Warnung loggt, ist ein Agent, der weiter Geld ausgibt. Der Abbruch muss wehtun, sonst ist er eine Empfehlung.

Fazit

41,80 Euro sind kein Weltuntergang, und ich habe für dieses Geld eine Lektion bekommen, die in keiner Dokumentation steht: Bei Agenten ist der Verlauf das Produkt und die Rechnung gleichzeitig. Wer die Runden nicht zählt, zahlt für die Geschichte, die der Agent sich selbst erzählt. Seitdem ich Runden, Kosten und Werkzeugaufrufe mitschreibe, ist der Agent langsamer geworden und hat mehr gefunden, weil er nicht mehr im Kreis läuft.

Wenn du einen Agenten über Nacht laufen lassen würdest: Welche Zahl möchtest du morgens sehen, bevor du den Bericht liest?