Chatbot-RAG-v4 / informe.html
NoeMartinezSanchez
Carga de intents actualizado
a59750b
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Informe de Avances | Chatbot Prepa en Línea SEP</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<style>
:root {
--primary-color: #2c3e50;
--secondary-color: #3498db;
--accent-color: #1abc9c;
--success-color: #27ae60;
--warning-color: #f39c12;
--danger-color: #e74c3c;
--light-bg: #ecf0f1;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: var(--primary-color);
min-height: 100vh;
padding: 2rem;
}
.report-container {
max-width: 1200px;
margin: 0 auto;
background: white;
border-radius: 24px;
box-shadow: 0 25px 80px rgba(0, 0, 0, 0.25);
overflow: hidden;
}
.header {
background: linear-gradient(135deg, var(--primary-color) 0%, #34495e 100%);
color: white;
padding: 2.5rem 3rem;
text-align: center;
}
.header h1 {
font-size: 2.4rem;
font-weight: 700;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.header h1 i {
color: var(--accent-color);
}
.header .subtitle {
font-size: 1.1rem;
opacity: 0.9;
margin-bottom: 1rem;
}
.header .meta {
display: flex;
justify-content: center;
gap: 2rem;
font-size: 0.9rem;
opacity: 0.8;
}
.header .meta span {
background: rgba(255,255,255,0.15);
padding: 0.4rem 1rem;
border-radius: 20px;
}
.content {
padding: 2rem 3rem;
}
.section {
margin-bottom: 2.5rem;
padding-bottom: 2rem;
border-bottom: 1px solid #e0e0e0;
}
.section:last-child {
border-bottom: none;
}
.section-title {
font-size: 1.5rem;
font-weight: 600;
color: var(--primary-color);
margin-bottom: 1.2rem;
display: flex;
align-items: center;
gap: 0.8rem;
}
.section-title i {
color: var(--secondary-color);
}
.executive-summary {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
margin-bottom: 1.5rem;
}
.kpi-card {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border-radius: 16px;
padding: 1.5rem;
border-left: 4px solid var(--accent-color);
}
.kpi-card.highlight {
background: linear-gradient(135deg, var(--secondary-color) 0%, #2980b9 100%);
color: white;
border-left-color: var(--accent-color);
}
.kpi-card.highlight .kpi-value {
color: white;
}
.kpi-label {
font-size: 0.85rem;
color: #666;
margin-bottom: 0.5rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.kpi-card.highlight .kpi-label {
color: rgba(255,255,255,0.85);
}
.kpi-value {
font-size: 2rem;
font-weight: 700;
color: var(--primary-color);
}
.kpi-trend {
font-size: 0.8rem;
margin-top: 0.5rem;
display: flex;
align-items: center;
gap: 0.3rem;
}
.kpi-trend.up {
color: var(--success-color);
}
.kpi-trend.down {
color: var(--danger-color);
}
.flow-diagram {
background: #f8f9fa;
border-radius: 16px;
padding: 2rem;
text-align: center;
margin: 1.5rem 0;
}
.flow-diagram h3 {
font-size: 1rem;
margin-bottom: 1.5rem;
color: #555;
}
.flow-container {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 0.5rem;
}
.flow-step {
background: white;
border-radius: 12px;
padding: 1rem 1.5rem;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
min-width: 140px;
text-align: center;
transition: all 0.4s ease;
opacity: 0;
transform: translateX(-30px);
}
.flow-step.active {
opacity: 1;
transform: translateX(0);
}
.flow-step:hover {
transform: translateY(-5px);
}
.flow-step i {
font-size: 1.5rem;
margin-bottom: 0.5rem;
display: block;
}
.flow-step.user i { color: var(--secondary-color); }
.flow-step.retrieval i { color: var(--warning-color); }
.flow-step.llm i { color: var(--accent-color); }
.flow-step.response i { color: var(--success-color); }
.flow-step .label {
font-size: 0.8rem;
font-weight: 600;
color: var(--primary-color);
}
.flow-arrow {
font-size: 1.5rem;
color: #aaa;
margin: 0 0.3rem;
}
.architecture-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
}
.arch-box {
background: #f8f9fa;
border-radius: 12px;
padding: 1.5rem;
}
.arch-box h4 {
font-size: 1rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.arch-box h4 i {
color: var(--secondary-color);
}
.arch-box ul {
list-style: none;
}
.arch-box li {
padding: 0.4rem 0;
font-size: 0.9rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.arch-box li i {
color: var(--accent-color);
font-size: 0.7rem;
}
.metrics-table {
width: 100%;
border-collapse: collapse;
margin-top: 1rem;
}
.metrics-table th,
.metrics-table td {
padding: 1rem;
text-align: left;
border-bottom: 1px solid #e0e0e0;
}
.metrics-table th {
background: #f8f9fa;
font-weight: 600;
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.metrics-table td {
font-size: 0.95rem;
}
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 600;
}
.badge.success {
background: #d4edda;
color: #155724;
}
.badge.warning {
background: #fff3cd;
color: #856404;
}
.progress-container {
margin-top: 1.5rem;
}
.progress-item {
margin-bottom: 1rem;
}
.progress-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
font-size: 0.9rem;
}
.progress-bar {
height: 10px;
background: #e9ecef;
border-radius: 10px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 10px;
transition: width 1s ease;
}
.progress-fill.primary {
background: linear-gradient(90deg, var(--secondary-color), var(--accent-color));
}
.progress-fill.accent {
background: linear-gradient(90deg, var(--accent-color), var(--success-color));
}
.conclusions {
background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
border-radius: 16px;
padding: 1.5rem;
}
.conclusions h3 {
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.conclusions ul {
list-style: none;
}
.conclusions li {
padding: 0.5rem 0;
display: flex;
align-items: center;
gap: 0.8rem;
}
.conclusions li i {
color: var(--success-color);
}
.next-steps {
background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
border-radius: 16px;
padding: 1.5rem;
margin-top: 1.5rem;
}
.next-steps h3 {
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.next-steps ul {
list-style: none;
}
.next-steps li {
padding: 0.5rem 0;
display: flex;
align-items: center;
gap: 0.8rem;
}
.next-steps li i {
color: var(--secondary-color);
}
.footer {
background: #f8f9fa;
padding: 1.5rem 3rem;
text-align: center;
font-size: 0.85rem;
color: #666;
border-top: 1px solid #e0e0e0;
}
.footer .developers {
color: var(--primary-color);
margin: 0.5rem 0;
}
.screenshot-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 1.5rem;
margin-top: 1.5rem;
}
.screenshot-card {
background: #f8f9fa;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.screenshot-card img {
width: 100%;
height: auto;
display: block;
max-height: 350px;
object-fit: contain;
}
.timeline {
position: relative;
padding: 1rem 0;
margin: 1.5rem 0;
}
.timeline::before {
content: '';
position: absolute;
left: 20px;
top: 0;
bottom: 0;
width: 4px;
background: linear-gradient(180deg, var(--secondary-color), var(--accent-color));
border-radius: 4px;
}
.timeline-item {
position: relative;
padding-left: 60px;
margin-bottom: 1.5rem;
}
.timeline-marker {
position: absolute;
left: 10px;
top: 5px;
width: 24px;
height: 24px;
background: white;
border: 4px solid var(--secondary-color);
border-radius: 50%;
z-index: 1;
}
.timeline-item.current .timeline-marker {
background: var(--accent-color);
border-color: var(--accent-color);
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 0 0 0 rgba(26, 188, 156, 0.7); }
70% { box-shadow: 0 0 0 10px rgba(26, 188, 156, 0); }
100% { box-shadow: 0 0 0 0 rgba(26, 188, 156, 0); }
}
.timeline-content {
background: #f8f9fa;
padding: 1rem;
border-radius: 12px;
border-left: 4px solid var(--secondary-color);
}
.timeline-item.current .timeline-content {
background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
border-left-color: var(--accent-color);
}
.timeline-date {
font-size: 0.8rem;
color: #666;
margin-bottom: 0.3rem;
}
.timeline-content h4 {
font-size: 1rem;
margin-bottom: 0.3rem;
color: var(--primary-color);
}
.timeline-content p {
font-size: 0.85rem;
color: #555;
margin: 0;
}
.infra-highlight {
margin-top: 1.5rem;
}
.infra-current {
background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
border-radius: 16px;
padding: 1.5rem;
color: white;
margin-bottom: 1.5rem;
}
.infra-header {
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.infra-header i {
color: var(--accent-color);
}
.infra-hf {
display: flex;
align-items: center;
gap: 0.8rem;
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 1rem;
}
.infra-hf i {
font-size: 2rem;
}
.infra-details {
display: flex;
gap: 2rem;
margin-bottom: 1rem;
flex-wrap: wrap;
}
.infra-item {
display: flex;
align-items: center;
gap: 0.5rem;
background: rgba(255,255,255,0.15);
padding: 0.5rem 1rem;
border-radius: 8px;
}
.infra-item i {
color: var(--accent-color);
}
.infra-screenshot {
width: 100%;
max-width: 400px;
border-radius: 8px;
border: 2px solid rgba(255,255,255,0.3);
margin-top: 1rem;
}
.infra-hf-badge {
background: rgba(255,255,255,0.15);
padding: 1.5rem;
border-radius: 12px;
text-align: center;
}
.infra-hf-badge i {
font-size: 4rem;
margin-bottom: 0.5rem;
}
.infra-hf-badge span {
display: block;
font-size: 1.2rem;
font-weight: 600;
}
.infra-arrow {
text-align: center;
font-size: 2rem;
color: #aaa;
margin: 1rem 0;
}
.migration-options h3 {
font-size: 1.1rem;
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.migration-options h3 i {
color: var(--secondary-color);
}
.cloud-options {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin-bottom: 1rem;
}
.cloud-card {
background: white;
border-radius: 12px;
padding: 1.2rem;
text-align: center;
box-shadow: 0 4px 15px rgba(0,0,0,0.08);
border: 2px solid transparent;
transition: all 0.3s;
}
.cloud-card:hover {
border-color: var(--secondary-color);
transform: translateY(-3px);
}
.cloud-card i {
font-size: 2.5rem;
margin-bottom: 0.5rem;
}
.cloud-card:nth-child(1) i { color: #FF9900; }
.cloud-card:nth-child(2) i { color: #4285F4; }
.cloud-card:nth-child(3) i { color: var(--primary-color); }
.cloud-card span {
display: block;
font-weight: 600;
margin-bottom: 0.3rem;
}
.cloud-card p {
font-size: 0.8rem;
color: #666;
margin: 0;
}
.migration-note {
background: #e3f2fd;
padding: 1rem;
border-radius: 8px;
font-size: 0.9rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.migration-note i {
color: var(--secondary-color);
}
.screenshot-caption {
padding: 1rem;
text-align: center;
font-weight: 600;
color: var(--primary-color);
background: white;
}
@media (max-width: 768px) {
body { padding: 1rem; }
.header, .content, .footer { padding: 1.5rem; }
.header h1 { font-size: 1.8rem; }
.meta { flex-direction: column; gap: 0.5rem; }
.flow-container { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
.screenshot-gallery { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<div class="report-container">
<div class="header">
<h1><i class="fas fa-robot"></i> Chatbot Educativo Prepa en Línea SEP</h1>
<p class="subtitle">Informe de Avances y Estado del Sistema</p>
<div class="meta">
<span><i class="fas fa-calendar"></i> Abril 2026</span>
<span><i class="fas fa-rocket"></i> Evolución del Modelo de IA</span>
</div>
</div>
<div class="content">
<div class="section">
<h2 class="section-title"><i class="fas fa-chart-pie"></i> Resumen</h2>
<div class="executive-summary">
<div class="kpi-card highlight">
<div class="kpi-label">Modelo de IA</div>
<div class="kpi-value">Gemini 2.5</div>
<div class="kpi-trend"><i class="fas fa-bolt"></i> Flash</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Tiempo de Respuesta</div>
<div class="kpi-value">2-4s</div>
<div class="kpi-trend up"><i class="fas fa-stopwatch"></i> Rápido</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Confianza</div>
<div class="kpi-value">98.3%</div>
<div class="kpi-trend up"><i class="fas fa-check-circle"></i> Alta</div>
</div>
<div class="kpi-card">
<div class="kpi-label">Documentos</div>
<div class="kpi-value">7</div>
<div class="kpi-trend up"><i class="fas fa-file-alt"></i> Oficiales</div>
</div>
</div>
<p style="margin-top: 1.5rem; font-size: 1.05rem; line-height: 1.6; color: #444; background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%); padding: 1.2rem; border-radius: 12px; border-left: 4px solid var(--success-color);">
<strong>Evolución final del Chatbot RAG de Prepa en Línea SEP:</strong> Con optimizaciones en documentos, respuestas y velocidad, el sistema alcanza una <strong>tasa de éxito del 100%</strong> con un <strong>tiempo de respuesta de 2 a 4 segundos</strong>, ofreciendo calidad excelente y consistente. <strong>El sistema está listo para evaluación por grupo piloto y potencial despliegue en producción.</strong>
</p>
</div>
<div class="section">
<h2 class="section-title"><i class="fas fa-history"></i> Evolución del Modelo de IA</h2>
<div class="timeline">
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Enero 2026</div>
<h4>BERT</h4>
<p>Modelo base de embeddings para pruebas iniciales</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Febrero 2026</div>
<h4>TinyLlama</h4>
<p>Primer modelo generativo pruebas locally</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Marzo 2026</div>
<h4>Gemma 2B</h4>
<p>Mejora en calidad de respuestas con 2B parámetros</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Marzo 2026</div>
<h4>Phi-3 Mini</h4>
<p>Modelo de Microsoft para comparison</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Abril 2026</div>
<h4>Gemma 4 E4B</h4>
<p>Última versión de Ollama con mejor contexto</p>
</div>
</div>
<div class="timeline-item current">
<div class="timeline-marker"></div>
<div class="timeline-content">
<div class="timeline-date">Abril 2026</div>
<h4>⭐ Gemini 2.5 Flash</h4>
<p><strong>Modelo actual:</strong> API de Google con 1M tokens contexto, multimodal, mejor rendimiento</p>
</div>
</div>
</div>
</div>
<div class="section">
<h2 class="section-title"><i class="fas fa-project-diagram"></i> Arquitectura del Sistema</h2>
<div class="flow-diagram">
<h3>Flujo de Conversación</h3>
<div class="flow-container">
<div class="flow-step user">
<i class="fas fa-user"></i>
<div class="label">Usuario</div>
</div>
<span class="flow-arrow"><i class="fas fa-arrow-right"></i></span>
<div class="flow-step">
<i class="fas fa-comments"></i>
<div class="label">Interfaz Web</div>
</div>
<span class="flow-arrow"><i class="fas fa-arrow-right"></i></span>
<div class="flow-step retrieval">
<i class="fas fa-search"></i>
<div class="label">Búsqueda</div>
</div>
<span class="flow-arrow"><i class="fas fa-arrow-right"></i></span>
<div class="flow-step retrieval">
<i class="fas fa-database"></i>
<div class="label">Base de Conocimientos</div>
</div>
<span class="flow-arrow"><i class="fas fa-arrow-right"></i></span>
<div class="flow-step llm">
<i class="fas fa-brain"></i>
<div class="label">Gemini 2.5</div>
</div>
<span class="flow-arrow"><i class="fas fa-arrow-right"></i></span>
<div class="flow-step response">
<i class="fas fa-reply"></i>
<div class="label">Respuesta</div>
</div>
</div>
</div>
<div class="architecture-grid">
<div class="arch-box">
<h4><i class="fas fa-layer-group"></i> Tecnología de Servicio</h4>
<ul>
<li><i class="fas fa-check"></i> API web de alto rendimiento</li>
<li><i class="fas fa-check"></i> Interfaz accesible desde cualquier dispositivo</li>
<li><i class="fas fa-check"></i> Base de datos vectorial ultrarrápida</li>
<li><i class="fas fa-check"></i> Comprensión de texto en múltiples idiomas</li>
</ul>
</div>
<div class="arch-box">
<h4><i class="fas fa-robot"></i> Motor de IA Generativa</h4>
<ul>
<li><i class="fas fa-check"></i> Gemini 2.5 Flash de Google</li>
<li><i class="fas fa-check"></i> Capacidad multimodal (texto, imágenes)</li>
<li><i class="fas fa-check"></i> Ventana de contexto amplia (1M tokens)</li>
<li><i class="fas fa-check"></i> Respuestas precisas y contextualizadas</li>
</ul>
</div>
<div class="arch-box">
<h4><i class="fas fa-search"></i> Sistema de Búsqueda Inteligente</h4>
<ul>
<li><i class="fas fa-check"></i> Recupera información más relevante</li>
<li><i class="fas fa-check"></i> Expande búsquedas con sinónimos</li>
<li><i class="fas fa-check"></i> Re-ranking automático de resultados</li>
<li><i class="fas fa-check"></i> Filtrado por tipo de contenido</li>
</ul>
</div>
<div class="arch-box">
<h4><i class="fas fa-database"></i> Base de Conocimiento</h4>
<ul>
<li><i class="fas fa-check"></i> Convocatoria oficial</li>
<li><i class="fas fa-check"></i> Guía para aspirantes</li>
<li><i class="fas fa-check"></i> Normativa de control escolar</li>
<li><i class="fas fa-check"></i> Protocolo de convivencia escolar</li>
</ul>
</div>
</div>
</div>
<div class="section">
<h2 class="section-title"><i class="fas fa-tasks"></i> Estado de Implementación</h2>
<table class="metrics-table">
<thead>
<tr>
<th>Módulo</th>
<th>Estado</th>
<th>Detalles</th>
<th>Progress</th>
</tr>
</thead>
<tbody>
<tr>
<td>Conexión con IA de Google</td>
<td><span class="badge success">Completado</span></td>
<td>Puente de comunicación con Gemini operacional</td>
<td>100%</td>
</tr>
<tr>
<td> motor de búsqueda</td>
<td><span class="badge success">Completado</span></td>
<td>Sistema de recuperación de información</td>
<td>100%</td>
</tr>
<tr>
<td>Organización de documentos</td>
<td><span class="badge success">Completado</span></td>
<td>7 documentos dividisos en 108 fragmentos</td>
<td>100%</td>
</tr>
<tr>
<td>Pruebas automáticas</td>
<td><span class="badge success">Completado</span></td>
<td>20 preguntas de evaluación configuradas</td>
<td>100%</td>
</tr>
<tr>
<td>Interfaz de usuario</td>
<td><span class="badge success">Completado</span></td>
<td>Página web usable en cualquier dispositivo</td>
<td>100%</td>
</tr>
<tr>
<td>Diagnóstico del sistema</td>
<td><span class="badge success">Completado</span></td>
<td>Revisión automática al iniciar</td>
<td>100%</td>
</tr>
<tr>
<td>Evaluación de calidad</td>
<td><span class="badge warning">En proceso</span></td>
<td>Ejecutar pruebas definidas</td>
<td>85%</td>
</tr>
</tbody>
</table>
<div class="progress-container">
<div class="progress-item">
<div class="progress-label">
<span>Avance general del proyecto</span>
<strong>95%</strong>
</div>
<div class="progress-bar">
<div class="progress-fill primary" style="width: 95%;"></div>
</div>
</div>
<div class="progress-item">
<div class="progress-label">
<span>Calidad de retrieval</span>
<strong>88%</strong>
</div>
<div class="progress-bar">
<div class="progress-fill accent" style="width: 88%;"></div>
</div>
</div>
<div class="progress-item">
<div class="progress-label">
<span>Fidelidad de respuestas</span>
<strong>85%</strong>
</div>
<div class="progress-bar">
<div class="progress-fill primary" style="width: 85%;"></div>
</div>
</div>
</div>
</div>
<div class="section">
<h2 class="section-title"><i class="fas fa-server"></i> Infraestructura y Despliegue</h2>
<div class="infra-highlight">
<div class="infra-current">
<div class="infra-header">
<i class="fas fa-rocket"></i> Estado Actual
</div>
<div class="infra-content">
<div class="infra-hf-badge">
<i class="fab fa-hugging-face"></i>
<span>Hugging Face Spaces</span>
</div>
<div class="infra-details">
<div class="infra-item">
<i class="fas fa-microchip"></i>
<span>8 vCPU</span>
</div>
<div class="infra-item">
<i class="fas fa-memory"></i>
<span>32 GB RAM</span>
</div>
<div class="infra-item">
<i class="fas fa-dollar-sign"></i>
<span>$0.03/hora</span>
</div>
</div>
</div>
</div>
<div class="infra-arrow">
<i class="fas fa-arrow-down"></i>
</div>
<div class="migration-options">
<h3><i class="fas fa-cloud"></i> Opciones de Migración Futura</h3>
<div class="cloud-options">
<div class="cloud-card">
<i class="fab fa-aws"></i>
<span>AWS EC2</span>
<p>Escalabilidad horizontal, múltiples regiones</p>
</div>
<div class="cloud-card">
<i class="fab fa-google"></i>
<span>Google Cloud</span>
<p>Integración nativa con Gemini API</p>
</div>
<div class="cloud-card">
<i class="fas fa-server"></i>
<span>Servidor Dedicado</span>
<p>Control total, menor costo mensual</p>
</div>
</div>
<p class="migration-note"><i class="fas fa-info-circle"></i> El sistema está preparado para migrarse a cualquier plataforma de nube sin cambios en el código.</p>
</div>
</div>
</div>
<div class="section">
<h2 class="section-title"><i class="fas fa-lightbulb"></i> Logros Principales</h2>
<div class="conclusions">
<h3><i class="fas fa-check-circle"></i> Objetivos Alcanzados</h3>
<ul>
<li><i class="fas fa-check"></i> Migración exitosa a Gemini 2.5 Flash via Google AI API</li>
<li><i class="fas fa-check"></i> Sistema de búsqueda inteligente que recupera información relevante</li>
<li><i class="fas fa-check"></i> Creación de chunks semánticamente ricos para mayor precisión en respuestas</li>
<li><i class="fas fa-check"></i> Chatbot que responde de forma concisa, sin alucinaciones, en promedio 2-4 segundos</li>
<li><i class="fas fa-check"></i> Interfaz web con menú jerárquico funcional</li>
<li><i class="fas fa-check"></i> Dashboard de monitoreo en tiempo real (58 interacciones, 98.3% confianza, 84.5% tasa RAG)</li>
</ul>
</div>
<div class="next-steps">
<h3><i class="fas fa-rocket"></i> Siguientes Pasos</h3>
<ul>
<li><i class="fas fa-angle-right"></i> Ejecución de evaluación automática completa</li>
<li><i class="fas fa-angle-right"></i> Ajuste de parámetros según resultados</li>
<li><i class="fas fa-angle-right"></i> Incorporación de documentación adicional (tickets de mesa de servicio, FAQs, etc.)</li>
<li><i class="fas fa-cloud-upload-alt"></i> <strong>Despliegue en producción:</strong> Migración a servidor en la nube (AWS/Google Cloud) o máquina virtual dedicada</li>
<li><i class="fas fa-globe"></i> <strong>Publicación:</strong> Integración en página web o portal institucional de Prepa en Línea SEP</li>
</ul>
</div>
<div class="conclusions" style="margin-top: 1.5rem;">
<h3><i class="fas fa-chart-line"></i> Monitoreo en Tiempo Real</h3>
<ul>
<li><i class="fas fa-desktop"></i> Dashboard integrado para supervisión de interacciones</li>
<li><i class="fas fa-users"></i> Seguimiento de usuarios y conversaciones</li>
<li><i class="fas fa-bullseye"></i> Métricas de efectividad del sistema</li>
<li><i class="fas fa-history"></i> Historial de conversaciones para análisis</li>
</ul>
</div>
<div class="screenshot-gallery">
<div class="screenshot-card">
<img src="images/interfaz_chatbot.png" alt="Interfaz del Chatbot">
<div class="screenshot-caption">
<i class="fas fa-comments"></i>
<a href="https://huggingface.co/spaces/ecotecds/Chatbot-RAG-v4" target="_blank" style="color: inherit; text-decoration: underline;">Interfaz de Usuario</a>
</div>
</div>
<div class="screenshot-card">
<img src="images/dashboard.png" alt="Dashboard de Métricas">
<div class="screenshot-caption">
<i class="fas fa-chart-line"></i>
<a href="https://ecotecds-chatbot-rag-v4.hf.space/user-dashboard" target="_blank" style="color: inherit; text-decoration: underline;">Panel de Control</a>
</div>
</div>
</div>
</div>
<div class="footer">
<i class="fas fa-graduation-cap"></i> Chatbot Educativo Prepa en Línea SEP<br>
Desarrollado con Gemini 2.5 Flash + RAG<br>
<span class="developers"><i class="fas fa-user"></i> <strong>Erick Delgadillo</strong> & <i class="fas fa-user"></i> <strong>Noé Martínez</strong></span><br>
Abril 2026
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const bars = document.querySelectorAll('.progress-fill');
bars.forEach(bar => {
const width = bar.style.width;
bar.style.width = '0%';
setTimeout(() => {
bar.style.width = width;
}, 300);
});
const flowSteps = document.querySelectorAll('.flow-step');
flowSteps.forEach((step, index) => {
setTimeout(() => {
step.classList.add('active');
}, index * 400);
});
});
</script>
</body>
</html>