Daily Scrum — 12 de febrero de 2026
🎯 Objetivo hoy
Implementar persistencia de perfiles de conocimiento (HU #16).
✅ ¿Qué hice ayer?
- Prompts adaptativos implementados para los 3 niveles.
- Notebook
math_clustering.ipynbcreado con experimento. - Métricas ARI=0.87, NMI=0.82, FPC=0.76 documentadas.
- Visualizaciones t-SNE generadas mostrando clusters claros.
🚀 ¿Qué haré hoy?
- Diseño del Modelo de Datos (HU #16):
- Diseñar schema para perfil de conocimiento.
- Incluir: historial de preguntas, niveles de dificultad, temas consultados.
- Crear modelo Pydantic para validación.
- Persistencia en MongoDB:
- Crear colección
student_profiles. - Implementar CRUD para perfiles de conocimiento.
- Integrar actualización de perfil en cada interacción.
- Crear colección
- Evaluación de Conocimiento:
- Implementar algoritmo de evaluación basado en historial.
- Calcular “nivel de dominio” por tema.
- Almacenar progreso acumulativo.
🚧 Obstáculos encontrados
- Conflicto de módulos: Crear
chatbot/logic/models/como paquete causó crash porquemodels/estaba en.gitignore(para modelos ML) y además Python lo confundía con el archivomodels.pyexistente.- Solución: Reorganizar en paquete con
__init__.pyque re-exporta todos los modelos para mantener retrocompatibilidad.
- Solución: Reorganizar en paquete con
- Pydantic v2 deprecations:
class Configdeprecado, migrado amodel_config = {...}. - Pre-commit hooks: ruff detectó variable no usada en tests, black reformateó archivos.
✅ Criterios de aceptación
- Schema de perfil de conocimiento definido.
- Colección
student_profilescreada. - CRUD funcional para perfiles.
- Perfil actualizado en cada interacción del chat.
- Persistencia completa de conversaciones (requisito adicional).
- Endpoints admin para análisis de perfiles.
- Tests unitarios (14 tests, 100% passing).
📝 Implementación realizada
Commits creados (5 commits)
42d6839- refactor: Reorganizar models en estructura de paquete716126f- feat: Añadir ProfileManager para tracking de conocimiento862dbfe- feat: Integrar profile tracking en /chat endpoint070b513- feat: Backend - pasar user_id, endpoints admin analyticsa288484- test: Añadir 14 tests unitarios para ProfileManager
Modelos Pydantic creados
# chatbot/logic/models/student_profile.py
class Interaction(BaseModel):
timestamp: datetime
query: str
difficulty: str # básico, intermedio, avanzado
topic: str | None
subject: str
class TopicMastery(BaseModel):
level: float # 0.0 - 1.0
interactions: int
last_updated: datetime
class StudentProfile(BaseModel):
user_id: str
created_at: datetime
updated_at: datetime
subjects: dict[str, SubjectData]
difficulty_distribution: dict[str, int]
total_interactions: int
class ConversationTurn(BaseModel):
session_id: str
user_id: str
subject: str
timestamp: datetime
query: str
answer: str # Respuesta completa sin truncar
difficulty: str | None
was_test: bool
ProfileManager - Operaciones principales
# chatbot/logic/profile_manager.py
class ProfileManager:
def get_or_create_profile(user_id: str) -> StudentProfile
def record_interaction(user_id, subject, query, difficulty, topic) # Atomic upsert
def update_topic_mastery(user_id, subject, topic, correct: bool) # +0.1/-0.05
def save_conversation_turn(session_id, query, answer, ...) # Full persistence
def get_conversation_history(session_id, user_id, limit)
Endpoints Admin añadidos
GET /admin/profiles- Lista todos los perfiles (solo profesores)GET /admin/profiles/{user_id}- Perfil específico de estudianteGET /admin/conversations- Historial con filtrosGET /admin/conversations/{session_id}- Conversación completa
Tests ejecutados
chatbot/tests/ - 126 passed ✅
backend/tests/ - 44 passed ✅
tests/ - 4 passed ✅