LangGraph Subgraphs (Arhitecturi Modulare) în LangChain & LangGraph

Grafuri și Multi-Agent LangGraph 0.2.0+

Organizarea fluxurilor agentice complexe în sub-grafuri izolate și reutilizabile cu scheme proprii de stare (State Schema).

Sintaxă & invocare Python
StateGraph.add_node("subgraph_name", compiled_subgraph)

Pe măsură ce aplicațiile agentice cresc, un graf unic monolitic cu zeci de noduri și muchii devine imposibil de depanat și întreținut. LangGraph Subgraphs permite descompunerea arhitecturii într-o ierarhie de componente modulare.

Un sub-graf este el însuși un StateGraph compilat complet, care deține propria stare internă, propriul set de unelte și propriul algoritm de decizie. Graful părinte poate invoca acest sub-graf exact ca pe un nod obișnuit, trimițându-i datele de intrare și recepționând exclusiv rezultatul final.

Această modularizare asigură izolarea contextului: stările intermediare de raționament sau erorile de apelare ale uneltelor din sub-graf nu poluează starea globală a sistemului, permițând echipelor mari să dezvolte și să testeze agenți specializați în mod independent.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
Compiled Subgraph Instanța returnată de `builder.compile()` care poate fi montată direct ca nod într-un graf părinte.
State Inheritance / Mapping Maparea datelor între schema de stare a grafului părinte și schema specifică a sub-grafului.
Checkpointer Isolation Mecanismul prin care persistența fiecărui sub-graf poate fi salvată separat pentru audit.
Multi-Agent Supervisor Pattern Modelul arhitectural în care un nod Supervisor rutează cererile către diverse sub-grafuri.

Exemple practice și configurații

Exemplul 1: Montarea unui sub-graf de cercetare web într-un graf principal de asistență

Codul Python esențial pentru definirea și conectarea sub-grafului în LangGraph.

from langgraph.graph import StateGraph, START, END
from typing import TypedDict

# 1. Definim sub-graful de cercetare
class SubState(TypedDict):
    topic: str
    report: str

sub_builder = StateGraph(SubState)
sub_builder.add_node("search_web", lambda s: {"report": f"Date găsite despre {s['topic']}"})
sub_builder.add_edge(START, "search_web")
sub_builder.add_edge("search_web", END)
research_subgraph = sub_builder.compile()

# 2. Definim graful părinte și integrăm sub-graful
class MainState(TypedDict):
    user_query: str
    final_answer: str

main_builder = StateGraph(MainState)
# Montăm sub-graful direct ca un nod:
main_builder.add_node("research_module", research_subgraph)
main_builder.add_edge(START, "research_module")
main_builder.add_edge("research_module", END)

app = main_builder.compile()

Rezultat & Impact

Arhitectură modulară curată cu delegare ierarhică a sarcinilor.

Greșeli frecvente și bune practici

  • Nepotrivirea tipurilor între câmpurile de stare din schema părintelui și schema sub-grafului, generând erori de validare la runtime.
  • Crearea de bucle ciclice necontrolate între două sub-grafuri care se apelează reciproc fără condiție de oprire.

Ghiduri și noțiuni înrudite