LangGraph Primers: węzły, krawędzie i wspólny stan bez zamglenia
Podstawowa mapa LangGraph: węzły jako pracownicy, krawędzie jako ścieżki wykonywania, wspólny stan jako pamięć, plus schematy, modułowe role oraz debugowanie poprzez podróże w czasie.
Źródła: The Heart of the Machine: A Beginner’s Guide to Nodes, Edges, and State
Myslenie w mapach zamiast na prostych liniach
LangGraph jest przeznaczony do aplikacji wieloagentowych z stanem. Codzienne programy często działają w linii – pętle i warunki prowadzą do jednego oczywistego kroku dalszego. Prawdziwi agenci rzadko zachowują się w ten sposób. Graf jest bliższy mapie: miejsca pracy połączone trasami, które wybierasz w czasie działania.
Korzyścią jest kontrola. Framework pozostaje stosunkowo niskopoziomowy, dzięki czemu zachowanie nie jest uwięzione w nieprzejrzystych narzędziach pomocniczych. Trzy elementy budulcowe realizują większość zadań: węzły, krawędzie i stan.
Węzły jako wyspecjalizowani pracownicy
Węzeł to jeden krok obliczeniowy. Pozostaje zintegrowany z resztą procesu dzięki cyklowi odczyt–działanie–aktualizacja: pobiera dane z pamięci wspólnej, wykona jedno zadanie i zapisuje wyniki. Zachowaj węzły modułowe; każdy powinien pełnić jedno jasne zadanie.
Cztery role pojawiają się wielokrotnie. Węzły przetwarzania udoskonalają surowe dane. Węzły walidacji pełnią rolę bram jakościowych. Węzły integracyjne łączą się z API i bazami danych. Węzły decyzyjne określają, dokąd powinien skierować się proces na podstawie obecnych warunków.
Krawędzie jako ścieżki wykonywania
Krawędzie określają, w jaki sposób wykonywanie przechodzi pomiędzy węzłami. Umożliwiają one dynamiczną ścieżkę: po trzech nieudanych próbach wysyła się agenta obsługi do ludzkiej weryfikacji; jeśli potrzebne są dodatkowe dane, powraca się do kroku przetwarzania. Ta sama mapa może przedstawiać obie te możliwości.
Stan jako pamięć współdzielona
Stan to struktura współdzielona, którą każdy węzeł odczytuje i aktualizuje – jest to źródło prawdy dla całego procesu.
Listwa kontrolna projektu zapobiegająca zamieszaniu agentów: opisowe nazwy (user_query, retry_count); proste kształty, które łatwo jest naprawić; wyraźne schematy (na przykład TypedDict) określające, jaką informację może przechowywać pamięć.
Schemat agenta obsługi klienta może wyglądać tak:
from typing import TypedDict
class SupportAgentState(TypedDict):
user_input: str
agent_response: str
issue_type: str
retry_count: int
Pętla while może ponownie zadać pytanie bez faktycznego uwzględniania pięciu minut wcześniejszego kontekstu. Zachowanie stanu umożliwia agentowi przechowywanie tej historii pomimo przerw i odgałęzień.
Zdolności, które pojawiają się po połączeniu tych trzech elementów
Pętle i odgałęzienia pozwalają systemowi ponownie przeanalizować sytuację lub zmienić kierunek działania. Człowiek w pętli sprawdza decyzje przed podjęciem ryzykownych działań. Zachowanie stanu zapewnia spójność długich sesji. „Podróż w czasie” umożliwia powrót do wcześniejszego punktu kontrolnego w celu wyjaśnienia decyzji. Diagramy Mermaid przekształcają tę samą strukturę w wizualną analizę wąskich gardeł i błędnych pętli.
Schemat rozwoju
Zacznij od małego: dwóch węzłów i jednej krawędzi, a następnie rozwijaj strukturę. Chronij modułowość oraz jasne zasady zarządzania stanem, aby system pozostał łatwy w utrzymaniu w miarę rozwoju jego funkcjonalności.
Droga nauki, która przynosi efekty
Gdy po raz pierwszy uczysz się o trójcy, stwórz model, który jest niemal zbyt mały: jeden węzeł przetwarzający, który zamienia tekst na wielkie litery, jeden węzeł walidujący, który odrzuca puste łańcuchy, oraz warunkowy krawędź, który albo kończy proces, albo pyta ponownie. Taki model uczy cyklu czytaj–działaj–aktualizuj, nie przytłaczając jednocześnie zbyt wieloma narzędziami. Dopiero wtedy dodaj węzeł integracyjny, który wywołuje rzeczywisty API, oraz węzeł decyzyjny, który rozgałęzia się na podstawie kodów stanu.
Napisz schemat stanu przed napisaniem instrukcji. Zespoły, które odwracają ten porządek, zazwyczaj odkrywają w trakcie pracy, że połowa ich węzłów nie zgadza się co do nazw kluczy. Schemat na jednej stronie z typami i dozwolonymi wartościami enum zapobiega takim rozbieżnościom. Umieść przy schemacie przykłady poprawnych zrzutów stanu, aby nowicjusze mogli zobaczyć, jak wygląda „dobry” stan po trzech rundach.
Gdy zabawka będzie działać, narysuj ją. Mermaid (lub każdy inny widokownik grafów dostępny w LangGraph) ułatwia zauważenie brakujących krawędzi. Jeśli rysunek i kod się różnią, nie ufaj żadnemu z nich, dopóki się nie zgodzą – wtedy usuń komentarze, które kłamały.
Zastosuj tę dyscyplinę przy tworzeniu pierwszej prawdziwej funkcji: nazywaj węzły czasownikami biznesowymi, utrzymuj krawędzie proste i unikaj dodawania drugich obowiązków do już działającego węzła. Gdy coś wydaje się pomysłowe, podziel to na części. Pomysłowe grafy szybko tracą na wartości; klarowne grafy przetrwają przenoszenie między osobami.
Ponownie przeanalizuj plan po pierwszym wyświetleniu strony w produkcji. Jeśli użytkownicy napotykają trudności, rozwiązaniem jest często jaśniejsze komunikat walidacji w stanie aplikacji, a nie bardziej zaawansowany model. Naucz tego wcześnie, aby ta zasada pozostała praktyką, a nie tylko hasłem.
Literatura pokrewna
- Poza liniowymi skryptami: węzły, krawędzie LangGraph oraz trwały stan — Zastąp kruche pętle pracami grafowymi: specjalistycznymi węzłami, wyraźnymi schematami stanu, rozgałęzieniami, mechanizmami kontroli ludzkiej oraz ścieżkami odporności.
- LangGraph w praktyce: stan, węzły, krawędzie oraz pięć wzorów agentów — Dowiedz się, jak definiować stan LangGraph za pomocą adnotacji i reduktorów, łączyć węzły krawędziami oraz implementować wszystkie pięć podstawowych wzorów prac grafowych w JavaScript.
- Blokowce LangGraph: stan, węzły, krawędzie oraz funkcja invoke — Słownictwo podstawowe do grafów: typowany stan, małe węzły, warunkowe krawędzie, narzędzia oraz wzory przekazywania wiadomości jako stanu.