Der Agentenkurs · Das Gate
Gate in der Praxis
Lernziele
- Du labelst zweihundert echte Einträge deines Stroms mit drei Labels.
- Du trainierst einen Klassifikator als Basislinie und liest Precision und Recall pro Klasse.
- Du baust das Gate mit Schwellenwert und Fail-closed in deine Pipeline ein.
Die Disziplin passt in einen Satz: Bevor du einen Anbieter bewertest, labelst du ein paar hundert echte Beispiele und trainierst einen einfachen Klassifikator · engl. classifierEin trainiertes Verfahren, das einen Eintrag einer von mehreren festen Klassen zuordnet, etwa eine logistische Regression über Wortmerkmale. Es lernt aus Beispielen, die du vorher von Hand gelabelt hast.Im Glossar. Das dauert dreißig Minuten. Das Ergebnis ist die Basislinie, die jede Behauptung auf deinen Daten schlagen muss, bevor sie einen Platz in deiner Pipeline bekommt.
Zweihundert echte Beispiele labeln
Nimm die letzten 200 Einträge aus dem Strom, den dein AgentEin System, in dem ein Sprachmodell seinen nächsten Schritt selbst wählt: Es ruft Werkzeuge auf, wertet das Ergebnis aus und macht weiter, bis das Ziel erreicht ist.Im Glossar wirklich verarbeitet. Synthetische Beispiele und fremde öffentliche Datensätze taugen dafür nicht. Du brauchst drei Labels:
file: reines Nachschlagematerial wie Newsletter, Quittungen, Übersichten. Es geht direkt ins Archiv und braucht kein Modell · engl. model, LLMDas Sprachmodell (LLM, Large Language Model). Es liest Text, schreibt Text und entscheidet in einem Agenten, was als Nächstes passiert.Im Glossar.act: erzeugt eine konkrete Aufgabe, etwa eine Rechnung zum Bezahlen, ein Formular zum Unterschreiben oder einen Termin zum Bestätigen.judge: braucht echtes Urteilsvermögen, etwa eine unklare Anfrage, ein Angebot oder alles, bei dem etwas auf dem Spiel steht.
Beim Labeln gelten drei Regeln. Label, was der Eintrag ist, auch wenn du dir andere Kategorien wünschst. Schwankst du zwischen zwei Labels, nimm judge: Dein eigenes Zögern sagt das Zögern des Gates voraus. Erfinde unterwegs keine neuen Kategorien, notier Kandidaten und bring den Durchgang zu Ende. Bei fünf Sekunden pro Eintrag dauert das knapp siebzehn Minuten. Speichere das Ergebnis als labels.csv:
text,label
"Wöchentlicher Digest: zehn KI-Papers, die du verpasst hast",file
"Rechnung 2214 anbei, fällig am Freitag, bitte Eingang bestätigen",act
"Fwd: Gedanken zu diesem Partnerschaftsvorschlag?",judge
Welches Label?
Label jede Mail so, wie du es für labels.csv tun würdest. Im Zweifel gilt judge.
Noch offen (6)
- Deine Quittung für Bestellung 4471
- Bitte das Formular zur Datenschutzerklärung bis Montag unterschreiben
- Kunde droht mit Kündigung, wie reagieren wir?
- Newsletter: Neues aus der Welt der Datenbanken
- Kannst du den Termin am Dienstag um 10 Uhr bestätigen?
- Rechnung anbei. Übrigens, sollen wir den Vertrag verlängern?
file: ablegen (0)
act: Aufgabe (0)
judge: abwägen (0)
Die Basislinie trainieren
Installier einmal die Pakete mit pip install scikit-learn pandas joblib. Danach trainierst du die Basislinie mit diesem Skript. Geh es Schritt für Schritt durch.
# train_gate.py
import joblib
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
df = pd.read_csv("labels.csv")
X_train, X_test, y_train, y_test = train_test_split(
df["text"], df["label"], test_size=0.25, # ein Viertel bleibt für den Test
stratify=df["label"], random_state=42, # gleiche Label-Anteile in beiden Teilen
)
gate = Pipeline([
("tfidf", TfidfVectorizer(ngram_range=(1, 2), min_df=2, sublinear_tf=True)),
("clf", LogisticRegression(max_iter=1000, class_weight="balanced")),
])
gate.fit(X_train, y_train)
print(classification_report(y_test, gate.predict(X_test), digits=3))
joblib.dump(gate, "gate.joblib")Zeilen 2-8
scikit-learn liefert Merkmale, Klassifikator, Aufteilung und Bericht. joblib speichert das fertige Gate als Datei.
Erst messen, dann entscheiden
Lies Precision und Recall pro Klasse, zusätzlich zur Gesamt-Trefferquote. Precision sagt, wie viele der als act erkannten Mails wirklich act waren. Recall sagt, wie viele der echten act-Mails das Gate gefunden hat. Eine hohe Gesamtquote kann eine schwache Klasse verdecken, besonders eine kleine wie judge.
Diese Zahlen sind deine Basislinie. Erst jetzt lässt sich die Anbieterfrage sauber stellen: Schlägt etwas Aufwendigeres diese Basislinie, auf diesen Daten, deutlich genug für einen Netzwerkaufruf, eine Rechnung und eine Abhängigkeit? Nach den unabhängigen Belegen aus Gates in der Praxis lautet die Antwort für eine feste, gelabelte Aufgabe meist nein. Das ist die Einschätzung dieses Kurses auf dem Stand von Nov. 2026.
Den Gewinner einbauen
Hat die Basislinie gewonnen, lädst du sie in deiner Pipeline und leitest jeden Eintrag über eine einzige Funktion weiter.
# gate.py
import joblib
gate = joblib.load("gate.joblib")
THRESHOLD = 0.85 # Startwert, erst nach dem Bänder-Test verschieben
HANDLED = {"file", "act"} # Labels mit festem Handler, judge fehlt mit Absicht
def route(text: str) -> tuple[str, float]:
probs = gate.predict_proba([text])[0]
best = probs.argmax()
label = gate.classes_[best]
confidence = float(probs[best])
if label not in HANDLED or confidence < THRESHOLD:
return "escalate", confidence # im Zweifel an das große Modell
return label, confidenceZeilen 2-4
Das trainierte Gate kommt aus der Datei. Ein Netzwerkaufruf fällt nicht an.
Alles, was escalate zurückgibt, geht an das Hauptmodell. Das ist Fail-closed. Das vollständige Gerüst mit Logging und der Weiterleitung an das Sprachmodell zeigt das Handbuch Gates. Diese Pipeline passt unverändert in dessen schnellen Pfad.
Tipps
- Logge jede Entscheidung mit ihrer Konfidenz, ob sie weitergeleitet wurde oder nicht. Das Log ist dein künftiger Testsatz.
- Trainiere wöchentlich neu. Eskalationen, die das Hauptmodell gelöst hat, sind kostenlose Labels. Häng sie an
labels.csvan. - Behalte
judgefür immer. Ein Gate ohne Ausweg rät. - Starte den Schwellenwert bei 0,85. Verschieb ihn erst, wenn du die Trefferquote nach Konfidenzbändern auf zurückgehaltenen Daten gemessen hast.
Probier es selbst aus
Drei Experimente zeigen dir, ob dein Gate trägt. Arbeite sie mit deinem eigenen labels.csv ab.
Selbst nachweisen
0 von 3 erledigt
Sortiert das Gate den Strom, hat das teure Modell endlich Platz für seine eigentliche Arbeit. Darum geht es im nächsten Modul, Der Harness. Wer tiefer in Entscheidungsmodelle einsteigen will, findet im Handbuch Gates ihre Stärken und den Bau eines Routers mit Konfidenzschwelle.
Merksätze
- Vor jedem Anbietervergleich labelst du 200 echte Einträge und trainierst in dreißig Minuten eine Basislinie.
- Drei Labels reichen: file, act und judge. Im Zweifel gilt judge.
- Precision und Recall pro Klasse zeigen, was die Gesamt-Trefferquote verdeckt.
- Das Gate leitet nur sichere Fälle mit festem Handler auf den günstigen Pfad, alles andere geht an das Hauptmodell.
- Logs und gelöste Eskalationen werden zu neuen Labels, mit denen du jede Woche nachtrainierst.
Prüf dich selbst
Denkfrage
Dein Gate erreicht 96 % Gesamt-Trefferquote, aber der Bericht zeigt für judge einen Recall von 0,55. Was bedeutet das, und was tust du?
Fast die Hälfte der echten judge-Fälle landet bei file oder act und damit womöglich im günstigen Pfad. Die hohe Gesamtquote verdeckt das, weil judge eine kleine Klasse ist. Prüf die Konfidenz dieser Fehlgriffe, heb den Schwellenwert für die betroffenen Routen an und label mehr judge-Beispiele.
Denkfrage
Ein Anbieter zeigt dir 98 % Trefferquote auf einem öffentlichen Datensatz. Wie gehst du vor, bevor du ihn einbaust?
Du lässt sein Werkzeug auf deinem eigenen zurückgehaltenen Viertel laufen und vergleichst es pro Klasse mit deiner Basislinie. Der Vorsprung muss einen Netzwerkaufruf, eine Rechnung und eine Abhängigkeit rechtfertigen. Danach folgt eine Woche Schattenbetrieb, bevor das Werkzeug echte Entscheidungen trifft.
Prüf dich selbst
Quellen
- scikit-learn: LogisticRegression
Dokumentation des Klassifikators aus train_gate.py.