LangGraph dla agentów produkcyjnych: punkty kontrolne, HITL oraz grafy wieloagentowe
Dlaczego łańcuchy zatrzymują się i wznowiają działanie w cyklach, oraz w jaki sposób węzły, krawędzie LangGraph oraz narzędzia do zapisywania stanów umożliwiają działanie agentów produkcyjnych przy jednoczesnej możliwości przeglądu przez człowieka.
Źródła: LangGraph Explained: Build Production-Ready AI Agents in 2026
Czym jest LangGraph?
LangGraph to środowisko wykonawcze do tworzenia agentów stanowych, wieloetapowych w postaci wyraźnych grafów: węzły wykonują zadania, krawędzie decydują o dalszym toku działania, a wspólny stan przetrwa między etapami – włącznie po awariach i przerwach dokonanych przez człowieka.
Dwa lata temu wiele „agentów” składało się z pętli while wokół modelu LLM bez możliwości odzyskania stanu. Awarie w trakcie wykonywania zadania oznaczały konieczność rozpoczynania od nowa. Grafy sprawiają, że pamięć, rozgałęzianie i kontynuacja działania są elementami pierwszej klasy.
Dlaczego łańcuchy nie wystarczały
Łańcuchy LCEL doskonale sprawdzają się w liniowych procesach. Mają trudności, gdy potrzebne są cykle, warunkowe kierowanie przepływem danych, trwałe punkty kontrolne lub zatwierdzenie przez człowieka w trakcie działania. To problemy grafowe.
Kluczowe koncepcje: węzły, krawędzie i stan
- Stan — pola o określonym typie, które agent przenosi podczas działania
- Węzły — funkcje, które aktualizują stan
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
Jak faktycznie działa zarządzanie stanem
Aktualizacje łączą się za pomocą reduktorów. Błędnie skonfigurowane reduktory powielają komunikaty lub usuwają pola. Wybór reduktora należy traktować jako część przeglądu schematu.
Pierwszy agent (Python)
Zdefiniuj stan → dodaj węzły → połącz krawędziami → skompiluj → zawołaj z identyfikatorem wątku przy użyciu narzędzia do zapisywania.
Człowiek w łańcuchu
Zatrzymaj proces przed wystąpieniem skutków ubocznych; wznow środowisko z pakietem zatwierdzenia. To jest różnica operacyjna pomiędzy demonstracjami a agentami produkcyjnymi.
Wzory wieloagentowe
Przekazy między nadzorcą/specjalistą, gałęzie równoległe oraz podgrafy są wyraźnie mapowane na nazwane węzły o wspólnym lub podzielonym stanie.
Persystencja i odzyskiwanie
Mechanizmy checkpointingu oparte na bazie danych przetrwają restarty procesów. Narzędzia do zapisu w pamięci są przeznaczone wyłącznie do testów.
Kiedy używać LangGraph
Wykorzystaj go, gdy przepływ sterowania jest nieliniowy, wymaga pauzy lub kontynuacji. Wolisz prostsze łańcuchy do jednorazowych odpowiedzi RAG bez rozgałęzień.
Zakończenie
Agenty produkcyjne potrzebują wyraźnego stanu i krawędzi – nie modlitw w pętli. LangGraph to jedna z trwałych metod na przedstawienie tego w kodzie.
Pomijaj hałas promocji z marketplaców; wartość inżynieryjna leży w checkpointowanym przepływie sterowania i HITL. Niech tutoriale koncentrują się na tych elementach podstawowych.
Zinstrumentuj zdarzenia startu/końca węzłów, aby ślady pokazywały, która gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartość inżynieryjna leży w kontrolowanym przepływie i HITL. Niech tutoriale koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartość inżynieryjna leży w kontrolowanym przepływie i HITL. Niech tutoriale koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartością inżynieryjną są kontrolowany przepływ i HITL z punktami kontrolnymi. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartość inżynieryjna leży w kontrolowanym przepływie i HITL. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok poleceń. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas promocji z rynku; wartość inżynieryjna leży w kontrolowanym przepływie i HITL. Niech poradniki koncentrują się na tych elementach podstawowych.
Zinstrumentuj wydarzenia startu/końca węzłów, aby ślady pokazywały, który gałąź została uruchomiona. Grafy bez telemetrii stają się czarnymi skrzynkami o 2 w nocy.
Definicje grafów wersji obok instrukcji. Przenazwanie węzła bez migracji zakłóca kontynuowane wątki, które nadal odnoszą się do starych nazw.
Pomijaj hałas związany z promocjami na rynku; wartość inżynieryjna leży w kontrolowanym przepływie i HITL. Utrzymuj tutoriale skupione na tych podstawowych elementach.
Przyporządkuj każdy typ incydentu w produkcji do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować specjalistyczne instrukcje, nie tracąc przy tym żadnego identyfikatora wątku nadrzędnego potrzebnego do audytu.
Unikaj umieszczania całej polityki biznesowej w jednym „bóstwowym” węźle; podziel ją, aby błędy można było przypisać konkretnym elementom.
Przyporządkuj każdy typ incydentu w produkcji do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować specjalistyczne instrukcje, nie tracąc przy tym żadnego identyfikatora wątku nadrzędnego potrzebnego do audytu.
Unikaj umieszczania całej polityki biznesowej w jednym „bogu-węźle”; podziel ją tak, aby można było określić przyczynę awarii.
Przyporządkuj każdy typ incydentu w produkcji do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować zapytania skierowane do specjalistów, nie tracąc przy tym żadnego identyfikatora głównego wątku potrzebnego do audytu.
Unikaj umieszczania całej polityki biznesowej w jednym „bogu-węźle”; podziel ją tak, aby można było określić przyczynę awarii.
Przyporządkuj każdy typ incydentu w produkcji do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować zapytania skierowane do specjalistów, nie tracąc przy tym żadnego identyfikatora głównego wątku potrzebnego do audytu.
Unikaj umieszczania całej polityki biznesowej w jednym „bogu-węźle”; podziel ją tak, aby można było określić przyczynę awarii.
Każdy typ incydentu w produkcji należy przypisać do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować zapytania skierowane do specjalistów, nie tracąc przy tym żadnego identyfikatora wątku nadrzędnego potrzebnego do audytu.
Unikaj umieszczania całej polityki biznesowej w jednym „boskim węźle”; podziel ją, aby błędy można było przypisać konkretnym elementom.
Każdy typ incydentu w produkcji należy przypisać do konkretnej cechy grafu: timeouty → węzeł ponawiania prób, błędny JSON narzędzia → węzeł walidacji, przejęcie kontroli przez operatora → przerwanie.
Podgrafy pomagają izolować zapytania skierowane do specjalistów, nie tracąc przy tym żadnego identyfikatora wątku nadrzędnego potrzebnego do audytu.
Literatura pokrewna
- Grafy przestępczości finansowej wielu agentów z LangChain, LangGraph i LangSmith — Ustawianie tras dla nadzorców, równoległe sprawdzania, podgrafy, przerwy, oceny oraz zasady bezpieczeństwa dla procesów pracy na poziomie dochodzeń.
- Rozbieranie wielokrotnych zapytań ludzi na plany podzadań LangGraph — Główni nadzorcy powinni analizować złożone prośby użytkowników na typowane podzadania, aby zespoły obsługi zapytań i wyszukiwania nie przejmowały niewłaściwego tematu z ogólnych wiadomości.
- Trwałość LangGraph: Punkty checkpoint umożliwiające przywracanie stanu i HITL — Dlaczego trwały stan umożliwia przerwy, ponawianie prób oraz debugowanie w czasie rzeczywistym.