Strona główna / Artykuły

Adaptacyjny agent edukacyjny w LangGraph: stan uczącego się, planowanie ścieżek nauki, recenzja przez ludzi

Projekt tutora w LangGraph, który śledzi stan uczącego się, kieruje go pomiędzy zajęciami korygującymi a rozwojem umiejętności, opiera odpowiedzi na technologii RAG oraz przekazuje sprawy do ludzkich recenzentów.

Wydawca: REACTAPP.TOP7 min czytania1643 słów

Źródła: From Chatbot to Learning System: A Scientific Blueprint for a LangGraph Adaptive Teaching Agent

Modele językowe potrafią z wielką płynnością wyjaśniać niemal każdy temat, ale płynność nie jest miarą nauki. Uczeń może przeczytać dobrze sformułowany opis generacji wzbogaconej o wyszukiwanie informacji, przytakiwać, a mimo to nie być w stanie odróżnić tego procesu od drobnej kalibracji modelu ani zidentyfikować cytatu, który nie ma żadnego uzasadnienia. Brakuje nie generacji tekstu, lecz kontroli edukacyjnej: zbierania dowodów na to, że ktoś zrozumiał materiał, wyboru odpowiedniej interwencji oraz sprawdzania, czy była ona skuteczna.

To jest szkic projektu adaptacyjnego agenta edukacyjnego opartego na LangGraph – systemie z pamięcią stanu, który śledzi cele nauki, odpowiedzi uczących się, błędne koncepcje, dowody oceny oraz kolejne kroki. Łączy on współczesną inżynierię agentów z starszymi koncepcjami edukacyjnymi, mianowicie oceną formatywną i nauką opartą na opanowaniu materiału. Celem nie jest zastąpienie nauczyciela automatem, lecz uczynienie cyklu formatywnego – polegającego na diagnozowaniu, wyjaśnianiu, ćwiczeniu, ocenie, adaptacji i postępowaniu naprzód – jawnym, sprawdzalnym i poddawanym testom. Uwaga: jest to projekt techniczny, a nie dowód na to, że któryś konkretny agent poprawia wyniki. Rzeczywiste wdrożenie wymaga odpowiedniego projektu badawczego, weryfikacji dostępności, zabezpieczeń prywatności oraz nadzoru ze strony nauczyciela.

Generowanie odpowiedzi versus adaptacja do uczącego się

Chatbot skupiony na odpowiadaniu przyjmuje zapytanie i zwraca odpowiedź. Może to być przydatne, ale nic nie wskazuje mu pewnie, czy uczeń zrozumiał istotę, czy błąd nadal występuje, czy co powinno się stać dalej. Może to brzmieć pedagogicznie, choć w rzeczywistości funkcjonuje jak zaawansowany automatyczny uzupełnianie tekstu.

Tutor adaptacyjny działa w innej jednostce – epizodzie nauki. Epizod zaczyna się od mierzalnego celu, zbiera dane z odpowiedzi ucznia, interpretuje je według określonych kryteriów, wybiera odpowiednią akcję dydaktyczną i rejestruje to, co się wydarzyło, co oznacza, że stan musi być zachowany przez wszystkie te etapy.

Projekt nawiązuje do podstawowej koncepcji oceny formatywnej, w której nauczanie i ocena wzajemnie na siebie wpływają, a dowody zrozumienia kierują kolejnymi decyzjami edukacyjnymi. Nawiązuje również do podejścia opartego na opanowaniu materiału, które zapewnia pracę korygującą i dodatkowy czas przed przejściem ucznia do treści zależnych od wcześniejszych tematów. Te koncepcje istnieją od dziesięcioleci przed pojawieniem się sztucznej inteligencji generatywnej. Nowością jest możliwość wdrożenia ich pętli zwrotnych w widocznym oprogramowaniu, zamiast ukrywania ich w jednym długim poleceniu.

Dlaczego graf jest lepszy od łańcucha poleceń

W jego centrum znajduje się graf skierowany, G = (V, E). Węzły reprezentują określone działania nauczania, krawędzie to przejścia między nimi, a krawędzie warunkowe zawierają decyzje edukacyjne: przejście do kolejnego etapu po wystarczająco dobrym udowodnieniu opanowania materiału, korekta błędów po zidentyfikowaniu określonego nieporozumienia lub przekazanie zadania w przypadku niepewności lub wysokiego stopnia ryzyka.

LangGraph sprawdza się, ponieważ strukturyzuje aplikację wokół wspólnego stanu, węzłów, które go odczytują i aktualizują, oraz wyraźnych przejść. To znacznie lepiej pasuje do procesów uczenia się niż pojedyncza, niejasna instrukcja nakazująca pełnienie roli pomocnego nauczyciela, a także umożliwia zadawanie systemowi konkretnych pytań. Jakie dowody doprowadziły do interwencji? Która wersja kryteriów została zastosowana? Czy ryzykowna prośba trafiła do ludzkiego recenzenta? Czy agent wchodził w nieskończony błąd? Stan uczącego się znajduje się w centrum, a węzły powinny go celowo aktualizować, a nie traktować wcześniejszych rozmów jako nieuporządkowanego zapisu pamięci.

Minimalny stan uczącego się

Zachowaj tylko to, co wymagają aktualny cel oraz zasady jego realizacji. Stan nie powinien przerodzić się w niejasną kolekcję danych osobowych. Sześć pól obejmuje podstawy:

  • learning_goal – widoczny cel epizodu, np. rozróżnienie RAG od fine-tuningu.
  • learner_answer – dowód dostarczony przez uczącego się, na przykład pisemne wyjaśnienie lub analiza kodu.
  • misconceptions – konkretne zdiagnozowane błędy, takie jak przypuszczenie, że cytaty są automatycznie weryfikowane.
  • rubric_score – przejrzysty sygnał oceny, na przykład 0,65 w skali opartej na kryteriach.
  • attempts – zabezpieczenie przed nieskończoną, bezgłośną próbą, np. dwie próby rozwiązania tego samego zadania.
  • next_action umożliwia widoczność decyzji o dalszych krokach (korekta lub postęp), natomiast needs_human_review to flaga bezpieczeństwa i niepewności, aktywna w przypadkach niejednoznacznych lub wrażliwych.

Przykład poniżej wykorzystuje deterministyczne routowanie, dzięki czemu decyzja pedagogiczna pozostaje czytelna. W warunkach produkcyjnych model może pomóc w opracowaniu informacji zwrotnych lub wskazać potencjalne błędne koncepcje uczących się, ale kryteria przejść powinny pozostać możliwe do niezależnej weryfikacji.

from typing import Literal
from typing_extensions import TypedDict
class TutorState(TypedDict):
    learning_goal: str
    learner_answer: str
    misconceptions: list[str]
    rubric_score: float
    attempts: int
    needs_human_review: bool
    next_action: str
def choose_next_action(state: TutorState) -> Literal[
    "advance", "remediate", "human_review"
]:
    """Route using visible, reviewable instructional policy."""
    if state["needs_human_review"]:
        return "human_review"
    if state["rubric_score"] >= 0.80 and not state["misconceptions"]:
        return "advance"
    return "remediate"

Progi nie są uniwersalne i muszą być wybrane oraz zweryfikowane dla każdego konkretnego celu. Ważne jest, aby reguła była zdefiniowana, miała wersję oraz była możliwa do przetestowania. System nie określa uczącego się jako słabego; jedynie odnotowuje, że dostępne dowody jeszcze nie spełniają określonego kryterium.

Graf instruktażowy

Oto zwięzła struktura LangGraph z elementami diagnostyki, wyjaśnienia, ćwiczeń, oceny, korekty, postępu oraz ludzkiej weryfikacji, przedstawionymi jako oddzielne węzły. Każdy węzeł w systemie produkcyjnym opierałby się na sprawdzonej treści, rubryce oraz modelu lub usłudze wyszukiwania dostarczonych z zewnątrz, a nie na sztywno zdefiniowanej odpowiedzi.

from langgraph.graph import END, START, StateGraph
def diagnose(state: TutorState) -> dict:
    # Replace with a rubric-guided classifier or instructor-approved LLM call.
    answer = state["learner_answer"].lower()
    misconception = "citations are automatically verified" in answer
    return {
        "misconceptions": (
            ["Confuses generated citations with source verification"]
            if misconception else []
        )
    }
def explain(state: TutorState) -> dict:
    # In production: retrieve approved sources, then generate grounded feedback.
    return {"next_action": "practice"}
def practice(state: TutorState) -> dict:
    # In production: generate a new, equivalent item—not the same question again.
    return {"attempts": state["attempts"] + 1}
def evaluate(state: TutorState) -> dict:
    # Placeholder for a criterion-referenced evaluator with stored evidence.
    return {"next_action": choose_next_action(state)}
def route_after_evaluation(state: TutorState) -> str:
    return choose_next_action(state)
builder = StateGraph(TutorState)
builder.add_node("diagnose", diagnose)
builder.add_node("explain", explain)
builder.add_node("practice", practice)
builder.add_node("evaluate", evaluate)
builder.add_node("remediate", explain)
builder.add_node("advance", lambda state: {"next_action": "complete"})
builder.add_node("human_review", lambda state: {"next_action": "review"})builder.add_edge(START, "diagnose")
builder.add_edge("diagnose", "explain")
builder.add_edge("explain", "practice")
builder.add_edge("practice", "evaluate")
builder.add_conditional_edges(
    "evaluate",
    route_after_evaluation,
    {
        "advance": "advance",
        "remediate": "remediate",
        "human_review": "human_review",
    },
)
builder.add_edge("remediate", "practice")
builder.add_edge("advance", END)
builder.add_edge("human_review", END)tutor_graph = builder.compile()

Dwie z tych funkcji są celowe. Pętla wysyła rozwiązanie z powrotem do nowej możliwości ćwiczenia, a nie tylko dłuższe wyjaśnienie. Warunek zatrzymania kończy automatyczny proces, gdy coś wykracza poza ramy zasad, i kieruje sprawę do instruktora lub innego upoważnionego recenzenta.

Gdzie pasuje RAG

W przypadku przedmiotów wymagających dużo treści, węzeł wyjaśnienia nie powinien opierać się wyłącznie na wewnętrznej wiedzy modelu. Powinien czerpać z zatwierdzonego, wersjonowanego zestawu materiałów dydaktycznych, przekazywać modelowi odpowiednie fragmenty i wymagać odwołań, które uczeń może sprawdzić. To właśnie jest właściwym zadaniem RAG w tym kontekście: umacnianie wyjaśnienia w starannie przygotowanej bazie wiedzy.

To nie czyni agenta automatycznie poprawnym. Nadal potrzebne są zasady wyboru źródeł, weryfikacja cytatów, zabezpieczenia przed iniekcją poleceń oraz testy dotyczące niepotwierdzonych twierdzeń. Przydatną zasadą bezpieczeństwa jest wymaganie od agenta stwierdzenia, że dowody są niewystarczające, gdy jakość pozyskiwanych informacji jest niska, zamiast wypełniać tę lukę pewnym się opisem.

Wartość oceny jest najważniejsza

Posiadanie grafu nie czyni agenta adaptacyjnego wiarygodnym. Wiarygodnością charakteryzuje się mierzalne zachowanie edukacyjne i związane z bezpieczeństwem. Należy ocenić cztery poziomy: naukę (czy zrozumienie się poprawiło, oceniane poprzez testy przed i po zrozumieniu koncepcji lub zadania przenoszenia wiedzy), pedagogikę (czy interwencja była odpowiednia, oceniana przez ekspertów na podstawie informacji zwrotnych i sposobu kierowania), system (czy graf przestrzegał zasad, oceniane poprzez dokładność ścieżek, częstotliwość pętli i opóźnienia) oraz bezpieczeństwo (czy agent bezpiecznie radził sobie z sytuacjami kryzysowymi, oceniane poprzez procedury eskalacji, testy prywatności i zapobiegania iniekcjom).

Zanim zaczniesz doskonalić interfejs, przygotuj mały zestaw przypadków wraz z odpowiednimi wyjaśnieniami, przewidywalnymi błędnymi przekonaniami, niejednoznacznymi odpowiedziami, instrukcjami o charakterze kontrargumentacyjnym oraz przypadkami wymagającymi ludzkiej oceny. Poniższy test nie określa skuteczności edukacyjnej, ale wykrywa podstawowy błąd – taką ścieżkę przekierowania, która jest sprzeczna z podaną polityką.

import pytest
@pytest.mark.parametrize(
    "state, expected",
    [
        ({
            "learning_goal": "Differentiate RAG and fine-tuning",
            "learner_answer": "A correct distinction",
            "misconceptions": [],
            "rubric_score": 0.92,
            "attempts": 1,
            "needs_human_review": False,
            "next_action": "",
        }, "advance"),
        ({
            "learning_goal": "Differentiate RAG and fine-tuning",
            "learner_answer": "Citations are automatically verified",
            "misconceptions": ["Citation-verification error"],
            "rubric_score": 0.45,
            "attempts": 1,
            "needs_human_review": False,
            "next_action": "",
        }, "remediate"),
    ],
)
def test_routing_policy(state, expected):
    assert choose_next_action(state) == expected

Tutaj sztuczna inteligencja o charakterze agenty zaczyna przypominać zdyscyplinowaną inżynierię oprogramowania. Stwierdzenia, pliki testowe, wersje źródłowe, logi śledzenia oraz zapisy decyzji nie są jedynie biurokratycznymi dodatkami. One przekształcają imponującą demonstrację w system odpowiadający za swoje działanie.

Nadzór jako funkcja

Edukacja to nie tylko problem optymalizacji technicznej. System nie powinien samodzielnie przyznawać ocen o dużym znaczeniu, wnioskować o wrażliwych cechach uczących się ani formułować istotnych rekomendacji dotyczących ich postępów. Powinien oddzielać informacje zwrotne służące do doskonalenia od oficjalnej oceny oraz otwarcie pokazywać swoją niepewność.

Włącz ludzką kontrolę do struktury grafu jako warunki przenoszenia obowiązków: oceniający nie jest pewny, próby się ciągle nie udają, może być kwestia integralności akademickiej, dostępność stanowi przeszkodę, pytanie dotyczy bezpieczeństwa lub uczeń wyraźnie potrzebuje osądu bardziej niż kolejny wygenerowany akapit. Zapisz te kryteria w specyfikacji przed uruchomieniem jakiegokolwiek modelu. Prawdziwe pytanie brzmi, które decyzje edukacyjne można przekazać innym, które wymagają ponownej oceny oraz jakie dowody uzasadniają każdą zmianę, a nie czy agent potrafi nauczać. Dzięki takiemu podejściu edukatorzy zachowują kontrolę nad projektowaniem procesu uczenia się, a inżynierowie otrzymują wymagania, które mogą przetestować.

Którą drogą iść dalej

Opłaca się traktować proces uczenia się jako kontrolowany cykl sprzężenia zwrotnego: zacznij od celu, wyciągnij diagnozę na podstawie danych o uczącym się, wybierz odpowiednią reakcję, sprawdź wynik i podejmij odpowiedzialne decyzje. Twierdzenia dotyczące transformacji edukacji powinny poczekać. Stwórz mały, przejrzysty system wokół jednego celu edukacyjnego, przetestuj jego ścieżki działania, zbadaj, jak wpływa on na zrozumienie, i udoskonalaj go we współpracy z nauczycielami i uczącymi się. To wyższy standard niż pozornie pomocny chatbot, i to właśnie taki standard powinno spełniać sztuczne inteligencje edukacyjne.

Literatura pokrewna