Saltearse al contenido

Capacidades del Agente Curador

Agente Curador: Capacidades

El Agente Curador es el pipeline de ingesta de contenido con AI de ColabEdu. Transforma documentos curriculares (PDFs, paquetes LMS Canvas/Moodle) y recursos educativos abiertos (CK-12, Khan, Procomún, Europeana) en especificaciones pedagógicas estructuradas y listas para la plataforma.


Qué hace el Curador

CapacidadDescripción
Descubrimiento de fuentesIdentifica URLs canónicas de documentos curriculares oficiales y APIs de repositorios OER/LMS.
Descarga de documentosDescarga PDFs y paquetes LMS (.imscc Canvas, .mbz Moodle) al repositorio local de specs.
Análisis y generación con AIExtrae criterios pedagógicos, genera slides/widgets o rúbricas de calidad usando Gemini.
Routing de Gemscurator_router clasifica cada input y delega al Gem especializado (lesson, resource, c2…).
Scaffolding de YAMLEscribe specs InteractiveLesson, ResourceLearning o ExerciseSpec OAS completas.
Ingesta de paquetes LMSDescomprime .imscc/.mbz, sube assets a GCS y genera InteractiveLesson con slides.
Indexación OERIndexa recursos de fuentes abiertas con qualityScore de 3 dimensiones pedagógicas.
Ingesta masivaSincronización de specs vía sync_specs.sh o curator batch.
Seed & BloomDeriva nuevos ejercicios pedagógicos a partir de semillas ingestadas (documentos fuente, rúbricas) usando estrategias Bloom configurables. Las semillas pueden ser privadas; las specs derivadas son públicas.

Pipeline Unificado

Documento (PDF / GCS URI) — o Paquete LMS (.imscc / .mbz) — o Recurso OER (JSON/API)
POST /api/v1/curator/curate
{ source, sourceType, outputType, courseId?, pathwayId?, sandboxMode,
ownerEmail?, shared }
CuratorWorkflow (LangGraph4j)
├─ [fetch_source] → descarga + calcula SHA-256
│ │
│ ¿sourceType == LMS_PACKAGE?
│ ├─ SÍ ─► [unzip_lms] → LmsPackageProcessor.unzipPackage()
│ │ └─► [upload_lms_assets] → GCS + assetUrlMap
│ │ └─► [gather_context]
│ └─ NO ─► [gather_context]
├─ [gather_context] → HierarchyContextResolver → CurricularContext
├─ [propose_content] → Gem elegido por curator_router
│ ├─ ExerciseSpec ← curator_c2 (PDFs de exámenes)
│ ├─ InteractiveLesson ← curator_lesson (paquetes LMS)
│ └─ ResourceLearning ← curator_resource (APIs OER)
├─ [wait_for_review] → headless=true → auto-approve
├─ [register_specs] → IngestionService (visibilidad: PUBLIC | PRIVATE)
PIPELINE SEED & BLOOM (Derivación de contenido)
──────────────────────────────────────────────
curator curate --source rubrica.pdf --visibility private ← ingestar como semilla
→ spec ingestada con visibility=PRIVATE
curator bloom derive --seed ib.spa.textual_analysis_rubric \
--strategy SOURCE_DERIVATION|PROGRESSION|MISCONCEPTION_REMEDIATION
→ specs derivadas generadas con visibility=PUBLIC + provenance.seedRef

Resolución de contexto curricular

El mismo HierarchyContextResolver es compartido con el Exercise Creation Wizard:

Override explícito (--standard / --subject)
└─ courseId → CourseClient (standard, level, subject del curso)
└─ pathwayId → PathwayClient (standard, level del pathway)
└─ referenceCode del manifest (parseo del campo)
└─ prompt genérico (sin contexto)

Gems del Curador

El gem.curator_router clasifica cada input y delega al Gem especializado:

GemOutputActiva cuando
gem.curator_routerSiempre (enruta a los demás)
gem.curator_c0BlockRubricDocumentos normativos curriculares
gem.curator_c1RecipeUnidades didácticas completas
gem.curator_c2ExerciseSpecPDFs de exámenes, FRQ
gem.curator_lessonInteractiveLessonPaquetes LMS (.imscc, .mbz)
gem.curator_resourceResourceLearningAPIs OER (CK-12, Khan, Procomún, Europeana)

Los archivos YAML de los Gems se encuentran en ce-specs/catalog/personas/curators/.


Tipos de Spec Generados

El pipeline de curación de ColabEdu puede generar los siguientes tipos de spec conformes con OAS. Cada uno mapea a un Gem y un modo de pipeline:

Tipos de Spec por Pipeline

Tipo de SpecOAS KindGem / ModoDescripción
ExerciseSpecBLOCK_CONTENTgem.curator_c2 / ClásicoEjercicios, FRQ, análisis de texto con bandas de logro
BlockRubricBLOCK_RUBRICgem.curator_c0 / ClásicoRúbricas normativas desde documentos curriculares
RecipeRECIPEgem.curator_c1 / ClásicoUnidades didácticas completas con andamiaje pedagógico
PathwayTemplatePATHWAY_TEMPLATEgem.curator_c1 / ACARutas de aprendizaje para un estándar o tema curricular
InteractiveLessonINTERACTIVE_LESSONgem.curator_lesson / LMSSlides interactivas desde paquetes LMS (Canvas, Moodle)
ResourceLearningRESOURCE_LEARNINGgem.curator_resource / OERRecursos OER indexados con puntuación de calidad 3D
CurriculumRequirementYAML spec-as-codeCurriculumGapAnalyzerArchivos de requisitos que alimentan el análisis de brechas

ExerciseSpec (C2_EXERCISES)

Spec clásica del Curador: ejercicios, FRQ, análisis de texto con bandas de logro. Almacenada como BLOCK_CONTENT kind: ExerciseSpec.

BlockRubric (BLOCK_RUBRIC, C0)

Generada por gem.curator_c0 desde documentos curriculares normativos (programas oficiales, marcos de competencias). La rúbrica C0 define la estructura de competencias que los recipes C1 y los ejercicios C2 deben mapear.

kind: BLOCK_RUBRIC
referenceCode: es.lomloe.bach.2.lcl.rubric_c0
metadata:
standard: LOMLOE
country: ES
competencies:
- id: comprension_lectora
weight: 0.35
- id: expresion_escrita
weight: 0.30

Recipe / PathwayTemplate (RECIPE, C1)

Generada por gem.curator_c1 desde unidades didácticas completas. Contiene andamiaje pedagógico completo: objetivos, actividades, criterios de evaluación y secuenciación de contenidos. Se usa como plantilla para generar ejercicios C2 dirigidos.

kind: RECIPE
referenceCode: es.lomloe.bach.2.lcl.recipe_comprension_lectora
metadata:
theme: comprension_lectora
specType: RECIPE
provenance:
seedRef: es.lomloe.bach.2.lcl.rubric_c0

InteractiveLesson

Generada desde paquetes LMS (Canvas Commons, Moodle Hub). Contiene slides, widgets interactivos y objetivos de aprendizaje mapeados a competencias curriculares. Ver Referencia InteractiveLesson.

ResourceLearning

Indexa recursos OER con un qualityScore de 3 dimensiones: alignment, pedagogicalRichness, accessibility. Ver Referencia ResourceLearning.

CurriculumRequirement (YAML spec-as-code)

No es una spec OAS — es un archivo de definición de requisitos almacenado en ce-specs/catalog/requirements/. Lo lee el CurriculumGapAnalyzer para determinar qué specs se necesitan por estándar + país.

ce-specs/catalog/requirements/lomloe_es.yaml
standard: LOMLOE
country: ES
themes:
- id: comprension_lectora
name: Comprensión Lectora
specTypes:
C2_EXERCISES: 12
INTERACTIVE_LESSON: 6
- id: expresion_escrita
name: Expresión Escrita
specTypes:
C2_EXERCISES: 10

Estos archivos YAML son la definición curricular como código — codifican los requisitos institucionales del currículo para que el ACA pueda medir y cerrar las brechas de cobertura automáticamente.


Fuentes Soportadas

El KnownSourcesRegistry registra 14 fuentes activas:

IDTipoEstándarÁmbito
madrid, mec, ebau.catExámenes EBAULOMLOE🇪🇸
collegeboard, apcentralExámenes APAP🇺🇸
webGoogle CSE🌐
mec-procomun, mec-recursosOERLOMLOE🇪🇸
khan-academy, ck12OER🌐
europeana-eduOER🇪🇺
canvas-commonsLMS🌐
moodle-hub, moodle-netLMS🌐
Ventana de terminal
# Listar todas las fuentes registradas
docs sources
# Filtrar por tipo (nuevo)
docs sources --scope es
docs sources --source canvas-commons

Modos de Operación

Modo 1 — Headless automático (CI/CD)

Ventana de terminal
curator curate \
--source exam.pdf \
--courseId 142
# → fetch → context → propose → register (auto-approve)
# job.shared = true → visible para todos los CONTENT_CREATOR/TEACHER

Modo 2 — Sandbox + revisión manual

Ventana de terminal
curator curate \
--source canvas_module.imscc \
--source-type LMS_PACKAGE \
--output-type INTERACTIVE_LESSON \
--sandbox \
--output ./draft_specs/
curator validate --spec ./draft_specs/lesson.yaml --ingest

Modo 3 — Batch LMS/OER

Ventana de terminal
# Descubrir → descargar → ingestar
docs discover --source canvas-commons --subject biology --output canvas.yaml
docs download --list canvas.yaml --local-dir ce-specs/sources/lms/canvas/
curator batch --manifest ce-specs/tests/lms_batch_manifest.yaml --parallel 2
curator test --lms --all --threshold 70

Modo 4 — Cola de revisión compartida (pedagógico)

Permite que cualquier pedagogo con rol CONTENT_CREATOR, TEACHER o ADMIN vea y apruebe los jobs lanzados desde el CLI, independientemente de quién los lanzó.

Ventana de terminal
# Sin --user: el job es compartido (visible para todos los pedagogos)
curator curate \
--source exam.pdf \
--referenceCode es.lomloe.bach.2.lcl
# → job.shared = true, job.owner_email = null
# → badge 🟡 "Shared" en el Job Command Center
# Con --user: el job se asigna al pedagogo indicado (solo él lo ve)
curator curate \
--source exam.pdf \
--referenceCode es.lomloe.bach.2.lcl \
--user pedagogo@colabedu.org
# → job.shared = false, job.owner_email = "pedagogo@colabedu.org"
# → solo visible para ese usuario en su panel

Estrategia de visibilidad RBAC

Tipo de usuarioJobs propiosJobs compartidos (CLI)
Usuario estándar✅ Sí❌ No
CONTENT_CREATOR✅ Sí✅ Sí
TEACHER✅ Sí✅ Sí
ADMIN✅ Sí✅ Sí

Arquitectura

ce-svc-cli
├── CuratorCommands.java — curate (--source-type, --output-type, --user)
├── CuratorTestCommands.java — test (--lms), batch
├── DocDiscoveryCommands.java — discover, download, catalog, search, stats
└── LmsPackageProcessor.java — descompresión IMSCC/MBZ + upload GCS
ce-svc-ai-services
├── CuratorController — POST /api/v1/curator/curate + /batch
├── CuratorWorkflow — LangGraph4j (rama condicional LMS)
├── LmsPackageDiscoveryStrategy — Canvas Commons, MoodleNet APIs
├── HierarchyContextResolver — contexto curricular compartido con Wizard
└── IngestionService — BLOCK_CONTENT kind: Lesson | Resource | Exercise
ce-svc-model-api (DDL v4.5)
├── jobs.shared BOOLEAN DEFAULT TRUE — visibilidad en cola compartida
├── jobs.owner_id NULLABLE — permite jobs sin owner
├── jobs.owner_email VARCHAR(255) NULLABLE — email del lanzador CLI
└── idx_jobs_shared PARTIAL INDEX WHERE shared = TRUE
ce-specs/
├── catalog/personas/curators/ — Gems: router, lesson, resource, c2
├── sources/lms/ — Paquetes .imscc / .mbz
├── sources/oer/ — Recursos JSON de CK-12, Khan…
└── tests/lms_curator_test_manifest.yaml

Seed & Bloom — Motor de Derivación de Contenido

El motor Seed & Bloom genera ejercicios pedagógicos originales a partir de materiales fuente ingestados sin exponer el contenido propietario. Los documentos fuente (libros, rúbricas, PDFs de examen) se ingestan como semillas privadas; los ejercicios derivados son specs públicas con trazabilidad de procedencia completa.

Arquitectura

ce-svc-content-engine
├── BloomStrategy (interfaz)
│ ├── SourceDerivationBloom — deriva ejercicios desde una semilla fuente privada/pública
│ ├── ProgressionBloom — genera 4 niveles de dificultad a partir de cualquier semilla
│ ├── MisconceptionRemediationBloom — ejercicios de remediación para misconceptions conocidos
│ └── CurricularPipelineBloom — rúbrica C0 → conjunto de ejercicios C2 (planificado)
└── SeedBloomService — despacha a la estrategia activa
ce-svc-ai-services
├── BloomController — REST: POST /api/v1/bloom/derive
└── EduWorkflowTools — MCP: herramienta bloomContent
ce-svc-cli
└── CuratorCommands — curator bloom derive

Estrategias Bloom

EstrategiaDisparadorSalida
SOURCE_DERIVATIONEl docente aporta un documento fuente (libro, rúbrica)N ejercicios originales derivados de la fuente
PROGRESSIONCualquier ejercicio semillaNiveles SIMPLIFIED / STANDARD / EXTENDED / CHALLENGE
MISCONCEPTION_REMEDIATIONEl evaluador detecta un misconceptionEjercicio de remediación dirigido
CURRICULAR_PIPELINESemilla de rúbrica C0Conjunto completo C2 (planificado)

Modelo de Procedencia

Cada spec derivada incluye un bloque metadata.provenance:

metadata:
referenceCode: ib.spa.derived.textual_analysis_ex_001
visibility: PUBLIC
provenance:
seedRef: ib.spa.textual_analysis_rubric # semilla padre
bloomStrategy: SOURCE_DERIVATION
bloomedAt: "2025-06-11T15:00:00Z"

Puntos de Entrada

Punto de entradaCómo
CLIcurator bloom derive --seed <ref> --strategy SOURCE_DERIVATION
RESTPOST /api/v1/bloom/derive
Herramienta MCPbloomContent (Companion Docente, Wizard de Ejercicios)
EvaluaciónRemediationEventOrchestratorMISCONCEPTION_REMEDIATION