Demo_churn / scripts /lector_lllm.py
Larxmind's picture
Despliegue inicial limpio sin binarios
1ec1a50
Raw
History Blame Contribute Delete
2.9 kB
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)