// ============ AcademIA8 · Consola — Conocimiento del agente (RAG, arq_07 §4) ============ // v1: visualización real, solo lectura. Tres categorías (arq_07 §1): // 1. Contenido del curso -> el alumno lo recibe, automático, filtrado por progreso. // 2. Acompañamiento -> no visible, atado a una unidad, se activa al llegar ahí. // 3. Referencia -> no visible, siempre disponible desde el primer día. // Ingesta 100% por script (scripts/ingest_fuentes.py); acá no se agrega/quita nada. // "Reindexar" queda deshabilitado ("próximamente"): no hay endpoint de escritura aún. function RagPanel({ course }){ const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [err, setErr] = useState(null); useEffect(() => { let alive = true; (async () => { setLoading(true); setErr(null); try { const d = await A8Api.getConocimiento(course.id); if (alive) setData(d); } catch (e) { if (alive) setErr(e.message || String(e)); } finally { if (alive) setLoading(false); } })(); return () => { alive = false; }; }, [course.id]); return (
Cómo funciona el conocimiento del agente
Ingesta por script
El material de acompañamiento y referencia se carga con scripts/ingest_fuentes.py. Agregar o quitar fuentes desde acá llega en una versión próxima.
Reindexar
{loading && (

Cargando conocimiento del agente…

)} {!loading && err && (

No se pudo cargar

{err}

)} {!loading && !err && data && ( <>
Contenido del curso automático
{data.contenido.total}
Todo el contenido publicado ya es base del agente
Se usa automáticamente y se desbloquea con el progreso: el agente solo cita lo que el alumno ya recibió.
{data.contenido.incluidos} {data.contenido.incluidos===1?'fragmento indexado':'fragmentos indexados'} {data.contenido.excluidos>0 && ` · ${data.contenido.excluidos} excluido${data.contenido.excluidos===1?'':'s'} por curación`}
Acompañamiento por unidad el alumno no lo ve
{data.acompanamiento.total}
Material que el agente usa para responder mejor una vez que el alumno llega a esa unidad, pero que nunca se le envía.
{data.acompanamiento.total===0 ? (
Sin material de acompañamiento cargado.
) : (
{data.acompanamiento.por_unidad.map(u=>(
{u.unidad_id}
{u.cantidad}
))}
)}
Referencia siempre disponible el alumno no lo ve
{data.referencia.total}
Material disponible desde el primer día, sin importar el progreso del alumno (FAQ, glosario, etc.).
{data.referencia.slugs.length===0 ? (
Sin material de referencia cargado.
) : (
{data.referencia.slugs.map(slug=>(
{slug}
))}
)}
)}
); } Object.assign(window, { RagPanel });