Einen LangGraph-Kundensupport-Agenten mit Tool-Aufrufen, menschlicher Freigabe und Ausführungslimits erstellen
Ein praxisnahes LangGraph-Muster für die Triage im Kundensupport: Anfragen weiterleiten, Lookup-Tools aufrufen, Rückerstattungen für die menschliche Freigabe pausieren und die Graph-Ausführung begrenzen.
Auf dieser Seite
Die Designentscheidung: Der Agent darf eine Rückerstattung finden, aber nicht abschließend ausführen
Ein Support-Agent sollte Kaufdetails sammeln und passende Datensätze finden dürfen, ohne selbstständig eine Rückerstattung auszustellen. In LangGraph lässt sich diese Unterscheidung im Workflow ausdrücken: Die Anfrage weiterleiten, bei Bedarf schreibgeschützte Lookup-Tools aufrufen und anschließend vor der Rückerstattungsaktion pausieren, damit eine Person sie genehmigen oder ablehnen kann.
Dieses Tutorial setzt dieses Muster für die Triage im Kundensupport um. Es verwendet LangGraph für die Orchestrierung, ein Chatmodell mit Tool-Aufrufen für die Suche, einen menschlichen Kontrollpunkt vor dem folgenschweren Knoten und ein Rekursionslimit zur Begrenzung der Graph-Ausführung. Der Code ist ein anpassbares Muster und keine getestete OneMux-Integration.
Das für diesen Artikel bereitgestellte LangSmith-Tutorial erstellt einen Support-Bot für einen digitalen Musik-Shop mit separaten Lookup- und Rückerstattungs-Subgraphen. Es beschreibt das Extrahieren von Kunden- und Kaufdetails, das Anfordern fehlender Informationen sowie die Bewertung finaler Antworten, von Tool-Aufrufverläufen und einzelner Schritte. Sein Rückerstattungsbeispiel verwendet das Löschen aus einer Datenbank und überspringt ausdrücklich die Authentifizierung sowie weitere Sicherheitsmaßnahmen für den Produktivbetrieb. Übernehmen Sie das destruktive Verhalten dieser Demo nicht in ein Live-Supportsystem. Das LangSmith-Tutorial zur Evaluierung komplexer Agenten lesen.
Voraussetzungen und Grenzen
Installieren Sie LangGraph und die relevante LangChain-Integration für den von Ihnen gewählten Modellanbieter. Das Quell-Tutorial verwendet langgraph und langchain[openai]; das folgende Beispiel lässt die Modellinitialisierung jedoch bewusst anbieterspezifisch. Außerdem benötigen Sie eine Datenbank oder einen Dienst mit einer schreibgeschützten Kaufsuche und einer Rückerstattungsaktion, die Ihre Anwendung kontrolliert.
Legen Sie vor der Anbindung eines Modells fest, was jedes Tool tun darf:
- Lookup: Nur Datensätze zurückgeben, die der authentifizierte Kunde einsehen darf.
- Rückerstattung vorbereiten: Die genaue Transaktion und den Betrag bestimmen; keine Datensätze ändern.
- Rückerstattung ausführen: Die genehmigte Aktion im Anwendungscode ausführen – mit Autorisierung und Audit-Logging.
Halten Sie Kundenauthentifizierung, Autorisierung, Idempotenz und Rückerstattungsrichtlinien außerhalb des Ermessensspielraums des Modells. Ein vom Modell erzeugter Kundenname oder eine Rechnungs-ID ist kein Identitätsnachweis.
Einen Graphen mit menschlichem Kontrollpunkt erstellen
Das Beispiel verwendet ein Modell mit Unterstützung für Tool-Aufrufe, ein Lookup-Tool und einen separaten Rückerstattungsknoten. Ersetzen Sie die markierten Anwendungsfunktionen durch Ihre eigenen autorisierten Dienstaufrufe. Modell und Tool-Schema müssen vom konfigurierten Endpunkt unterstützt werden; die Kompatibilität hängt von der dokumentierten Unterstützung für Endpunkt und Parameter ab. Dieses Snippet belegt nicht, dass ein bestimmtes Modell oder eine bestimmte OneMux-Konfiguration getestet wurde.
from typing import Annotated, Literal
from langchain.tools import tool
from langchain_core.messages import AnyMessage
from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import interrupt
from typing_extensions import TypedDict
# Replace with your provider's documented LangChain model setup.
# Confirm that the chosen endpoint supports tool calling and the parameters used.
model = make_your_chat_model().bind_tools([]) # bind the tools below in your application
class State(TypedDict):
messages: Annotated[list[AnyMessage], add_messages]
refund_request: dict | None
approval: str | None
@tool
def find_purchases(customer_reference: str) -> list[dict]:
"""Find purchases for an already authenticated customer."""
return authorized_purchase_lookup(customer_reference)
tools = [find_purchases]
model = make_your_chat_model().bind_tools(tools)
def assistant(state: State):
return {"messages": [model.invoke(state["messages"])]}
def prepare_refund(state: State):
# Build this from validated application data, not model-invented values.
request = build_validated_refund_request(state["messages"])
decision = interrupt({
"type": "refund_approval",
"request": request,
"instruction": "Approve or reject this exact refund request.",
})
if decision != "approve":
return {"approval": "rejected", "refund_request": request}
return {"approval": "approved", "refund_request": request}
def execute_refund(state: State):
if state.get("approval") != "approved":
return {"messages": [{"role": "assistant", "content": "The refund was not approved."}]}
result = issue_refund_safely(state["refund_request"])
return {"messages": [{"role": "assistant", "content": format_refund_result(result)}]}
builder = StateGraph(State)
builder.add_node("assistant", assistant)
builder.add_node("tools", ToolNode(tools))
builder.add_node("prepare_refund", prepare_refund)
builder.add_node("execute_refund", execute_refund)
builder.add_edge(START, "assistant")
builder.add_conditional_edges("assistant", tools_condition)
builder.add_edge("tools", "assistant")
builder.add_edge("prepare_refund", "execute_refund")
builder.add_edge("execute_refund", END)
graph = builder.compile(checkpointer=MemorySaver())
Dies ist ein strukturelles Beispiel und kein vollständiger Routing-Graph: Ihre Anwendung muss eine verifizierte Rückerstattungsabsicht an prepare_refund und gewöhnliche Fragen an den Assistant-/Lookup-Pfad weiterleiten. Der Aufruf interrupt() pausiert den Graphen und gibt die Freigabedaten an den Aufrufer zurück. Eine Oberfläche für die menschliche Prüfung sollte vor dem Übermitteln einer Entscheidung den Kunden, die Transaktion, den Betrag und den Richtlinienkontext anzeigen. Setzen Sie den gleichen Thread mit LangGraphs Mechanismus Command(resume=...) und derselben Thread-ID fort. Speichern Sie Checkpoints angemessen; Checkpointing im Arbeitsspeicher ist für die Entwicklung gedacht, nicht für dauerhafte Workflows im Produktivbetrieb.
Ein entscheidendes Detail der Ablaufsteuerung: Ein Interrupt ist eine Pause, kein Berechtigungssystem. Erzwingen Sie den Freigabewert im Rückerstattungs-Ausführungsknoten erneut und stellen Sie sicher, dass der Rückerstattungsdienst selbst Autorisierung, Transaktionsberechtigung und doppelte Anfragen prüft.
Ausführung begrenzen und Fehler sichtbar machen
Übergeben Sie beim Aufruf des Graphen ein Rekursionslimit. Es begrenzt die Graph-Supersteps, nicht Modell-Tokens, die Laufzeit von Tools, die Kosten von Datenbankabfragen oder die Anzahl der Benutzeranfragen. Legen Sie für Modellaufrufe und Tools separate Timeouts und Ressourcenlimits fest.
from langgraph.errors import GraphRecursionError
config = {
"configurable": {"thread_id": "support-case-123"},
"recursion_limit": 12,
}
try:
result = graph.invoke(
{"messages": [{"role": "user", "content": "I need help with a purchase."}]},
config=config,
)
except GraphRecursionError:
# Return a safe handoff or ask for clarification; log the trace for review.
result = {"status": "needs_human_review"}
Wählen Sie ein Limit auf Grundlage des erwarteten Workflows und testen Sie sowohl den normalen Abschluss als auch Eingaben, die Schleifen verursachen können. Vermeiden Sie es, einen erschöpften Graphen stillschweigend erneut zu versuchen: Wiederholungen können Tool-Aufrufe duplizieren, sofern Ihre Tools nicht idempotent sind. Schreibgeschützte Lookup-Tools lassen sich sicherer wiederholen als Aktionen mit Seiteneffekten.
Den Ablauf bewerten, nicht nur die Antwort
Das bereitgestellte LangSmith-Tutorial nennt drei nützliche Evaluationsziele: finale Antwort (war die Antwort an den Kunden angemessen?), Trajektorie (hat der Agent den erwarteten Tool-Aufrufpfad genommen?) und einzelner Schritt (hat er für eine bestimmte Entscheidung das richtige Tool gewählt?). Erstellen Sie für die Rückerstattungs-Triage Fälle mit fehlenden Identitätsdaten, mehreren passenden Käufen, einer Suche ohne Ergebnisse, einer abgelehnten Freigabe und einer genehmigten Rückerstattung.
Prüfen Sie, ob der Agent erforderliche Informationen anfordert, statt sie zu erfinden; ob ein Lookup keine Rückerstattung auslöst; und ob eine Ausführung ohne Freigabe unmöglich ist. Verwenden Sie für die Evaluierung Mock- oder Testdienste, damit Tests keine echten Kundendatensätze verändern. Das Quell-Tutorial verwendet für seine Datenbankoperationen einen Mock-Modus, beschreibt jedoch seine eigene Demo-Konfiguration – keine Sicherheitsgarantie für den Produktivbetrieb.
OneMux für den Modellzugriff verwenden
OneMux bietet über eine OpenAI-kompatible API Zugriff auf führende KI-Modelle. Wenn Sie eine einheitliche API-Oberfläche für den Modellzugriff wünschen, sehen Sie sich den OneMux-Schnellstart, die API-Dokumentation und die verfügbaren Modelle an. Die Kompatibilität für diesen Workflow hängt von der dokumentierten Unterstützung für Tool-Aufrufe und akzeptierte Parameter des ausgewählten Modellendpunkts ab. Bestätigen Sie diese Details vor der Bereitstellung; dieser Artikel behauptet nicht, dass das LangGraph-Beispiel mit OneMux getestet wurde.
Einschränkungen und Fehlerbehebung
- Das Modell ruft kein Tool auf: Prüfen Sie, ob der ausgewählte Endpunkt Tool-Aufrufe unterstützt und ob das Tool-Schema in dem von ihm dokumentierten Format übergeben wird.
- Der Graph läuft in einer Schleife: Untersuchen Sie die Übergänge zwischen Assistant und Tools, begrenzen Sie die Graph-Schritte und stellen Sie sicher, dass ein abgeschlossenes Tool-Ergebnis die nächste Entscheidung verändert.
- Nach der Freigabe wird der falsche Fall fortgesetzt: Verwenden Sie eine stabile, an den Supportfall gebundene Thread-ID und überprüfen Sie den Checkpoint vor der Fortsetzung.
- Eine Rückerstattung wird zweimal ausgeführt: Fügen Sie an der Dienstgrenze Idempotenz hinzu und protokollieren Sie die genehmigte Anfrage sowie das Ergebnis.
- Der Agent gibt Datensätze eines anderen Kunden preis: Korrigieren Sie die Autorisierung im Lookup-Dienst; eine Prompt-Anweisung ist keine Zugriffskontrolle.
Fazit
LangGraph ermöglicht es, Support-Triage als explizite Workflow-Schritte auszudrücken, statt einer einzelnen Modellantwort die Entscheidung und Ausführung anzuvertrauen. Halten Sie Lookups schreibgeschützt, pausieren Sie vor Rückerstattungen, validieren Sie die Freigabe bei der Ausführung und begrenzen Sie die Graph-Schritte. Bewerten Sie anschließend sowohl die Antwort als auch den vom Agenten genommenen Pfad. Diese Kontrollen machen den Workflow leichter überprüfbar – die Verantwortung für Sicherheit im Produktivbetrieb und die Durchsetzung von Richtlinien bleibt jedoch bei der Anwendung.
Quellen
- LangSmith: Einen komplexen Agenten evaluieren – Quelle für das Musik-Shop-Supportbeispiel, seine Lookup-/Rückerstattungsstruktur, den Mock-Modus und die drei Evaluationsziele.
FAQ
Wie verlange ich eine menschliche Freigabe, bevor ein LangGraph-Agent eine Rückerstattung ausstellt?
Pausieren Sie den Graphen mit einem LangGraph-Interrupt vor dem Rückerstattungs-Ausführungsknoten, zeigen Sie die validierte Anfrage einer prüfenden Person und setzen Sie denselben Checkpoint erst nach einer ausdrücklichen Entscheidung fort. Prüfen Sie die Freigabe zusätzlich im Ausführungsknoten erneut und erzwingen Sie die Richtlinie im Rückerstattungsdienst.
Begrenzt ein LangGraph-Rekursionslimit die Laufzeit von Tools oder Modell-Tokens?
Nein. Es begrenzt Graph-Supersteps, nicht den Verbrauch von Modell-Tokens, die Tool-Dauer, Datenbankkosten oder das Volumen eingehender Anfragen. Fügen Sie unabhängige Timeouts und Ressourcenlimits hinzu.
Kann das Modell entscheiden, ob ein Kunde zu einer Rückerstattung berechtigt ist?
Nein. Behandeln Sie die Modellausgabe als nicht vertrauenswürdige Eingabe. Authentifizieren Sie den Kunden und validieren Sie den Transaktionszugriff sowie die Berechtigung zur Rückerstattung im Anwendungs- und Dienstcode.
Was sollte ich bei einem Kundensupport-Agenten evaluieren?
Evaluieren Sie die finale Antwort, die Abfolge der Tool-Aufrufe und einzelne Schritte zur Tool-Auswahl. Berücksichtigen Sie Fälle mit fehlenden Informationen, uneindeutigen Käufen, abgelehnter Freigabe und genehmigter Rückerstattung und verwenden Sie für Seiteneffekte Testdienste.
Ähnliche Artikel
Guides
Einen begrenzten LangGraph-Agenten für schema-validierte Extraktion erstellen
Erstellen Sie einen LangGraph-Workflow, der bei Bedarf ein Tool aufruft, innerhalb eines festgelegten Ausführungsbudgets bleibt und strukturierte Daten zurückgibt, die anhand eines Pydantic-Schemas validiert werden.
Guides
Agentic RAG mit LangGraph: Tool Calling, Quellenangaben und begrenzte Ausführung
Erstellen Sie einen LangGraph-Agenten zur Beantwortung von Dokumentfragen, der bei Bedarf recherchiert, den Kontext bewertet, erfolglose Suchen erneut versucht und Antworten mit Quellenangaben liefert – ohne unbegrenzte Ausführung.
Guides
Ist Grok 4.20 0309 Reasoning das richtige Modell für den Kundensupport?
Ein praxisorientierter Entscheidungsleitfaden zum Einsatz von Grok 4.20 0309 Reasoning im Kundensupport: Wann Reasoning und Tool Calling helfen, wann die Non-Reasoning-Variante besser geeignet ist und wie Sie sichere Support-Workflows über OneMux implementieren.
Guides
Einen n8n-Workflow für Codeänderungen mit menschlicher Freigabe und Testprüfung erstellen
Entwickeln Sie einen n8n-Workflow, der Repository-Änderungen vorschlägt, eine menschliche Freigabe für den Schreibvorgang einholt und den entstehenden Commit mit Tests überprüft.