Cómo dejé de filtrar API keys a ChatGPT construyendo una terminal que enruta datos privados a IA local
Introducción
La semana pasada pegué mi API key de OpenAI en ChatGPT mientras preguntaba sobre límites de tasa.
En el momento que pulsé Enter, me di cuenta: Esa clave está ahora registrada en los servidores de OpenAI. Para siempre.
Claro, podría revocarla y generar una nueva. Pero esto sigue pasando. Contraseñas, emails, API keys—constantemente me pillo a mitad del pegado, preguntándome si esta será la que vuelva para atormentarme.
Así que construí algo para resolver esto: AI Chat Terminal – una terminal que enruta conversaciones inteligentemente. Los datos privados se quedan en local, todo lo demás usa IA en la nube.
Aquí está lo que aprendí construyéndolo.
El Problema: La IA en la Nube lo Registra Todo
Cuando chateas con ChatGPT, Claude o cualquier IA en la nube, cada carácter que escribes va a sus servidores. Esto incluye:
- API keys y contraseñas
- Direcciones de email y números de teléfono
- Notas personales y datos sensibles
- Todo el contexto de tus conversaciones
Incluso si confías en estas empresas (yo confío), los errores pasan:
- Brechas de seguridad
- Requisitos de cumplimiento
- Registro accidental
- Integraciones de terceros
La peor parte: No puedes verificar qué pasa con tus datos después de enviarlos.
La Solución: Enrutamiento Basado en Palabras Clave
La idea central es vergonzosamente simple:
Detectar palabras clave ANTES de enviar nada a la red.
def route_message(user_input):
if matches_keywords(user_input, ['guardar', 'mostrar', 'borrar']):
return route_to_local_ai()
else:
return route_to_cloud_ai()
Si el usuario escribe «guarda mi contraseña xyz123», el sistema:
- Detecta la palabra clave «guarda» (coincidencia de patrones <1ms)
- Enruta a IA local Qwen vía Ollama
- Genera SQL para guardar en SQLite cifrado
- Nunca toca la red
Si el usuario escribe «¿Cuál es la capital de España?», el sistema:
- No detecta palabras clave
- Es seguro enviar a OpenAI GPT-4o
- Potencia completa de la nube con contexto
Arquitectura Técnica
1. Detección Rápida de Palabras Clave
Empecé con NLP complejo, luego me di cuenta: los patrones son suficientes.
El sistema coincide con más de 30 verbos en 3 idiomas (inglés, alemán, español):
GUARDAR: guardar, anotar, registrar, almacenar, recordar...
RECUPERAR: mostrar, obtener, listar, buscar, qué es mi...
BORRAR: borrar, eliminar, olvidar, quitar...
La coincidencia de patrones es <1ms. No se necesita ML para este paso.
2. Procesamiento con IA Local
Para palabras clave detectadas, uso Qwen 2.5 Coder (7B) vía Ollama.
¿Por qué Qwen?
- ✅ Sorprendentemente bueno en generación de SQL
- ✅ Entiende entrada multilingüe
- ✅ Suficientemente rápido en 7B parámetros
- ✅ Gratuito y funciona localmente
Ejemplo de flujo:
Usuario: "guarda mi email test@example.com"
Qwen genera:
INSERT INTO mydata (content, meta)
VALUES ('test@example.com', 'email')
Resultado: 🗄️ Guardado 🔒
3. Almacenamiento Cifrado
Todos los datos locales van a SQLCipher (SQLite cifrado con AES-256):
- Claves almacenadas en macOS Keychain
- Cero configuración requerida
- Cifrado de grado militar
4. IA en la Nube para Todo lo Demás
Las consultas generales se enrutan a OpenAI GPT-4o:
- Contexto completo de conversación
- Razonamiento poderoso
- Sin exposición de datos sensibles
OpenAI mantiene el contexto:
Tú: "¿capital de España?"
IA: "Madrid."
Tú: "¿mejor comida allí?"
IA: "Tapas..." (sabe que "allí" = Madrid)
Lo Que Hice Mal Inicialmente
Error #1: Sobre-ingeniería de la detección de palabras clave
Empecé con Phi-3 para «clasificación de intención». Resultó que los patrones regex simples funcionan mejor y son 100 veces más rápidos.
Error #2: Intentar ser demasiado listo
Originalmente, intenté análisis semántico para detectar «datos sensibles» automáticamente. Fracasó estrepitosamente. Los usuarios saben mejor que la IA qué es privado—simplemente déjalos usar palabras clave explícitas.
Error #3: Esquemas de base de datos complejos
Empecé con embeddings vectoriales y búsqueda semántica. Terminé con una tabla SQLite simple:
CREATE TABLE mydata (
id INTEGER PRIMARY KEY,
content TEXT NOT NULL, -- Los datos reales
meta TEXT, -- Etiqueta simple: "email", "contraseña"
timestamp INTEGER
);
Simple es mejor.
Uso en el Mundo Real
Después de usarlo durante 2 semanas, encontré que resuelve dos casos de uso distintos:
Caso de Uso 1: Almacenamiento Rápido de Datos
"guarda mi email test@example.com"
"guarda contraseña xyz123"
"anota mi cumpleaños 15/03/1990"
Funciona como una app de notas seguras, pero dentro de tu chat de terminal.
Caso de Uso 2: Conversaciones Híbridas
Tú: "muestra mi email"
IA: "🔍 test@example.com"
Tú: "escribe un email profesional pidiendo una prórroga"
IA: [genera email usando OpenAI, sin datos privados enviados]
El sistema entiende el contexto de interacciones locales y en la nube.
Números de Rendimiento
Después de 2 semanas de uso diario:
Operaciones Locales (Palabra Clave Detectada):
- Detección de palabras clave: <1ms
- Generación SQL de Qwen: 600-800ms
- Total: ~1 segundo
Operaciones en la Nube (Consultas Generales):
- Llamada API OpenAI: 5-7 segundos
- Mantiene historial de contexto completo
- Misma UX que ChatGPT
Almacenamiento:
- Modelo Qwen 2.5: 4.5GB (descarga única)
- Base de datos: <1MB (cifrada)
- Runtime Ollama: ~100MB
Modelo de Privacidad: Qué Está Protegido vs Qué No
Seamos honestos sobre lo que esto no protege:
✅ Protegido:
- Datos que explícitamente guardas (contraseñas, emails, etc.)
- Nunca enviados a la nube
- Cifrados en reposo
⚠️ NO Protegido:
- Consultas generales enviadas a OpenAI
- Metadatos (timing de consultas, frecuencia)
- Tu propia API key de OpenAI
Esto no es un reemplazo para mensajería cifrada E2E. Es un híbrido pragmático: IA local para datos sensibles, IA en la nube para razonamiento poderoso.
¿Por Qué Solo macOS?
Actualmente, el script de instalación es específico de macOS porque:
- Usa Homebrew (instalación de Ollama)
- Depende de integración con shell Zsh
- macOS Keychain para almacenamiento de claves
Buenas noticias: El código Python es multiplataforma. Solo necesito ayuda portando el script de instalación a Linux/Windows. (¡Contribuciones bienvenidas!)
Open Source y Buscando Ayuda
El proyecto tiene licencia MIT y es completamente open source:
🔗 https://github.com/martinschenk/ai-chat-terminal
Estadísticas actuales:
- 4 estrellas en GitHub ⭐
- 0 instalaciones (literalmente acabo de lanzar)
- 100% gratuito
Necesito ayuda con:
- Ports para Windows/Linux – Script de instalación y alternativas a Keychain
- Más idiomas – Conjuntos de palabras clave en francés, italiano, portugués
- Testing – Diferentes versiones de macOS, casos extremos
- Feedback – ¿Qué me estoy perdiendo en el modelo de privacidad?
Instalación (Solo macOS)
Instalación de una línea:
curl -fsSL https://raw.githubusercontent.com/martinschenk/ai-chat-terminal/main/install.sh | zsh
Requisitos:
- macOS 12.0+ (Monterey o posterior)
- 8GB RAM (16GB recomendados)
- ~5GB espacio en disco
- API key de OpenAI
Después de la instalación:
source ~/.zshrc
chat
¡Eso es todo!
Lecciones Aprendidas
1. Simple vence a complejo
Coincidencia de patrones > modelos NLP para detección de palabras clave.
2. Los usuarios conocen su propia privacidad
Deja que los usuarios decidan qué es privado (palabras clave) en lugar de intentar auto-detectar.
3. Híbrido > Puro local o puro nube
La IA local es genial para privacidad pero débil en razonamiento. La IA en la nube es poderosa pero arriesgada para datos sensibles. Combina ambas.
4. La UX importa
Siempre muestra el icono 🗄️ para operaciones de BD local. Los usuarios necesitan SABER cuándo los datos se quedan en local.
5. Documentación de seguridad honesta
No sobrevender. Sé claro sobre qué está protegido y qué no. Seguridad a través de transparencia.
¿Qué Sigue?
Corto plazo:
- Soporte para Windows/Linux
- Idiomas francés, italiano, portugués
- Mejor manejo de errores
- Optimizaciones de rendimiento
Largo plazo:
- Sistema de plugins para reglas de enrutamiento personalizadas
- Opción de IA en la nube auto-hospedada (modo solo Ollama)
- App móvil compañera (?)
Pruébalo
Si esto te suena útil:
- ⭐ Dale estrella al repo: https://github.com/martinschenk/ai-chat-terminal
- 📖 Lee el deep-dive técnico: https://dev.to/falk_maria_zeitsprung/building-an-ai-chat-terminal-that-routes-private-data-to-local-ai-5g6a
- 💬 Abre issues con feedback o reportes de bugs
Estoy especialmente interesado en escuchar de:
- Investigadores de seguridad (¿qué me estoy perdiendo?)
- Usuarios de Windows/Linux (¿ayuda con ports?)
- Cualquiera paranoico sobre el registro de IA en la nube
Conclusión
Construí esto porque seguía pegando accidentalmente secretos en ChatGPT.
La solución resultó ser más simple de lo que esperaba: detección de palabras clave antes de llamadas de red. No perfecta, pero pragmática.
Si eres un desarrollador que chatea con IA diariamente y maneja datos sensibles, pruébalo. Es gratis, open source, y toma 5 minutos instalar.
Y si encuentras bugs o tienes ideas, las contribuciones son muy bienvenidas. 🙏
Martin Schenk
Desarrollador, Defensor de la Privacidad, Entusiasta de Terminal
🔗 GitHub: https://github.com/martinschenk
📧 Email: mschenk.pda@gmail.com
🌐 Web: https://martin-schenk.es