412 Euro für zwei Wochen Testbetrieb. So viel hat mich ein Assistent gekostet, den ich im Oktober gebaut habe – nicht für besonders kluge Antworten, sondern für einen Agenten, der 61 Mal dieselbe Datei gelesen hat, weil er nach jedem Schritt vergessen hatte, dass er sie schon kennt.

Ich hatte mit einem Bruchteil gerechnet, und die Differenz hat mich eine Woche gekostet, in der ich Token-Zahlen in Logs sortiert habe. Was ich dabei gelernt habe, ist weniger über Modelle als über Schleifen.

Wie ein Tool-Call zur Rechnung wird

Ein Agent ist eine Schleife: Modell aufrufen, Werkzeug ausführen, Ergebnis anhängen, wieder aufrufen. Der Preis jedes Durchlaufs ist nicht die neue Frage, sondern der gesamte bisherige Verlauf. Nach zehn Schritten zahlst du zehnmal für die ersten neun.

Das ist keine Intransparenz des Anbieters, sondern die Mechanik von Kontextfenstern. Der Preis pro Schritt wächst linear, die Summe quadratisch. Dazu kommt, dass ein Modell mehrere Werkzeuge in einem Schritt aufrufen kann: Drei Aufrufe sind drei Ergebnisse im Verlauf, und der nächste Schritt zahlt alle drei mit. Bei einem Agenten mit zwanzig Schritten und einem Werkzeug, das eine 3.000-Token-Datei zurückgibt, ist der letzte Aufruf teurer als die ersten fünf zusammen.

Die Schleife, die niemand sieht

Screenshot einer Kostenübersicht mit einer steil ansteigenden Linie
Die Kostenkurve aus dem Oktober. Der Sprung in der Mitte ist kein Modellwechsel, sondern die Stelle, an der der Agent angefangen hat, ein Verzeichnis statt einer Datei zu lesen.
flowchart LR A[Auftrag] --> B[Modell] B --> C{Tool-Call?} C -->|ja| D[Werkzeug ausfuehren] D --> E[Ergebnis an Verlauf anhaengen] E --> B C -->|nein| F[Antwort] E -.-> G[Kosten wachsen mit jedem Schritt]
SchrittKontext (Tokens)Kosten kumuliert
11.8000,01 €
59.4000,09 €
1021.0000,28 €
2044.0000,81 €
4091.0002,60 €

Die Zahlen sind aus meinem Testlauf und nicht allgemeingültig, aber die Form ist es. Vierzig Schritte kosten das Dreiundzwanzigfache von zehn, obwohl die Arbeit nicht viermal so groß ist. Und vierzig Schritte erreicht man schnell, wenn ein Werkzeug bei jedem Aufruf eine Fehlermeldung zurückgibt, die der Agent als neuen Anlass zum Nachfragen versteht.

Bei mir waren es 61 Lesezugriffe auf dieselbe Datei, und die Ursache stand nicht im Code, sondern im Systemprompt: „Prüfe bei Unsicherheit die Quelle erneut.“ Ein Satz, der vernünftig klingt und in einer Schleife 61 Mal befolgt wird. Ich habe zwei Tage in der falschen Schicht gesucht – erst im Werkzeug, dann im Modell, zuletzt im Prompt, wo er stand.

Was ich eingebaut habe

Drei Bremsen, alle unspektakulär, alle wirksam. Erstens: ein hartes Limit pro Auftrag, das nicht der Agent selbst zurücksetzen kann. Zweitens: ein Cache für Werkzeugergebnisse, der auf Argument und Dateiversion schlüsselt. Drittens: eine Kürzung des Verlaufs, die alte Werkzeugausgaben durch eine Zusammenfassung ersetzt.

MAX_SCHRITTE = 12
MAX_KOSTEN = 0.40  # Euro pro Auftrag

def lauf(auftrag, tools, budget=MAX_KOSTEN):
    verlauf, kosten = [auftrag], 0.0
    for schritt in range(MAX_SCHRITTE):
        antwort = modell(verlauf)
        kosten += antwort.kosten
        if kosten > budget:
            return "abgebrochen: Budget erschoepft"
        if not antwort.tool_calls:
            return antwort.text
        for call in antwort.tool_calls:
            key = (call.name, call.argumente, call.dateiversion)
            ergebnis = cache.get(key) or tools[call.name](**call.argumente)
            cache[key] = ergebnis
            verlauf.append(ergebnis)
    return "abgebrochen: Schritlimit"

Der Cache war der größte Effekt: 61 Lesezugriffe auf dieselbe Datei wurden zu drei. Das Schritlimit hat die zweite Erkenntnis gebracht, nämlich dass ein Abbruch nach zwölf Schritten in neun von zehn Fällen eine bessere Antwort liefert als ein Durchlauf mit vierzig – weil der Agent ab Schritt fünfzehn anfängt, sich selbst zu wiederholen.

Der Preis der Autonomie

Jede dieser Bremsen nimmt dem Agenten eine Freiheit. Ein Limit von zwölf Schritten verhindert Aufgaben, die wirklich siebzehn brauchen. Ein Cache liefert veraltete Ergebnisse, wenn sich eine Datei ändert und die Version nicht mitzählt. Eine Kürzung des Verlaufs kann die Information entfernen, die den Fall entschieden hätte.

Das ist der eigentliche Trade-off: Autonomie ist nicht kostenlos, sie ist eine Wette darauf, dass der Agent den richtigen Pfad findet, bevor das Budget endet. Für einen Assistenten, der mir Dateien zusammenfasst, ist die Wette gut. Für einen, der eine Migration ausführt, würde ich sie nicht eingehen – dort ist ein Abbruch nach zwölf Schritten kein Sparen, sondern ein halb fertiger Zustand.

Fazit

Die Kosten eines Agenten stehen nicht im Modellpreis, sondern in der Schleife: jeder Schritt zahlt den ganzen Verlauf. Wenn du einen Agenten baust, baue zuerst die Bremse – Schrittzahl, Budget, Cache – und dann die Fähigkeiten. Ein Agent ohne Limit ist kein autonomes System, sondern eine Rechnung, die du nicht kontrollierst.

Und du: Weißt du bei deinem letzten Agentenlauf, wie viele Schritte er gebraucht hat – oder nur, dass die Antwort gut war?