/pattern/routing/

02 · WorkflowClassifier RouterIntent RoutingConditional Branching

Routing.
Einmal klassifizieren. An den richtigen Spezialisten weitergeben.

Ein Klassifizierungs- oder Entscheidungsmodul klassifiziert eine Anfrage und leitet sie an spezifische Ziele weiter, etwa einen spezialisierten Prompt, Agenten oder ein Tool.

Wann man dazu greift

  • Verschiedene Anfrageklassen eine unterschiedliche Behandlung erfordern.
  • Spezialisierte Tools für spezifische Absichten existieren.
  • Fehlrouting hohe Kosten verursacht.

Wann es nach hinten losgeht

  • Alle Aufgaben denselben Ablauf nutzen.
  • Die Klassifizierung instabil ist.
  • Die Routing-Logik komplexer wird als die Aufgabe selbst.

Die Abwägung

Präzisere Behandlung wird auf Kosten zusätzlicher Entscheidungslogik und des Risikos von Fehlklassifizierungen erkauft.

Das mentale Modell

Eine Form, die du auf eine Serviette zeichnen kannst.

Ein Klassifizierer entscheidet, welcher nachgelagerte Spezialist die Arbeit übernimmt — die übrigen bleiben für diesen Durchlauf inaktiv.

ClassifyBillingTechnicalRefund
Einmal durchspielen

Ein realer Ablauf, Schritt für Schritt.

Aufgabe"Triagiere diese eingehende Kunden-E-Mail."
1 / 5
KlassifizierenE-Mail enthält Schlüsselwörter: 'Rechnung', 'Abbuchung', 'Reklamation' → Kategorie: billing
Verzweigungclassifier(email) → "billing"
Handlerbilling_handler(email) → { status, refundEligible, nextSteps }
Zusammenstellenresponse = compose_reply(handler_output, tone=professional)
AntwortEntwurfsantwort über Abrechnungsspezialisten weitergeleitet. Weder technische noch Rückerstattungsagenten wurden aufgerufen.
Im Code

Die Schleife ist schon eingebaut.

LangGraphpython
from langgraph.graph import StateGraph, END
from typing import Literal

def classify(state) -> Literal["billing", "technical", "refund"]:
    return classifier_llm(state["email"])

def billing_handler(state): ...
def technical_handler(state): ...
def refund_handler(state): ...

g = StateGraph(State)
g.add_node("classify", classify)
g.add_node("billing", billing_handler)
g.add_node("technical", technical_handler)
g.add_node("refund", refund_handler)

# Conditional edges keyed on classifier output
g.add_conditional_edges("classify", classify, {
    "billing": "billing",
    "technical": "technical",
    "refund": "refund",
})
for node in ["billing", "technical", "refund"]:
    g.add_edge(node, END)
g.set_entry_point("classify")
router = g.compile()
Fallstricke

Zwei Wege, wie dieses Pattern Probleme verursachen kann.

Kategorien überlappen sich und der Klassifizierer springt hin und her

Eine Anfrage passt gleich gut zu zwei Kategorien, und der Klassifizierer wechselt zwischen ihnen bei Wiederholungen. Der Nutzer sieht inkonsistentes Routing.

Lösung · Eine explizite Hierarchie oder Tie-Break-Regel hinzufügen; Konfidenzwerte offenlegen und Fälle mit geringer Konfidenz an einen 'unbekannt'-Bereich weiterleiten.

Kein 'unbekannt'-Bereich — Grenzfälle werden zwangsweise weitergeleitet

Der Klassifizierer emittiert immer eine bekannte Bezeichnung, auch wenn die Eingabe mehrdeutig ist. Grenzfälle gehen stillschweigend an den falschen Spezialisten.

Lösung · Einen 'unbekannt'- oder 'eskalieren'-Zweig für Konfidenz unterhalb eines Schwellenwerts reservieren. Diese an einen Generalisten oder Menschen weiterleiten.

Framework-Unterstützung

Wo Routing nativ ist.

Microsoft Agent FrameworkNativ
Anthropic Cookbookals Rezept dokumentiertAnpassbar

Suche

Patterns, Frameworks und Seiten durchsuchen.