LangGraph-Architekturüberblick
In einem Satz
LangGraph ist ein zustandsmaschinenbasiertes Agent-Orchestrierungs-Framework mit Channel + Pregel-Schleife als Kern: StateGraph kompiliert auf Bauebene Knoten/Kanten zu einem Pregel-Ausführungsobjekt; zur Laufzeit führt PregelLoop.tick wiederholt «Channel lesen → Tasks dispatchen → Channel schreiben → Checkpoint» aus bis zur Konvergenz, wobei über StreamMux Streaming in mehreren Modi ausgegeben wird, über interrupt/Command Human-in-the-Loop umgesetzt wird, durch die BaseCheckpointSaver-Familie thread-level persistiert wird und @entrypoint/@task eine funktionale äquivalente API bietet.
Schichtung
Pro Schicht ein Satz
- Startup & Konfiguration: RunnableConfig trägt thread_id/store/checkpointer; StateSnapshot ist die unveränderliche Momentaufnahme, die von get_state zurückgegeben wird.
- Graph-Aufbau: StateGraph ist der Benutzereinstieg; add_node/add_edge/add_conditional_edges definiert die Topologie; compile erzeugt CompiledStateGraph (also eine Pregel-Instanz).
- Pregel-Engine: Pregel ist das Kompilat; stream/invoke/astream sind die Eingänge; PregelLoop.tick führt einen Einzelschritt aus, PregelRunner führt Tasks konkurrent aus, _algo übernimmt Task-Vorbereitung/Schreib-Zurück-/Interrupt-Entscheidung.
- Channel: BaseChannel abstrahiert update/consume/checkpoint-Semantik; LastValue ist das Standard-Überschreiben, Topic ist Pub/Sub, Binop ist binäre Operator-Aggregation.
- Checkpoint: BaseCheckpointSaver-Schnittstelle put/get/list; drei Implementierungen InMemory/Sqlite/Postgres; synchron und asynchron unterstützt.
- Streaming: StreamMux macht Multi-Modus mux/demux; jeder Transformer (values/updates/messages/debug/lifecycle/subgraph/checkpoints/tasks) erzeugt eine andere Sicht.
- Functional API: @entrypoint wickelt eine Funktion in ein Pregel-Ausführungsobjekt, @task deklariert nebenläufige Teilaufgaben.
- Interrupt & Untergraph: interrupt() löst einen Human-in-the-Loop-Interrupt aus, Command(resume/goto/update) treibt Wiederaufnahme und Sprung an, Send realisiert Fan-out.
Schichtungsmotivation
LangGraph entkoppelt «wie der Graph definiert wird» (Graph-Aufbau), «wie ausgeführt wird» (Pregel), «wie der Zustand aktualisiert wird» (Channel), «wie persistiert wird» (Checkpoint), «wie betrachtet wird» (Stream), «wie funktional äquivalent gemacht wird» (func), «wie mit dem Menschen gespielt wird» (interrupt) und «wie orchestriert wird» (subgraph) vollständig. So beeinflusst der Wechsel des Checkpointer-Backends nicht die Ausführungslogik, der Wechsel des Stream-Modus nicht die Graphdefinition, das Hinzufügen von Interrupts nicht die Channel. Pregel ist der einzige Knotenpunkt; alle Ausführungspfade laufen letztlich über PregelLoop.tick.
Häufige Missverständnisse
- «LangGraph ist einfach die Graph-Kapselung von LangChain» — nein. Es hat eine eigenständige Pregel-Ausführungs-Engine, hängt nicht von LangChains chain/agent-Abstraktion ab und kann eigenständig verwendet werden.
- «Channel ist einfach der Zustand» — Channel ist die Semantikschicht für Zustandsupdates; verschiedene Channel-Typen (LastValue/Topic/Binop) bestimmen, wie der Zustand zusammengeführt wird; das ist, was es über eine gewöhnliche Zustandsmaschine hinaus hebt.
- «@entrypoint ist Syntaxzucker für StateGraph» — funktional äquivalent, aber unterschiedlich implementiert; die func-API geht über den FunctionalAPI-Pfad, wird letztlich ebenfalls zu Pregel kompiliert, aber Nebenläufigkeits- und Join-Semantik sind näher an normalen Funktionen.
Empfohlene Lesereihenfolge
Zuerst Startup & Konfiguration, dann StateGraph und die Pregel-Engine, danach in der Reihenfolge PregelLoop tick → Channel → Checkpoint → Streaming → Functional API → Interrupt & Wiederaufnahme → Untergraph-Orchestrierung weiterlesen.
Siehe offizielle Dokumentation: LangGraph-Dokumentation · GitHub.