Privacidad, logs y datos sensibles

La privacidad se rompe por sitios muy normales: prompts guardados, logs demasiado completos, capturas, vectores con datos personales, emails reenviados o herramientas con permisos amplios.

Objetivos de aprendizaje
  • Reducir datos antes de enviarlos al modelo.
  • Separar logs útiles de logs peligrosos.
  • Diseñar retención, anonimización y revisión para apps educativas o de pyme.
En cristiano: minimización. Enviar solo los datos necesarios para la tarea. Si el modelo no necesita DNI, teléfono o contrato completo, no se lo des.

Qué no debe ir a logs sin pensar

  • Prompts completos con datos personales.
  • Respuestas con contratos, facturas o historiales.
  • Tokens, claves API, cookies o cabeceras.
  • Documentos recuperados completos.
  • Audio original de usuarios si no hay necesidad clara.
Idea clave. Un log bueno ayuda a depurar sin convertirse en una copia secreta de todos los datos privados.

Log seguro mínimo

Terminal
{
  "request_id": "req_20260703_001",
  "user_role": "soporte",
  "tenant_id_hash": "6f2a...",
  "route": "/api/chat",
  "model": "qwen3:8b",
  "risk_flags": ["pii_detected", "rag_used"],
  "retrieved_document_ids": ["doc_123", "doc_456"],
  "answer_length": 842,
  "refused": false,
  "latency_ms": 1840
}
Cuidado. Hash no siempre significa anonimización real. Si puedes volver a identificar a alguien combinando datos, sigue siendo información sensible.

Filtro antes del modelo

Terminal
def redact(text):
    text = text.replace("API_KEY=", "API_KEY=[REDACTED]")
    # En producción usa detectores más serios para emails, teléfonos, DNI y secretos.
    return text

safe_prompt = redact(user_prompt)
response = model.generate(safe_prompt)
Comprueba que funciona. Busca en tus logs locales tres tipos de dato: email, token y contrato. Si aparecen sin necesidad, tienes una tarea de privacidad.
Guardar y reabrir el proyecto.
Privacidad en IA significa diseñar qué no entra, qué no se guarda y quién puede ver cada traza.