Галоўная / Артыкулы

Адаптыўны агент-рэпетытар у LangGraph: стан вучня, маршрутызацыя і праверка чалавекам

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

Выдавец: REACTAPP.TOP7 хв чытання1643 слоў

Крыніцы: From Chatbot to Learning System: A Scientific Blueprint for a LangGraph Adaptive Teaching Agent

Мадэлі мовы можаць з вялікай вольнасцю адказваць на практычна будзь-якія запытанні, але вольнасць не ўсматрэліцца як показнік адкуплення веды. Учнік можа прачытаць адкуплены тэкст пра тэхніку генеравання з дапамогою адкупленых дадзеных, схвалюваць яго, але ўсё раве не магчыма будзе адзначыць разліку межу адкуплення дадзеных і ўточнення параметраў мадэлі, а таксама выявіць цітату, якую нічы не падтрымлівае. Тое, чаго не хапае, — гэта не сама генеравання тэкста, а кераванне навчаннем: збір доказаў таго, што чалавек зрозумеў, выбір прыдатных заходаў і перакананне, чы рэальна яны дапамаглі.

Гэта эскіз дыяграмы прыемлівы гэтаго агента, створанага на базе LangGraph – сістэмы, якая фіксуе цілі навучання, адказы учняў, хыбныя уявленні, доказы ацэнкі і наступныя крокі. Ён спаўнае сучасную інжынерыю агентаў з болей старымі падходамі ў освеце, а самэй – з фарматываючай ацэнкай і навучаннем па прынцыпу абавесці. Мета не ў тым, каб заменіць вучыльніка аўтаматам, а ў тым, каб цыкл фарматываючага навучання – дыягназавання, адказ, практыка, ацэнка, адаптаванне і прыглыбленне – стаў явным, пераконтраўваным і тэставаным. Увага: гэта тэхнічны практычны план, а не доказ таго, што які-небудзь агент павышае рэзультаты навучання. Для рэальнага выкорыстання трэба належны план даследжэння, перагляд доступнасці, захопы прыватнасці і кераванне з боку вучыльніка.

Стварэнне адказаў проты адаптавання да учня

Чат-бот, які спачатку дае адказ, прыймае запыт і вяртае адказ. Гэта можа быць карыткай, але нічога не можа надзеязліва падказаць, чыяжоўцу зрозумела інфармацыя, чы роўныя застаюцца чы не, чы і ўсё, што трэба рабіць далей. Гэта можа здавацца педагагічным, але на самай працэ прадстаўляе сабою простае автодаполненне.

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

Этан дызайн адпраўляецца да базовай ідэі ў фарматывацкай ацэнцы, дзе вучэнне і ацэнка взаімадзейнуюць, а доказы розумення спрыяюць выбору наступных навчальных крокаў. Ён таксама адпраўляецца да падходу абучэння на асаблівай адпаведальнасці, які запрашвае вікананне корэктыўных завадзяў і дадатковы час пры пераходзе да матэрыялу, які залежыць ад паказваных тэм. Гэтыя ідэі існуюць на дзесяткі гадоў раней за генератыўскія AI. Новым ёсць можлівасць рэалізаваць іх ціклы зворачнай свярзкі ў візуабельным програмнаму забезпечэнні, а не хаваць іх у аднам вялікім запіце.

Чаму граф лепшы за ланцуг запітаў

У цэнтры знаходзіцца спрамоўваны граф, 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

Хутчэй агентныя AI-сістэмы пачынаюць нагадваць дысцыплінованую інжынерыю пры напісанні програмнага забава. Асэрцыі, фіксатары, версіі коду, лог-файлы з вылучэнням падзей і запісы рашэнняў — гэта не проста бюракратычныя дадаткі. Яны ператвараюць вражаючы дэманстрацыйны прыклад у сістэму, якая несе адпаведнае адпаведнасць.

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

Адучэнне — гэта не проста тэхнічная задача оптымізацыі. Сістэма не должна сама ставіць высокія оцэнкі, выважваць чутлівыя характэрыстыкі учняў чы выдаваць значныя рэкамендацыі ўжо зараз. Яна должна разлічваць фарматываючыя адзначкі ад офіцыйных атэстацый і адкрываўа паказваць свою нэпэўнасць.

Уключыце людскі нагляд у граф асоціяцый як умовы перадачы: калі адмацэннік не впэўнены, спробы продовжаюць збывацца, можа выступаць пытанне да акадэмічнай чыстасці, доступнасць стае бар’ерам, запітанне стосуецца безпекі, або учнік проста патрабуе большай крытычнае адгукненне, чым іншы сгенераваны абзац. Запісуйце гэта ў спецыфікацыю прытаманнае будзь-яму модэлю. Аслівныя пытанні — гэта якія рашэнні ў навчанні можна перадаць, якія трэбуе перагляду, і якія доказы падтрымліваюць кожную пераход, а не тое, чы можа агент навчаць. З такім падходам педагогі застаюцца з адпаведнаю владой над дызайном навчання, а інжынеры атрымліваюць тыя вакуфнікі, якія можна перапрацаваць.

Куды працаваць далей

Прыціпна выгода выклікаецца тым, што навчанне рассматрываецца як контролюемы цыкл зворотнага звязку: пачынаем з абэктыва, выводзім дыягназы на адказах учня, выбірамаем адпаведную рэакцію, пераканальваемся ў рэзультат і далей працуем адпаведна. Тэзі пра трансформацію адукацыі трэба начакаць. Створыце маленькую прозрачную сістэму навакол адзінаго навчальнага абэктыва, пераканальвайце ўсі ее шляхі, вывучыце, як яна вплывае на розумеўненне, і доўнелівайце яе за саучасцю вучыцеліў і учняў. Гэта вышэйшы стандарт, чым простае дапаможнае чат-бот, і самэ гэта ўсё, што павінна адпавядаць адукацыйныя ШЫ.