Qué es un asistente personal de IA
Un asistente personal de IA es un programa que recibe tus mensajes, piensa usando un modelo de lenguaje y ejecuta tareas. Ya conoces ChatGPT en el navegador. La diferencia aquí es que el asistente vive en TU chat (Telegram), responde las 24 horas del día y puede hacer cosas de verdad: consultar el pronóstico del tiempo, guardar una nota, crear un recordatorio. No solo conversa: actúa.
🧠 Analogía: el pasante que vive en el chat
Piensa en un pasante muy dedicado. Le mandas un mensaje por el chat: "averigua cuánto falta para la reunión". Lo lee, entiende, revisa la agenda y te responde. No necesitas explicarle cómo buscar en la agenda: ya lo sabe. Tu asistente de IA es exactamente eso, pero digital y disponible a cualquier hora.
- •Envías: un mensaje en lenguaje natural ("resume este texto por mí")
- •Piensa: el modelo de IA interpreta lo que quieres
- •Actúa: usa una herramienta (una "tool") si la necesitas
- •Responde: envía la respuesta de vuelta al chat
💡 ¿Por qué "Jarvis"?
Jarvis es el asistente de Iron Man en las películas: hablas, entiende y actúa. Tu Jarvis no va a pilotar una armadura, pero te ayudará en el día a día. El concepto es el mismo: un asistente que escucha en lenguaje natural y ejecuta. Descubrirás que crear uno es más sencillo de lo que parece: basta con juntar tres piezas (un chat, un cerebro y algunas herramientas).
La arquitectura básica
Todo asistente sigue el mismo flujo de cuatro etapas: el bot recibe el mensaje, el modelo de IA piensa, las herramientas se ejecutan y la respuesta vuelve. Entender este recorrido hace que todo sea más fácil, porque cada pieza que armes en los próximos temas encaja en este esquema.
👁 Las cuatro etapas, en orden
- 1.Recibe: envías "¿qué hora es en Tokyo?" por Telegram. El bot (tu código) recibe ese texto.
- 2.Piensa: el bot envía tu mensaje al modelo de IA. El modelo entiende la intención.
- 3.Ejecuta: si necesita datos externos, el modelo pide usar una herramienta (ej.: consultar la hora).
- 4.Responde: la respuesta final vuelve por el bot hasta tu chat en Telegram.
💡 Consejo: tres piezas, nada más
En el fondo, todo el asistente cabe en tres piezas: el chat (Telegram, donde ocurre la conversación), el cerebro (el LLM, que piensa) y las herramientas (funciones que ejecutan acciones). Si siempre sabes qué pieza estás modificando, nunca te perderás en el código.
Crear el bot en Telegram
Telegram tiene una forma oficial y gratuita de crear bots: el BotFather. Es un bot que crea bots. Hablas con él, le pones un nombre a tu asistente y recibes un token (una contraseña única que le da a tu código el control del bot). Sin el token, tu código no puede enviar ni recibir mensajes.
Abre BotFather
En Telegram, busca @BotFather (el oficial tiene una insignia azul de verificado). Haz clic en "Iniciar".
Crea el bot
Envía el comando y responde las preguntas: nombre visible y nombre de usuario (debe terminar en «bot»).
/newbot
# BotFather pregunta el nombre:
Mi Jarvis
# Y el username (debe terminar en "bot"):
meu_jarvis_bot
Guarda el token
BotFather responde con el token. Se ve así (cópialo y guárdalo con cuidado):
Use this token to access the HTTP API:
7891234567:AAH4k_exemplo-de-token-NAO-use-o-real
Polling (más sencillo)
Tu código le pregunta a Telegram «¿hay algún mensaje nuevo?» cada cierto tiempo. No necesitas dominio ni HTTPS. Es ideal para empezar y para ejecutarlo en el VPS.
- ✓Se ejecuta en cualquier lugar
- ✓Configuración de red cero
Webhook (más avanzado)
Telegram avisa a tu servidor cada vez que llega un mensaje. Es más eficiente, pero requiere una dirección pública con HTTPS. Déjalo para después.
- ✓Respuesta instantánea
- ✓Menos uso de red
⚠️ Error común
Problema: "Pegué el token en un archivo y lo subí a GitHub. Ahora se filtró."
Solución: El token es una contraseña. Quien lo tenga controla tu bot. Nunca pongas el token directamente en el código ni en un repositorio público. Usa un archivo .env (lo verás en el tema 6) y agrega .env no .gitignore. Si se filtró, contacta con BotFather y usa /revoke para generar un token nuevo.
Conectar el Cerebro: Claude o GPT
Ahora tu bot necesita un cerebro. En vez de programar reglas como «si el mensaje es X, responde Y», envías el mensaje del usuario a un modelo de IA (Claude de Anthropic o GPT de OpenAI) y te devuelve la respuesta. Técnicamente, esto es una llamada a la API: tu código envía una solicitud por Internet y recibe la respuesta.
El bot que solo responde (todavía sin IA)
Empieza de forma sencilla: recibe un mensaje y repítelo. Aquí en Python con la biblioteca python-telegram-bot.
# instalar la biblioteca
$ pip install python-telegram-bot anthropic
import os
from telegram.ext import Application, MessageHandler, filters
async def responder(update, ctx):
texto = update.message.text
await update.message.reply_text("Dijiste: " + texto)
🤖 Ahora con el cerebro de IA
En vez de repetir el texto, envías el mensaje al modelo y devuelves lo que responde. La «API key» es la contraseña que da acceso al modelo (se obtiene en console.anthropic.com o platform.openai.com).
from anthropic import Anthropic
cliente = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
async def responder(update, ctx):
resp = cliente.messages.create(
model="claude-3-5-haiku-latest",
max_tokens=500,
messages=[{"role": "user",
"content": update.message.text}])
texto = resp.content[0].text
await update.message.reply_text(texto)
O prompt y es el contenido que envías; la respuesta viene en resp.content[0].text.
👁 Qué vas a ver en el chat
# Tú en Telegram:
Tú: explica qué es Git en una frase
# El bot (cerebro de IA) responde:
Jarvis: Git es un sistema que guarda el
historial de tu código, permitiéndote
volver en el tiempo y trabajar en equipo.
💡 Consejo: empieza con el modelo barato
Cada llamada a la API cuesta dinero (centavos, pero se acumulan). Mientras pruebas y cometes errores, usa un modelo pequeño y económico (como Haiku o GPT-mini). Cuando el asistente esté bien ajustado, cambias una línea (el nombre del modelo) por uno más potente. Así no gastas de más mientras aprendes.
Skills y comandos
Hasta aquí tu Jarvis solo conversa. Para que ejecutar acciones, creas comandos. En Telegram, los comandos empiezan con una barra: /start, /ajuda, /nota. Cada comando apunta a una función de tu código. Es la forma más sencilla de darle "skills" (habilidades) a tu asistente.
Mapear /comando a una acción
Registras un CommandHandler para cada comando. Cuando el usuario escribe /nota comprar pao, la función recibe el texto y actúa.
from telegram.ext import CommandHandler
async def cmd_start(update, ctx):
await update.message.reply_text("¡Hola! Soy Jarvis.")
async def cmd_nota(update, ctx):
texto = " ".join(ctx.args)
salvar_nota(texto) # tu función
await update.message.reply_text("Nota salva: " + texto)
app.add_handler(CommandHandler("start", cmd_start))
app.add_handler(CommandHandler("nota", cmd_nota))
👁 Qué vas a ver en el chat
Tú: /nota comprar pan y leche
Jarvis: Nota guardada: comprar pan y leche
Tú: /ajuda
Jarvis: Comandos: /nota, /tempo, /lembrete
✓ Qué HACER
- ✓Crear siempre uno
/ajudaque enumera los comandos - ✓Dar nombres cortos y claros (
/tempo,/nota) - ✓Confirmar la acción con una respuesta ("Nota guardada")
✗ Qué NO hacer
- ✗Crear 20 comandos antes de que el bot funcione
- ✗Nombres confusos (
/xpt2) - ✗Dejar al usuario sin comentarios (el silencio parece que algo se rompió)
💡 Consejo: comandos en el menú de Telegram
Vuelve a BotFather y usa /setcommands para registrar la lista de comandos. Así, cuando el usuario escribe "/" en el chat, aparece un menú atractivo con los comandos disponibles. Es un detalle que hace que tu Jarvis parezca profesional.
Deploy: funcionando 24/7 en el VPS
Tu Jarvis solo responde mientras el código está en ejecución. En tu computadora, se detiene cuando cierras la terminal o apagas el equipo. Para responder a cualquier hora, necesita estar alojado en un VPS (el servidor de la Trilha 3) y ejecutarse como un servicio de systemd, que se inicia solo y se reinicia si se cae.
Paso 1: Sube el código y crea el .env
En el VPS, el archivo .env guarda los tokens fuera del código.
$ nano .env
# dentro del archivo:
TELEGRAM_TOKEN=7891234567:AAH...
ANTHROPIC_API_KEY=sk-ant-...
# y protégelo para que nadie lo lea
$ chmod 600 .env
Paso 2: Crea el servicio de systemd
Crea el archivo /etc/systemd/system/jarvis.service.
[Unit]
Description=Jarvis Bot
After=network.target
[Service]
WorkingDirectory=/home/deploy/jarvis
EnvironmentFile=/home/deploy/jarvis/.env
ExecStart=/usr/bin/python3 bot.py
Restart=always
[Install]
WantedBy=multi-user.target
Paso 3: Enciéndelo y mira cómo funciona
# vuelve a cargar la lista de servicios
$ sudo systemctl daemon-reload
# lo activa ahora y también al iniciar el sistema
$ sudo systemctl enable --now jarvis
# verifica el estado
$ sudo systemctl status jarvis
● jarvis.service - Jarvis Bot
Active: active (running)
⚠️ Error común
Problema: "El servicio no inicia y el estado dice failed."
Solución: Casi siempre es una ruta incorrecta o una variable faltante. Revisa los logs con journalctl -u jarvis -n 50. Comprueba si el WorkingDirectory existe, si el .env tiene los dos tokens y si la ruta de Python es correcta (prueba con which python3).
✓ Qué HACER
- ✓Guardar tokens en el
.env, nunca en el código - ✓Usar
Restart=alwayspara volver a levantarlo si se cae - ✓Observar
journalctlcuando algo salga mal
✗ Qué NO hacer
- ✗Ejecutar con
python bot.pyen la terminal y cerrar la sesión - ✗Hacer commit del
.enven Git - ✗Olvidar el
enable(no se inicia después de un reinicio)
🏆 ¡Felicitaciones!
Si llegaste hasta aquí, tienes un asistente de IA que vive en tu Telegram, piensa con Claude o GPT, ejecuta comandos y funciona las 24 horas del día en tu servidor. Este es el esqueleto de cualquier asistente. En el próximo módulo, profundizarás en el cerebro de tu Jarvis y le darás una memoria y un razonamiento más ricos.
📚 Resumen del módulo
Siguiente módulo:
5.2 - Intelecto: dar memoria y un razonamiento más profundo a tu asistente de IA