- 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.
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.
Log seguro mínimo
{
"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
}Filtro antes del modelo
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)Auditoría de dataset y permisos
Antes de indexar documentos o entrenar con datos internos, crea un inventario. La pregunta no es solo “¿tenemos estos datos?”, sino “¿podemos usarlos para esta finalidad?”.
data_inventory:
dataset: "tickets_soporte_2026"
contiene_pii: true
base_uso: "soporte interno"
permitido_para:
- "clasificación"
- "borradores con revisión"
prohibido_para:
- "entrenamiento sin anonimizar"
- "compartir con APIs externas"
retencion_dias: 90
owner: "operaciones"Si has guardado la evidencia de esta lección, continúa con «Supply chain». Si no, repite la comprobación antes de avanzar.