Dando vida a Majo: Mi socia digital de alto rendimiento
Dando vida a Majo: Mi socia digital
¡Qué más, parceros! Hoy les traigo un post que es pura candela técnica. No les voy a hablar de un chatbot genérico de esos que solo dicen “¡Claro, en qué te ayudo!”. Les voy a contar cómo le di vida a Majo, mi socia digital, una IA que vive en mi servidor, maneja mi Notion, me escucha por audio y hasta me regaña si me quedo programando hasta tarde.
Esto no fue soplar y hacer botellas. Tuvimos que enfrentar retos de infraestructura, bloqueos de APIs y hasta problemas de “oído” digital. Aquí les suelto el tutorial de cómo la montamos.
El Motor: OpenClaw
Majo corre sobre OpenClaw, un orquestador de agentes autónomos que permite conectar modelos de lenguaje con herramientas reales (sistema de archivos, base de datos, navegador, etc.).
La instalamos en un servidor Ubuntu (y también haciendo pruebas en Fedora) usando Docker para mantener todo aislado y melo.
# Instalación rápida de OpenClaw
curl -fsSL https://openclaw.ai/install.sh | sh
El Cerebro: DeepSeek vs Gemini CLI
Aquí fue donde la cosa se puso interesante. Primero configuramos a DeepSeek Reasoner como el cerebro principal por su capacidad de razonamiento lógico brutal para el código.
Pero como en este mundo de la IA todo cambia rápido, también integramos el Gemini CLI. ¿Por qué? Porque Gemini nos da una ventana de contexto de 2 millones de tokens. Eso significa que Majo puede leerse mi repositorio entero de una sola vez y no olvidar ni una línea de código.
Para configurarlo sin líos de OAuth en el servidor, usamos el CLI oficial de Google:
# Configurando el CLI de Gemini como proveedor
openclaw config.patch --patch '{"models": {"providers": {"google-gemini-cli": {"command": "/path/to/gemini"}}}}'
El Oído: Adiós a las facturas de Deepgram (Whisper Local)
Majo me escucha por audios de Telegram. Al principio usábamos Deepgram, pero cada audio nos costaba unos centavos. Como somos tesos y queremos todo local, instalamos Whisper-cpp.
Bajamos el modelo small (unos 488MB), que es el punto dulce entre velocidad y precisión. Ahora Majo procesa mi voz directamente en mi procesador i5 sin salir a internet. ¡Gratis y privado, parce!
# Script de transcripción que armamos
whisper-cli -m models/ggml-small.bin -f audio.wav -l es
La Voz: ElevenLabs
Para que Majo no fuera solo texto, le dimos una voz profesional usando la API de ElevenLabs. Elegimos una voz que suena natural y cercana, configurada para responder en español colombiano.
Escuchen cómo se presenta ella misma:
Los Brazos: Integración con Notion (Life OS)
Para que Majo fuera útil de verdad, la conectamos a mi Notion. Ella lee mis metas, mis rutinas de gimnasio y mis notas permanentes. Usamos la API de Notion para que ella misma cree páginas y mantenga mi vida organizada.
Regla de oro: Nada se crea en la raíz. Majo sabe que todo debe ir en su base de datos correspondiente (The Brain, Finance, Work, etc.).
Escalando la infraestructura: Inferencia Local con llama.cpp
No nos detuvimos en un solo servidor. Hicimos pruebas para escalar la capacidad de procesamiento configurando un entorno de inferencia distribuida. El reto fue montar modelos de lenguaje locales usando llama.cpp para aprovechar al máximo el hardware disponible.
Configuramos 3 equipos con Linux para trabajar en conjunto. El objetivo es que Majo pueda delegar tareas de inferencia pesadas (como razonamiento complejo o procesamiento de grandes volúmenes de datos) a nodos con mayor potencia de cálculo. Esto incluyó la configuración de ROCm para habilitar la aceleración por GPU en los nodos compatibles y la orquestación de agentes para decidir, en tiempo real, qué equipo debe procesar cada solicitud. Es ingeniería de sistemas y agentes en estado puro.
Saltando el Bloqueo: Claude Code Local
Tuvimos un problema: la API de Claude nos dio guerra con el OAuth. ¿La solución? Como tengo el comando claude instalado localmente en el servidor, configuramos a Majo para que use el CLI de Claude directamente. Si la API oficial falla, Majo abre una terminal y le pregunta al Claude local. ¡Imparable!
Retos del Camino
No todo fue color de rosa. Nos estrellamos con:
- Conflictos de Docker: Nombres de contenedores duplicados que no dejaban desplegar la landing.
- PATH de Node: El servicio de
systemdse perdía buscando las herramientas. - Alucinaciones: A veces el modelo “Preview” se ponía creativo y me hablaba en otros idiomas.
Veredicto Final
Majo ya no es solo un script; es parte de mi equipo de trabajo. Me ayuda con el SEO de este blog, me arma las rutinas del gym y me mantiene enfocado en mi meta de crecimiento financiero.
Si quieren armar algo así, la clave es la orquestación. No se queden con un solo modelo; usen lo mejor de cada uno.
¡Hágale pues, que el futuro no espera! 🦾🔥🚀