Agente de enseñanza adaptativo en LangGraph: estado del estudiante, enrutamiento, revisión humana
Un diseño para un tutor de LangGraph que monitorea el estado del estudiante, dirige el proceso entre actividades de recuperación y avance, fundamenta las respuestas con RAG y eleva los casos a revisores humanos.
Fuentes: From Chatbot to Learning System: A Scientific Blueprint for a LangGraph Adaptive Teaching Agent
Los modelos de lenguaje pueden explicar casi cualquier tema con gran fluidez, pero la fluidez no mide el aprendizaje. Un estudiante puede leer una descripción impecable de la generación reforzada por recuperación de información, asentir, y aún así no ser capaz de diferenciar la recuperación de datos del ajuste fino, ni de identificar una cita que no esté respaldada por nada. Lo que falta no es la generación de texto, sino el control instructivo: recopilar evidencias de que alguien comprendió, elegir una intervención adecuada y verificar si funcionó.
Este es un boceto de diseño para un agente de enseñanza adaptativo basado en LangGraph, un sistema con estado que registra los objetivos de aprendizaje, las respuestas de los estudiantes, las concepciones erróneas, las pruebas de evaluación y las acciones siguientes. Conecta la ingeniería actual de agentes con ideas educativas más antiguas, como la evaluación formativa y el aprendizaje por dominio. El objetivo no es reemplazar al educador mediante la automatización, sino hacer que el ciclo formativo de diagnóstico, explicación, práctica, evaluación, adaptación y progresión sea explícito, inspeccionable y verificable. Una advertencia: se trata de un diseño técnico y no constituye prueba de que algún agente en particular mejore los resultados. Una implementación real requiere un diseño de estudio adecuado, una revisión de accesibilidad, medidas de protección de la privacidad y una gobernanza por parte del instructor.
Generación de respuestas versus adaptación al estudiante
Un chatbot que responde primero toma una solicitud y devuelve una respuesta. Eso puede ser útil, pero no hay nada que indique de manera fiable si el estudiante comprendió el concepto, si persiste algún error o qué debería hacerse a continuación. Puede parecer pedagógico, pero en realidad funciona como un autocompletado sofisticado.
Un tutor adaptativo funciona en una unidad diferente: el episodio de aprendizaje. Un episodio comienza con un objetivo medible, recopila evidencias en las respuestas del estudiante, las interpreta según una rúbrica, elige una acción didáctica y registra lo que ocurrió, lo que implica que el estado debe persistir en todos esos pasos.
El diseño refleja una idea básica de la evaluación formativa, donde la enseñanza y la evaluación interactúan y las pruebas de comprensión guían la siguiente decisión pedagógica. También recuerda al aprendizaje basado en la maestría, que ofrece tareas correctivas y tiempo adicional antes de que el estudiante pase a material que depende de temas anteriores. Estas ideas son décadas más antiguas que la IA generativa. Lo nuevo es la posibilidad de implementar sus ciclos de retroalimentación en software visible en lugar de ocultarlos en un único prompt extenso.
Por qué un grafo supera a una cadena de prompts
En su núcleo se encuentra un grafo dirigido, G = (V, E). Los nodos representan acciones de enseñanza definidas, las aristas son las transiciones permitidas entre ellos, y las aristas condicionales contienen las decisiones educativas: avanzar una vez que se demuestre suficiente dominio, corregir errores tras un concepto erróneo definido, o pasar al siguiente caso cuando sea incierto o tenga grandes consecuencias.
LangGraph funciona bien porque estructura una aplicación en torno a un estado compartido, nodos que lo leen y actualizan, y transiciones explícitas. Eso se adapta mucho mejor a los flujos de trabajo de aprendizaje que una sola instrucción opaca que actúe como tutor útil, y permite plantear preguntas concretas al sistema. ¿Qué evidencia desencadenó la corrección? ¿Qué versión de la rúbrica se aplicó? ¿Alguna solicitud arriesgada llegó a un revisor humano? ¿El agente entró en bucle indefinidamente? El estado del aprendiz se encuentra en el centro, y los nodos deben actualizarlo intencionadamente, sin tratar las conversaciones anteriores como un desecho de memoria sin estructura.
Un estado mínimo del aprendiz
Mantenga solo lo que requiere el objetivo actual y sus normativas de gestión. El estado no debe convertirse en un dossier vago de datos personales. Seis campos cubren lo esencial:
learning_goal, un objetivo observable para la sesión, como distinguir entre RAG y ajuste fino.learner_answer, la evidencia proporcionada por el estudiante, como una explicación escrita o una crítica de código.misconceptions, errores específicos diagnosticados, como suponer que las citas se verifican automáticamente.rubric_score, una señal de evaluación transparente, por ejemplo 0.65 en una rúbrica basada en criterios.attempts, una medida para evitar repeticiones interminables en silencio, como dos intentos en el mismo objetivo.next_actionhace que la decisión de enrutamiento sea observable (corregir o avanzar), mientras queneeds_human_reviewes una marca de seguridad y incertidumbre, activa en casos ambiguos o sensibles.
El ejemplo a continuación utiliza enrutamiento determinista para que la decisión pedagógica siga siendo comprensible. En entornos de producción, un modelo puede ayudar a redactar comentarios o sugerir posibles conceptos erróneos de los estudiantes, pero los criterios para las transiciones deben seguir siendo verificables de forma independiente.
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"
El umbral no es universal y debe elegirse y validarse según cada objetivo. Lo importante es que la regla esté declarada, versionada y sea verificable. El sistema no califica al estudiante como débil; solo indica que las pruebas aún no han cumplido con un criterio definido.
El grafo instructivo
Aquí se muestra un esqueleto compacto de LangGraph en el que el diagnóstico, la explicación, la práctica, la evaluación, la corrección, el avance y la revisión humana se mantienen como nodos separados. Cada nodo en un sistema en producción dependería de contenido verificado, una rúbrica y un modelo o servicio de recuperación proporcionado desde el exterior, y no de una respuesta codificada de antemano.
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()
Dos características son intencionales. El bucle envía la solución a una nueva oportunidad de práctica, y no simplemente una explicación más extensa. La condición de detención finaliza el proceso automatizado cada vez que algo está fuera de los límites de la política y dirige el caso a un instructor u otro revisor autorizado.
Dónde encaja RAG
En asignaturas con mucho contenido, el nodo de explicación no debería basarse únicamente en el conocimiento interno del modelo. Debería extraer información de un conjunto aprobado y versionado de materiales didácticos, pasar los pasajes relevantes al modelo y exigir citas que el estudiante pueda verificar. Esa es la función adecuada de RAG aquí: anclar la explicación en una base de conocimientos cuidadosamente seleccionada.
Esto no hace que el agente sea correcto por defecto. Todavía se necesitan reglas de selección de fuentes, verificación de citas, medidas de protección contra inyecciones de prompts y pruebas para afirmaciones no respaldadas. Una regla de seguridad útil es que el agente indique que la evidencia es insuficiente cuando la calidad de la recuperación es baja, en lugar de llenar ese vacío con una historia convincente.
La evaluación es lo primero
Tener un grafo no hace que un agente adaptativo sea creíble. Lo que sí lo hace es un comportamiento instructivo y de seguridad medible. Evalúe cuatro niveles: el aprendizaje (¿mejoró la comprensión, evaluado mediante pruebas de conceptos antes y después o tareas de transferencia?), la pedagogía (¿fue la intervención adecuada, evaluada mediante la revisión de expertos de los comentarios y la ruta seguida?), el sistema (¿el grafo obedeció las políticas, evaluado por la precisión de la ruta, la tasa de bucles y la latencia?) y la seguridad (¿falló de manera segura, evaluado mediante pruebas de escalada, privacidad e inyecciones?).
Antes de pulir la interfaz, prepare un conjunto de casos pequeños con explicaciones adecuadas, conceptos erróneos predecibles, respuestas ambiguas, instrucciones contradictorias y casos que requieran revisión humana. La prueba a continuación no determina la efectividad educativa, pero detecta un fallo básico: una ruta que contradice la política establecida.
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
Aquí, la IA agente comienza a parecerse a la ingeniería de software disciplinada. Las afirmaciones, los fixtures, las versiones del código, los registros de seguimiento y los registros de decisiones no son elementos burocráticos adicionales. Transforman una demostración impresionante en un sistema responsable.
La supervisión como característica
La educación no es solo un problema de optimización técnica. Un sistema no debería asignar calificaciones de alto riesgo por sí solo, inferir características sensibles de los estudiantes ni hacer recomendaciones importantes sobre su progreso. Debería separar los comentarios formativos de la evaluación oficial y mostrar abiertamente su incertidumbre.
Incluya la supervisión humana en el grafo como condiciones de transferencia: el evaluador no está seguro, los intentos siguen fallando, la integridad académica podría estar en duda, la accesibilidad representa una barrera, una solicitud afecta la seguridad, o el estudiante necesita claramente más juicio que otro párrafo generado. Escriba esto en la especificación antes de llamar a cualquier modelo. La verdadera pregunta es cuáles decisiones pedagógicas pueden delegarse, cuáles requieren revisión y qué evidencia respalda cada transición, no si un agente puede enseñar. Con este enfoque, los educadores mantienen la autoridad sobre el diseño del aprendizaje, y los ingenieros reciben requisitos que pueden probar.
¿Hacia dónde ir a partir de aquí?
La recompensa proviene de tratar el aprendizaje como un bucle de retroalimentación controlado: partir de un objetivo, inferir un diagnóstico a partir de las evidencias del estudiante, elegir una respuesta definida, verificar el resultado y tomar decisiones de manera responsable. Las afirmaciones sobre transformar la educación deben esperar. Construya un sistema pequeño y transparente alrededor de un único objetivo de aprendizaje, pruebe sus procedimientos, analice cómo afecta la comprensión y perfecciónelo con la participación de instructores y estudiantes. Eso representa un estándar más alto que el de un chatbot que parece útil, y es el estándar que la IA educativa debería cumplir.
Leer más
- Un plan de trabajo para la ingeniería de IA en 2026: de Python a agentes y LLMOps — Un camino de aprendizaje por fases para 2026 en ingeniería de IA, que abarca desde Python y las matemáticas, pasando por el ML clásico y el aprendizaje profundo, hasta RAG, MCP, agentes, evaluaciones y despliegue.
- Cómo funciona la IA moderna: explicación de LLMs, técnicas de prompt, RAG, agentes y MCP — Una explicación en lenguaje sencillo de la arquitectura de IA: cómo los LLMs predicen tokens, cuatro técnicas de prompt, RAG con embeddings, el ciclo de agentes ReAct y qué hace MCP.