Главная / Статьи

Адаптивный учебный агент в LangGraph: отслеживание состояния учащегося, определение маршрутов обучения, рассмотрение задач человеком.

Дизайн репетитора LangGraph, который отслеживает состояние учащегося, определяет пути между коррекцией знаний и продвижением к более сложным задачам, обосновывает ответы с помощью технологии RAG и передает задачи на рассмотрение человеку.

Издатель: REACTAPP.TOP7 мин чтения1643 слов

Источники: From Chatbot to Learning System: A Scientific Blueprint for a LangGraph Adaptive Teaching Agent

Модели языка могут с большой свободой изложения объяснить практически любую тему, но свобода изложения не является показателем усвоения знаний. Студент может прочитать хорошо составленное описание технологии генерации с использованием дополнительных данных, кивать в знак согласия, но при этом не суметь отличить этот процесс от тонкой настройки модели или распознать цитату, которая не подкреплена никакими доказательствами. Недостает не генерации текста, а управления обучением: сбора доказательств понимания материала, выбора подходящих мер вмешательства и проверки их эффективности.

Это чертеж дизайна адаптивного учебного агента, созданного на основе LangGraph — системы с состоянием, которая отслеживает учебные цели, реакции учащихся, заблуждения, доказательства оценки и следующие действия. Он связывает современные методы разработки агентов с более старыми образовательными концепциями, а именно с формативной оценкой и обучением на основе полного овладения материалом. Цель не в том, чтобы заменить педагога автоматизацией, а в том, чтобы сделать цикл формативной деятельности — диагностику, объяснение, практику, оценку, адаптацию и углубление знаний — явным, проверяемым и поддающимся тестированию. Важно отметить: это технический проект, а не доказательство того, что какой-либо конкретный агент улучшает результаты обучения. Для реального внедрения необходима надлежащая методология исследования, проверка доступности, меры защиты приватности и регулирование со стороны преподавателей.

Генерация ответов против адаптации к учащемуся

Чат-бот, ориентированный на ответ, принимает запрос и возвращает ответ. Это может быть удобно, но нет ничего, что бы надежно указывало ему, понял ли учащийся суть, сохраняется ли ошибка или что следует делать дальше. Это может казаться педагогическим подходом, но на самом деле это просто усовершенствованный автодополнительный функционал.

Адаптивный репетитор работает в другой единице — учебном эпизоде. Эпизод начинается с измеримой цели, собирает данные из ответа учащегося, интерпретирует их с учетом критериев оценки, выбирает метод обучения и фиксирует произошедшее, что означает, что состояние должно сохраняться на протяжении всех этих шагов.

Этот дизайн отражает основную идею формативной оценки, при которой процессы обучения и оценивания взаимодействуют, а доказательства уровня понимания определяют следующий шаг в обучении. Он также напоминает подход обучения через освоение материала, предусматривающий выполнение корректирующих заданий и предоставление дополнительного времени перед тем, как учащийся переходит к материалу, зависящему от ранее изученных тем. Эти идеи существуют уже десятилетиями раньше появления генеративных ИИ. Новым является возможность реализовать их циклы обратной связи в видимом программном обеспечении вместо того, чтобы скрывать их в одном огромном запросе.

Почему граф лучше цепочки запросов

В основе лежит ориентированный граф G = (V, E). Узлы представляют собой определенные действия в процессе обучения, ребра — переходы между ними, а условные ребра содержат образовательные решения: переходить дальше, когда уровень освоения достаточно высок, корректировать знания после выявления определенного заблуждения или переходить к другому случаю, когда ситуация неопределенна или имеет высокую степень риска.

LangGraph эффективен, поскольку он структурирует приложение вокруг общего состояния, узлов, которые его читают и обновляют, а также явных переходов. Это гораздо лучше подходит для рабочих процессов обучения, чем единая неясная инструкция, предназначенная служить полезным наставником, и позволяет задавать системе конкретные вопросы. Какие доказательства привели к корректировке? Какая версия критериев оценки была применена? Достиг ли рискованный запрос человека-рецензента? Зациклился ли агент навсегда? Состояние учащегося находится в центре, и узлы должны целенаправленно его обновлять, а не рассматривать предыдущие разговоры как неструктурированный набор данных.

Минимальное состояние учащегося

Сохраняйте только то, что требуют текущая цель и правила её реализации. Состояние не должно превращаться в нечёткий набор личных данных. Шесть полей покрывают основные аспекты:

  • learning_goal — наблюдаемая цель для конкретного этапа обучения, например, различение RAG и тонкой настройки.
  • learner_answer — доказательства, предоставленные учащимся, например письменное объяснение или анализ кода.
  • misconceptions — конкретные выявленные ошибки, такие как предположение о том, что цитаты автоматически проверяются.
  • rubric_score — прозрачный показатель оценки, например 0,65 по шкале, основанной на критериях.
  • attempts — мера, предотвращающая бесконечное молчаливое повторение, например две попытки решить одну и ту же задачу.
  • next_action позволяет видеть решение о дальнейших действиях (исправление или продвижение), а needs_human_review — флаг безопасности и неопределенности, активный в случаях двусмысленности или чувствительной информации.

В приведённом ниже примере используется детерминистское маршрутизирование, чтобы педагогические решения оставались понятными. В реальных условиях модель может помочь сформулировать обратную связь или выявить возможные заблуждения учащихся, однако критерии переходов должны оставаться независимо проверяемыми.

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"

Порог не является универсальным и должен выбираться и проверяться для каждой конкретной цели. Важно лишь то, чтобы правило было оговорено, имело версию и поддавалось тестированию. Система не называет учащегося слабым; она лишь отмечает, что имеющиеся доказательства ещё не соответствуют определённому критерию.

Инструкционная схема

Здесь представлена компактная структура LangGraph, в которой диагностика, объяснения, практика, оценка, коррекция, продвижение и проверка человеком выделены в отдельные узлы. Каждый узел в производственной системе будет опираться на проверенный контент, шкалу оценки, а также на модель или сервис по поиску информации, передаваемые извне, а не на жёстко заданное ответное сообщение.

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()

Два аспекта реализованы намеренно. Цикл возвращает рекомендации по устранению проблемы в новую возможность для практики, а не просто более длинное объяснение. Условие остановки прерывает автоматизированный процесс в тот момент, когда что-то выходит за рамки установленных правил, и направляет дело инструктору или другому уполномоченному рецензенту.

Место применения RAG

Для предметов с большим объемом контента узел объяснений не должен опираться исключительно на внутренние знания модели. Он должен черпать информацию из утвержденного, версионированного набора учебных материалов, передавать соответствующие фрагменты модели и требовать указания источников, которые может проверить учащийся. Именно это и является правильной функцией RAG здесь: обеспечение обоснованности объяснений с помощью тщательно отобранной базы знаний.

Это не делает агента автоматически корректным. Вам по-прежнему нужны правила выбора источников, проверка цитат, защита от внедрения промптов и тесты на неподтвержденные утверждения. Полезным правилом безопасности является требование к агенту указывать на недостаточность доказательств при низком качестве полученной информации, вместо того чтобы заполнять пробелы уверенными историями.

Оценка на первом месте

Наличие графа не делает адаптивного агента достоверным. Достоверность обеспечивает измеримое поведение в области обучения и безопасности. Необходимо оценить четыре уровня: обучение (улучшилось ли понимание, оценивается по тестам на знание концепций до и после обучения или по задачам на перенос знаний), педагогика (было ли вмешательство соответствующим, оценивается по экспертному анализу обратной связи и способа направления запросов), система (соблюдал ли граф установленные правила, оценивается по точности маршрута, частоте циклов и задержкам) и безопасность (смог ли агент безопасно справиться с ситуацией, оценивается по возможности эскалации, защите приватности и тестам на внедрение вредоносного кода).

Прежде чем оттачивать интерфейс, подготовьте набор небольших тестовых случаев с соответствующими пояснениями, типичными заблуждениями, неоднозначными ответами, противоречивыми инструкциями и случаями, требующими ручной проверки. Приведённый ниже тест не позволяет оценить эффективность обучения, но помогает выявить базовую ошибку — маршрутизацию, противоречащую установленной политике.

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

Здесь агентные ИИ начинают напоминать дисциплинированное программное инжиниринговое проектирование. Утверждения, фикстчеры, версии исходного кода, журналы трассировки и записи решений — это не бюрократические излишества. Они превращают впечатляющую демонстрацию в ответственную систему.

Надзор как функция

Образование — это не просто проблема технической оптимизации. Система не должна самостоятельно ставить важные оценки, выводить конфиденциальные характеристики учащихся или делать решающие рекомендации относительно их дальнейшего развития. Она должна разделять формативную обратную связь и официальную оценку, открыто демонстрируя свою неопределенность.

Включите человеческий надзор в структуру графа в качестве условий передачи задач: оценщик не уверен, попытки продолжают терпеть неудачу, возможен вопрос к академической честности, существует препятствие в виде доступности, запрос касается вопросов безопасности или учащемуся явно требуется больше оценки, чем ещё один сгенерированный абзац. Запишите это в спецификацию до того, как будет вызван любой модель. Настоящий вопрос заключается в том, какие решения по обучению можно делегировать, какие требуют пересмотра и какие доказательства подтверждают каждый переход, а не в том, может ли агент обучать. Благодаря такому подходу педагоги сохраняют контроль над дизайном обучения, а инженеры получают требования, которые можно протестировать.

Куда двигаться дальше

Положительный результат достигается за счёт рассмотрения процесса обучения как управляемого цикла обратной связи: начинают с цели, на основе данных обучающегося делают вывод о ситуации, выбирают соответствующий ответ, проверяют результат и принимают ответственные решения. Утверждения о трансформации образования следует отложить. Необходимо создать небольшую прозрачную систему, ориентированную на одну учебную цель, протестировать её алгоритмы действий, изучить влияние на понимание материала и усовершенствовать её с участием преподавателей и учащихся. Это более высокий стандарт, чем кажущаяся полезность чат-ботов, и именно такого уровня должно достигать образовательное ИИ.