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.