LangGraph für Produktionsagenten: Kontrollpunkte, HITL und Mehr-Agenten-Graphen
Warum Ketten bei Fahrrädern zum Stillstand kommen und wieder in Bewegung geraten, sowie wie LangGraph-Node, -Kanten und -Checkpoint-Speicher es ermöglichen, Produktionsagenten nutzbar zu machen, wobei eine menschliche Überprüfung eingebunden ist.
Quellen: LangGraph Explained: Build Production-Ready AI Agents in 2026
Was ist LangGraph?
LangGraph ist eine Laufzeitumgebung zum Erstellen von zustandsbehafteten, mehrschrittigen Agenten als expliziten Graphen: Knoten führen Aufgaben aus, Kanten entscheiden, was als Nächstes ausgeführt wird, und der gemeinsame Zustand bleibt über die Schritte hinweg bestehen – auch nach Fehlern und menschlichen Pausen.
Vor zwei Jahren bestanden viele „Agenten“ aus while-Schleifen um ein LLM ohne Wiederherstellungsmöglichkeit. Abstürze mitten in einer Aufgabe bedeuteten ein Neustarten von vorne. Graphen machen Speicherung, Verzweigungen und Fortsetzung zum Standard.
Warum Ketten nicht ausreichten
LCEL-Ketten eignen sich hervorragend für lineare Pipelines. Sie haben Schwierigkeiten, wenn Zyklen, bedingte Routen, dauerhafte Checkpoints oder menschliche Genehmigungen während des Ablaufs benötigt werden. Das sind Graphenprobleme.
Kernkonzepte: Knoten, Kanten und Zustand
- Zustand – typisierte Felder, die während des Ablaufs mitgetragen werden
- Knoten – Funktionen, die den Zustand aktualisieren
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
import operator
# Define your state
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_action: str
final_answer: str
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
# 1. Define a tool
@tool
def search_web(query: str) -> str:
"""Search the web for current information."""
# Connect to your actual search API here
return f"Search results for: {query}"
# 2. Define the LLM with tools bound
llm = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [search_web]
llm_with_tools = llm.bind_tools(tools)
# 3. Define node functions
def call_llm(state):
response = llm_with_tools.invoke(state["messages"])
return {"messages": [response]}
def should_continue(state):
last_message = state["messages"][-1]
if last_message.tool_calls:
return "run_tools"
return END
# 4. Build the graph
workflow = StateGraph(AgentState)
workflow.add_node("agent", call_llm)
workflow.add_node("run_tools", ToolNode(tools))
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue)
workflow.add_edge("run_tools", "agent")
# 5. Compile with a checkpointer
from langgraph.checkpoint.sqlite import SqliteSaver
memory = SqliteSaver.from_conn_string("agents.db")
graph = workflow.compile(checkpointer=memory)
# 6. Run with a thread ID for persistent state
config = {"configurable": {"thread_id": "user-123"}}
result = graph.invoke({"messages": [("user", "What is the latest GPT model?")]}, config)
print(result["messages"][-1].content)
# Add a human approval gate before a risky action
workflow.add_node("human_review", interrupt(before="execute_payment"))
pip install langgraph langchain-openai psycopg2-binary
Wie Zustandsverwaltung tatsächlich funktioniert
Änderungen werden über Reducer zusammengeführt. Falsch konfigurierte Reducer duplizieren Nachrichten oder löschen Felder. Die Auswahl des Reducers sollte als Teil der Schema-Überprüfung betrachtet werden.
Erster Agent (Python)
Zustand definieren → Knoten hinzufügen → Kanten verbinden → kompilieren → bei Verwendung eines Savers mit einer Thread-ID aufrufen.
Mensch im Prozess
Unterbrechen vor Nebeneffekten; mit einer Genehmigungsdatenmenge fortsetzen. Das ist der operative Unterschied zwischen Demos und Produktionsagenten.
Mehr-Agent-Muster
Die Übertragung von Aufgaben zwischen Supervisoren/Spezialisten, parallele Verzweigungen sowie Untergraphen lassen sich sauber auf benannte Knoten mit gemeinsamem oder geteiltem Zustand abbilden.
Persistenz und Wiederherstellung
Checkpoint-Tools, die auf einer Datenbank basieren, überstehen Neustarts von Prozessen. In-Memory-Speicherlösungen dienen ausschließlich zum Testen.
Wann LangGraph verwendet werden sollte
Nutzen Sie es, wenn der Kontrollfluss nichtlinear ist, pausiert oder fortgesetzt werden muss. Für einmalige RAG-Antworten ohne Verzweigungen sind einfachere Strukturen vorzuziehen.
Fazit
Produktionsagenten benötigen expliziten Zustand und Kanten – nicht nur theoretische Ansätze. LangGraph ist eine zuverlässige Methode, dieses Konzept in Code umzusetzen.
Ignorieren Sie den Marketing-Lärm auf Marktplätzen; der technische Wert liegt in checkpointbasiertem Kontrollfluss und HITL. Halten Sie die Tutorials auf diese Grundlagen fokussiert.
Instrumentieren Sie Start- und End-Ereignisse der Knoten, damit die Protokolle zeigen, welche Verzweigung ausgeführt wurde. Graphen ohne Telemetriedaten werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graph-Definitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die wieder aufgenommenen Threads, die weiterhin auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen auf dem Markt; der technische Wert liegt im kontrollierten Ablauf mit Checkpoints sowie in HITL. Halten Sie die Tutorials auf diesen Grundkonzepten fokussiert.
Instrumentieren Sie die Start-/Ende-Ereignisse der Knoten, damit die Spuren zeigen, welche Abzweigung ausgeführt wurde. Graphen ohne Telemetrie werden um 2 Uhr morgens zu Black Boxes.
Versionen der Graphendefinitionen zusammen mit den Anweisungen. Ein Umbenennen eines Knotens ohne Migration stört die fortgesetzten Threads, die noch auf alte Namen verweisen.
Ignorieren Sie den Lärm aus Marketingaktionen des Marktplatzes; der technische Wert liegt im überwachten Ablauf und in HITL. Halten Sie die Tutorials auf diese Grundkonzepte fokussiert.
Ordnen Sie jedem Typ von Produktionsvorkommnis eine Graphenfunktion zu: Zeitüberschreitungen → Wiederholungs-Knoten, fehlerhaftes JSON der Tool-Software → Validierungs-Knoten, Eingriff des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anweisungen zu isolieren, ohne bei Prüzwecken eine einzige Eltern-Thread-ID zu verlieren.
Vermeiden Sie es, die gesamte Geschäftsrichtlinie in einen einzigen „Gott-Knoten“ zu packen; teilen Sie sie auf, damit Fehler zugeordnet werden können.
Ordnen Sie jedem Typ von Produktionsvorkommnis eine Graphenfunktion zu: Zeitüberschreitungen → Wiederholungs-Knoten, fehlerhaftes JSON der Tool-Software → Validierungs-Knoten, Eingriff des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anweisungen zu isolieren, ohne bei Prüzwecken eine einzige Eltern-Thread-ID zu verlieren.
Vermeiden Sie es, die gesamte Geschäftsrichtlinie in einen einzigen „God-Node“ zu packen; teilen Sie sie auf, damit Fehler zugeordnet werden können.
Ordnen Sie jedem Typ von Produktionsvorkommnis eine Graphen-Eigenschaft zu: Zeitüberschreitungen → Node für Wiederholungsversuche, fehlerhaftes JSON der Tool-Software → Validierungsnode, Eingriffe des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anfragen zu isolieren, ohne dabei eine einzige Eltern-Thread-ID für die Prüfung zu verlieren.
Vermeiden Sie es, die gesamte Geschäftsrichtlinie in einen einzigen „God-Node“ zu packen; teilen Sie sie auf, damit Fehler zugeordnet werden können.
Ordnen Sie jedem Typ von Produktionsvorkommnis eine Graphen-Eigenschaft zu: Zeitüberschreitungen → Node für Wiederholungsversuche, fehlerhaftes JSON der Tool-Software → Validierungsnode, Eingriffe des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anfragen zu isolieren, ohne dabei eine einzige Eltern-Thread-ID für die Prüfung zu verlieren.
Vermeiden Sie es, die gesamte Geschäftsrichtlinie in einen einzigen „God-Node“ zu packen; teilen Sie sie auf, damit Fehler zugeordnet werden können.
Jeden Typ von Produktionsstörung auf eine Graphen-Eigenschaft zuordnen: Zeitüberschreitungen → Node für Wiederholungsversuche, fehlerhaftes JSON der Tool-Software → Validierungsnode, Eingriffe des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anfragen zu isolieren, ohne dabei eine einzige Eltern-Thread-ID für die Prüfung zu verlieren.
Vermeiden Sie es, die gesamte Geschäftsrichtlinie in einen einzigen „Gott-Node“ zu packen; teilen Sie sie auf, damit Fehler zugeordnet werden können.
Jeden Typ von Produktionsstörung auf eine Graphen-Eigenschaft zuordnen: Zeitüberschreitungen → Node für Wiederholungsversuche, fehlerhaftes JSON der Tool-Software → Validierungsnode, Eingriffe des Operators → Unterbrechung.
Untergraphen helfen dabei, spezialisierte Anfragen zu isolieren, ohne dabei eine einzige Eltern-Thread-ID für die Prüfung zu verlieren.