Handbücher · Gates mit Entscheidungsmodellen
Build: Der Router
Lernziele
- Du baust einen Router, der nur dann den schnellen Pfad nimmt, wenn ein Handler existiert und die Konfidenz über dem Schwellenwert liegt.
- Du gibst alles Unbekannte über einen Auffangkorb ohne Handler an das große Modell.
- Du loggst jede Entscheidung so, dass das Log später zum Testdatensatz wird.
Der Entscheidungs-Endpunkt zahlt sich vor einem Agenten aus. Das Muster aus Jev im Agenten-Stack geht so: Die eingehende Anfrage wird günstig klassifiziert. Ist der Klassifikator sicher, handelt der Code direkt. Ist er es nicht, geht die Anfrage an das volle Sprachmodell. Der Entscheidungskopf ist der schnelle Pfad. Der Weg über das große Modell bleibt immer offen.
Der Entwurf
Drei Regeln tragen den ganzen Router:
- Jede Route mit festem Handler kommt ohne das große Modell aus. Ein Link zum Zurücksetzen des Passworts braucht keine Formulierungskunst.
- Der schnelle Pfad greift nur, wenn beides stimmt: Die Konfidenz liegt über dem Schwellenwert · engl. thresholdDie Mindestkonfidenz, ab der ein Gate den günstigen Pfad nimmt. Liegt die Konfidenz darunter, geht der Eintrag an das große Modell.Im Glossar, und die Route hat einen Handler. Alles andere fällt durch.
- Jede Entscheidung landet im Log, egal welcher Pfad. Das Log ist dein späterer Testdatensatz. Sobald Menschen die Tickets gelabelt haben, misst du damit die Genauigkeit, stimmst den Schwellenwert auf echte Fehlerkosten ab und vergleichst Jevs Antworten auf denselben Eingaben.
Der Code
Der Router läuft so, wie er ist, mit decision.py aus der letzten Lektion im selben Ordner. Für den Rückfall nutzt er Claude Opus 5.5.
# router.py – schneller Pfad bei hoher Sicherheit, sonst das große Modell
import json
import time
import anthropic
from decision import decide
client = anthropic.Anthropic()
FULL_MODEL = "claude-opus-5-5" # der Rückfall: volle Stärke, voller Preis
THRESHOLD = 0.8 # vorsichtig starten, später gegen Labels abstimmen
LOG_PATH = "decisions.jsonl"
# Routen mit Handler bekommen einen schnellen Pfad. "other" ist der bewusste
# Auffangkorb ohne Handler: Alles Unbekannte fällt immer durch.
ROUTES = {
"billing": lambda t: "An die Abrechnung weitergeleitet, Beleg angefordert.",
"password_reset": lambda t: "Link zum Zurücksetzen des Passworts verschickt.",
"cancellation": lambda t: "An einen Menschen im Kundenerhalt eskaliert.",
"other": None,
}
ROUTE_SCHEMA = {"type": "string", "enum": list(ROUTES)}
QUESTION = "Welche Route soll dieses Support-Ticket bearbeiten?"
def log_decision(entry: dict) -> None:
with open(LOG_PATH, "a", encoding="utf-8") as f:
f.write(json.dumps(entry, ensure_ascii=False) + "\n")
def fall_through(ticket: str) -> str:
response = client.messages.create(
model=FULL_MODEL,
max_tokens=16000,
output_config={"effort": "medium"},
messages=[{"role": "user", "content": f"Bearbeite dieses Support-Ticket:\n{ticket}"}],
)
if response.stop_reason == "refusal":
return "Vom Modell abgelehnt, an einen Menschen weitergegeben."
return next(b.text for b in response.content if b.type == "text")
def handle(ticket: str) -> str:
start = time.perf_counter()
decision = decide(ROUTE_SCHEMA, QUESTION, ticket)
decide_ms = round((time.perf_counter() - start) * 1000)
handler = ROUTES.get(decision["value"])
fast = handler is not None and decision["confidence"] >= THRESHOLD
outcome = handler(ticket) if fast else fall_through(ticket)
log_decision({
"ts": time.time(),
"ticket": ticket,
"value": decision["value"],
"confidence": decision["confidence"],
"threshold": THRESHOLD,
"path": "fast" if fast else "fall_through",
"decide_ms": decide_ms,
})
return outcome
if __name__ == "__main__":
print(handle("Ich wurde diesen Monat zweimal für dieselbe Rechnung belastet."))
print(handle("Eure App hat drei Jahre meiner Daten gelöscht und ich bin außer mir."))Zeilen 10-12
Das Modell für den Rückfall, der Schwellenwert und die Log-Datei. 0,8 ist ein vorsichtiger Start, der richtige Wert kommt später aus den Labels.
Für Ablehnungen bietet die API bei Opus 5.5 auch einen Weg auf Serverseite (Stand: 13. Nov. 2026). Mit der Beta server-side-fallback-2026-07-01 und dem Parameter fallbacks führt sie eine abgelehnte Anfrage im selben Aufruf auf einem Ersatzmodell aus. Wir lassen das hier weg. Eine abgelehnte Support-Anfrage soll ohnehin ein Mensch ansehen, und der Router kommt so ohne Beta-Header aus.
Was im Test passierte
Die zwei Beispieltickets am Ende der Datei nehmen beide Pfade (Stand: 13. Nov. 2026). Die doppelte Abbuchung ging mit Konfidenz 1,0 an die Abrechnung, nach rund einer Sekunde für fast nichts. Das Ticket über die gelöschten Daten landete bei other und fiel an Opus. Opus brauchte 12,6 Sekunden, verbrauchte 59 Eingabe- und 1.352 Ausgabe-Tokens und kostete damit rund 2,7 Cent. Heraus kamen eine interne Einordnung mit Priorität „kritisch“ und ein Antwortentwurf an die Kundin.
Mit den 20 gelabelten Tickets aus der letzten Lektion sieht die Rechnung so aus: 15 Tickets nahmen den schnellen Pfad, 5 fielen durch. Zwei der 15 schnellen Entscheidungen waren falsch. Eines davon ist das mehrdeutige Ticket mit Kontozugang und Abbuchung, das Haiku mit fünf von fünf Stimmen der Abrechnung gab. Ein höherer Schwellenwert hätte nichts geändert. Bei 0,9 waren es dieselben 15 Tickets, weil fast jede Konfidenz 1,0 war.
Der Rechner zeigt, was der schnelle Pfad spart. Er nimmt die gemessenen Kosten: rund 0,00017 US-Dollar pro Entscheidung und 2,7 Cent pro Opus-Aufruf.
Was der Router pro 1000 Tickets kostet
- Mit Router
- 6,92 USD
- Alles an Opus
- 27,00 USD
- Ersparnis
- 74 %
Die Kosten für Fehler auf dem schnellen Pfad fehlen in dieser Rechnung. Genau sie bestimmen, wo dein Schwellenwert liegen sollte.
Welcher Pfad?
Der Schwellenwert steht auf 0,8. Ordne jede Entscheidung dem Pfad zu, den router.py nimmt.
Noch offen (5)
- billing, Konfidenz 1,0
- password_reset, Konfidenz 0,8
- cancellation, Konfidenz 0,6
- other, Konfidenz 1,0
- billing, Konfidenz 0,4
Schneller Pfad (0)
Fällt an Opus (0)
Worauf du achtest
Der Schwellenwert ist eine Geschäftsentscheidung. Du bemisst ihn an den Kosten einer falschen Aktion auf dem schnellen Pfad, wie in Jev im Agenten-Stack beschrieben. Ein Passwort-Link an die falsche Person ist ärgerlich. Eine automatische Erstattung an die falsche Person kostet Geld.
Beim Stand-in kommt eine zweite Einschränkung dazu. Seine Konfidenz ist ein Stimmenanteil, über Kalibrierung sagt sie nichts. Fünf gleiche Stimmen bei einem mehrdeutigen Ticket sind häufig, unser Test hat das bestätigt. Behalte deshalb den Auffangkorb und vergleich das Log jede Woche mit dem Urteil von Menschen, bevor du den Schwellenwert senkst.
Das Log selbst darfst du nicht weglassen. Sobald du Zugang zu Jev hast, ist diese Datei mit Eingaben, Entscheidungen und Konfidenzen genau das, was du durch Jev schickst. Das zeigt die nächste Lektion, Build: Der Jev-Tausch.
Merksätze
- Der schnelle Pfad braucht zwei Dinge: einen Handler für die Route und eine Konfidenz über dem Schwellenwert.
- other hat bewusst keinen Handler. Alles Unbekannte fällt damit an das große Modell.
- Im Test kostete der schnelle Pfad rund 0,00017 US-Dollar, ein Opus-Aufruf rund 2,7 Cent und 12,6 Sekunden.
- Mit dem Stand-in greift der Schwellenwert kaum, weil fast jede Konfidenz 1,0 ist. Fehler auf dem schnellen Pfad findest du nur mit Labels.
- Das Log ist der Testdatensatz für den Tausch. Es braucht Regeln für Zugriff und Löschung.
Prüf dich selbst
Denkfrage
Warum bekommt other keinen Handler, auch keinen einfachen?
Weil other die Kategorie für alles ist, was der Router nicht kennt. Ein Handler würde genau diese Tickets automatisch erledigen, also die, bei denen du am wenigsten weißt, was richtig ist. Ohne Handler gehen sie an das große Modell, und zwar unabhängig von der Konfidenz.
Denkfrage
Du hebst den Schwellenwert von 0,8 auf 0,9, und es ändert sich nichts. Woran liegt das?
Am Stand-in. Fast alle Entscheidungen bekommen fünf von fünf Stimmen, also 1,0. Zwischen 0,8 und 1,0 gibt es keine Werte, die der höhere Schwellenwert aussortieren könnte. Eine fein aufgelöste Wahrscheinlichkeit wie die von Jev verteilt sich anders. Das zeigt der Shadow-Lauf in der nächsten Lektion.
Prüf dich selbst
Selbst nachweisen
0 von 3 erledigt
Quellen
- Models overview
claude-opus-5-5, Preise 4 und 20 US-Dollar pro Million Tokens.
- Effort
output_config.effort, Standard bei Opus 5.5 ist medium.
- Confidence
Schwellenwerte auf die Wahrscheinlichkeit der gewählten Option setzen.