Strona główna / Artykuły

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.

Wydawca: REACTAPP.TOP7 min czytania1610 słów

Ź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
  • Krawędzie — przechodzenia stałe lub warunkowe
  • Kompiluj — walidacja struktury, dodanie wskaźnika sprawdzania
  • Zawołaj/przepuść strumień — wykonywanie z konfiguracją
  • 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