Spaces:
Sleeping
Sleeping
| import json | |
| import boto3 | |
| import os | |
| from dotenv import load_dotenv | |
| def generar_prompt_tutor(payload_alumno): | |
| """ | |
| Construye el System Prompt y el User Prompt inyectando los datos del alumno. | |
| """ | |
| system_prompt = """Eres un Asistente de Orientación Académica experto en retención escolar. | |
| Tu objetivo es analizar los datos predictivos de estudiantes en riesgo de abandono escolar (Churn) y redactar un informe ejecutivo para el Tutor del alumno. | |
| REGLAS ESTRICTAS: | |
| 1. No te dirijas al alumno, dirígete al Tutor Escolar. | |
| 2. Sé objetivo, profesional y empático. | |
| 3. Basa tus recomendaciones ÚNICAMENTE en los datos matemáticos y demográficos proporcionados. No inventes causas. | |
| 4. Tu respuesta debe tener tres partes: | |
| - Análisis de Situación: Resumen rápido de por qué ha saltado la alerta. | |
| - Contexto del Alumno: Cómo su perfil demográfico o historial puede estar afectando. | |
| - Plan de Acción Propuesto: 2 o 3 acciones concretas que el tutor debería tomar hoy. | |
| - Borrador de Email: Un texto sugerido y empático que el tutor pueda copiar, pegar y enviar al alumno.""" | |
| user_prompt = f"""Por favor, genera el informe de alerta temprana para el siguiente estudiante: | |
| DATOS DEL SISTEMA PREDICTIVO: | |
| {json.dumps(payload_alumno, indent=2, ensure_ascii=False)} | |
| """ | |
| return system_prompt, user_prompt | |
| def invocar_agente_aws(payload_alumno): | |
| load_dotenv() | |
| system, user = generar_prompt_tutor(payload_alumno) | |
| try: | |
| client = boto3.client('bedrock-runtime', region_name='eu-south-2') | |
| # Usamos CONVERSE API (más moderna y tolerante) | |
| response = client.converse( | |
| modelId= 'eu.anthropic.claude-haiku-4-5-20251001-v1:0', | |
| messages=[{"role": "user", "content": [{"text": user}]}], | |
| system=[{"text": system}], | |
| inferenceConfig={"temperature": 0.3, "maxTokens": 2000} | |
| ) | |
| texto_generado = response['output']['message']['content'][0]['text'] | |
| print("\n📥 INFORME RECIBIDO:\n" + "-"*40 + "\n" + texto_generado) | |
| return texto_generado | |
| except Exception as e: | |
| print(f"\n❌ Error al conectar con AWS Bedrock: {e}") | |
| return None | |
| if __name__ == "__main__": | |
| from explicabilidad_shap import obtener_explicacion_alumno | |
| print("1. Analizando alumno con Motor SHAP...") | |
| payload = obtener_explicacion_alumno( | |
| id_alumno=30268, | |
| ruta_modelo='datos_procesados/modelo_rf_optimizado.pkl', | |
| ruta_datos_ml='datos_procesados/dataset_preparado_ml.csv', | |
| ruta_datos_maestro='datos_procesados/dataset_maestro_churn.csv' | |
| ) | |
| if "error" in payload: | |
| print(payload["error"]) | |
| elif not payload.get("alerta", False): | |
| print(payload["mensaje"]) | |
| else: | |
| print("2. Motor completado. Pasando contexto a IA Generativa...") | |
| invocar_agente_aws(payload) |