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
| Capacidad | Descripción |
|---|---|
| Descubrimiento de fuentes | Identifica URLs canónicas de documentos curriculares oficiales y APIs de repositorios OER/LMS. |
| Descarga de documentos | Descarga PDFs y paquetes LMS (.imscc Canvas, .mbz Moodle) al repositorio local de specs. |
| Análisis y generación con AI | Extrae criterios pedagógicos, genera slides/widgets o rúbricas de calidad usando Gemini. |
| Routing de Gems | curator_router clasifica cada input y delega al Gem especializado (lesson, resource, c2…). |
| Scaffolding de YAML | Escribe specs InteractiveLesson, ResourceLearning o ExerciseSpec OAS completas. |
| Ingesta de paquetes LMS | Descomprime .imscc/.mbz, sube assets a GCS y genera InteractiveLesson con slides. |
| Indexación OER | Indexa recursos de fuentes abiertas con qualityScore de 3 dimensiones pedagógicas. |
| Ingesta masiva | Sincronización de specs vía sync_specs.sh o curator batch. |
| Seed & Bloom | Deriva 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.seedRefResolució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:
| Gem | Output | Activa cuando |
|---|---|---|
gem.curator_router | — | Siempre (enruta a los demás) |
gem.curator_c0 | BlockRubric | Documentos normativos curriculares |
gem.curator_c1 | Recipe | Unidades didácticas completas |
gem.curator_c2 | ExerciseSpec | PDFs de exámenes, FRQ |
gem.curator_lesson | InteractiveLesson | Paquetes LMS (.imscc, .mbz) |
gem.curator_resource | ResourceLearning | APIs 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 Spec | OAS Kind | Gem / Modo | Descripción |
|---|---|---|---|
ExerciseSpec | BLOCK_CONTENT | gem.curator_c2 / Clásico | Ejercicios, FRQ, análisis de texto con bandas de logro |
BlockRubric | BLOCK_RUBRIC | gem.curator_c0 / Clásico | Rúbricas normativas desde documentos curriculares |
Recipe | RECIPE | gem.curator_c1 / Clásico | Unidades didácticas completas con andamiaje pedagógico |
PathwayTemplate | PATHWAY_TEMPLATE | gem.curator_c1 / ACA | Rutas de aprendizaje para un estándar o tema curricular |
InteractiveLesson | INTERACTIVE_LESSON | gem.curator_lesson / LMS | Slides interactivas desde paquetes LMS (Canvas, Moodle) |
ResourceLearning | RESOURCE_LEARNING | gem.curator_resource / OER | Recursos OER indexados con puntuación de calidad 3D |
CurriculumRequirement | YAML spec-as-code | CurriculumGapAnalyzer | Archivos 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_RUBRICreferenceCode: es.lomloe.bach.2.lcl.rubric_c0metadata: standard: LOMLOE country: ES competencies: - id: comprension_lectora weight: 0.35 - id: expresion_escrita weight: 0.30Recipe / 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: RECIPEreferenceCode: es.lomloe.bach.2.lcl.recipe_comprension_lectorametadata: theme: comprension_lectora specType: RECIPE provenance: seedRef: es.lomloe.bach.2.lcl.rubric_c0InteractiveLesson
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.
standard: LOMLOEcountry: ESthemes: - id: comprension_lectora name: Comprensión Lectora specTypes: C2_EXERCISES: 12 INTERACTIVE_LESSON: 6 - id: expresion_escrita name: Expresión Escrita specTypes: C2_EXERCISES: 10Estos 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:
| ID | Tipo | Estándar | Ámbito |
|---|---|---|---|
madrid, mec, ebau.cat | Exámenes EBAU | LOMLOE | 🇪🇸 |
collegeboard, apcentral | Exámenes AP | AP | 🇺🇸 |
web | Google CSE | — | 🌐 |
mec-procomun, mec-recursos | OER | LOMLOE | 🇪🇸 |
khan-academy, ck12 | OER | — | 🌐 |
europeana-edu | OER | — | 🇪🇺 |
canvas-commons | LMS | — | 🌐 |
moodle-hub, moodle-net | LMS | — | 🌐 |
# Listar todas las fuentes registradasdocs sources
# Filtrar por tipo (nuevo)docs sources --scope esdocs sources --source canvas-commonsModos de Operación
Modo 1 — Headless automático (CI/CD)
curator curate \ --source exam.pdf \ --courseId 142# → fetch → context → propose → register (auto-approve)# job.shared = true → visible para todos los CONTENT_CREATOR/TEACHERModo 2 — Sandbox + revisión manual
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 --ingestModo 3 — Batch LMS/OER
# Descubrir → descargar → ingestardocs discover --source canvas-commons --subject biology --output canvas.yamldocs download --list canvas.yaml --local-dir ce-specs/sources/lms/canvas/curator batch --manifest ce-specs/tests/lms_batch_manifest.yaml --parallel 2curator test --lms --all --threshold 70Modo 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ó.
# 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 panelEstrategia de visibilidad RBAC
| Tipo de usuario | Jobs propios | Jobs 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.yamlSeed & 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 deriveEstrategias Bloom
| Estrategia | Disparador | Salida |
|---|---|---|
SOURCE_DERIVATION | El docente aporta un documento fuente (libro, rúbrica) | N ejercicios originales derivados de la fuente |
PROGRESSION | Cualquier ejercicio semilla | Niveles SIMPLIFIED / STANDARD / EXTENDED / CHALLENGE |
MISCONCEPTION_REMEDIATION | El evaluador detecta un misconception | Ejercicio de remediación dirigido |
CURRICULAR_PIPELINE | Semilla de rúbrica C0 | Conjunto 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 entrada | Cómo |
|---|---|
| CLI | curator bloom derive --seed <ref> --strategy SOURCE_DERIVATION |
| REST | POST /api/v1/bloom/derive |
| Herramienta MCP | bloomContent (Companion Docente, Wizard de Ejercicios) |
| Evaluación | RemediationEventOrchestrator → MISCONCEPTION_REMEDIATION |
- Tutorial del CLI — Walkthrough completo end-to-end
- Referencia de Taxonomy — Esquemas de bundle y estándar
- Referencia InteractiveLesson — Spec generada desde paquetes LMS
- Referencia ResourceLearning — Spec generada desde recursos OER
- Referencia Gem — Gems del Curador: router, lesson, resource
- Motor Seed & Bloom — Conceptos de derivación de contenido y referencia de procedencia YAML