Compartir en Twitter
Go to Homepage

CÓMO CREAR UN CHATBOT DE DISCORD CON IA

November 8, 2025

Introducción a la creación de un chatbot de Discord con IA

Construir un chatbot de Discord con inteligencia artificial es un proyecto fascinante que combina técnicas de procesamiento del lenguaje natural, entrenamiento de modelos y despliegue en plataformas modernas. Este tutorial detalla cómo crear un chatbot que emule el estilo de un personaje favorito, ya sea ficticio o real, utilizando herramientas como Google Colab, Hugging Face, y Repl.it. A lo largo del proceso, se explorarán pasos clave como la recolección de datos, el entrenamiento de un modelo basado en GPT, la integración con Discord, y el mantenimiento del bot en línea. Este proyecto es ideal para programadores interesados en inteligencia artificial y desarrollo de aplicaciones interactivas.

Recolección de datos para el chatbot

El primer paso para construir un chatbot es recopilar datos de diálogo que representen la voz del personaje elegido. Los datos deben incluir intercambios conversacionales que permitan al modelo aprender patrones de lenguaje específicos. Existen dos enfoques principales: utilizar conjuntos de datos existentes en plataformas como Kaggle o crear conjuntos personalizados a partir de transcripciones.

Uso de datasets de Kaggle

Kaggle ofrece una amplia variedad de conjuntos de datos de diálogos extraídos de películas, series de televisión y otros medios. Estos conjuntos suelen incluir columnas como el nombre del personaje y sus líneas de diálogo. Por ejemplo, un dataset de una película de Harry Potter puede contener columnas con el nombre del personaje y su texto correspondiente. Para utilizar estos datos, es necesario filtrar las columnas relevantes, asegurándose de que solo se incluyan el nombre del personaje y su diálogo.

import pandas as pd

# Cargar dataset desde Kaggle
data = pd.read_csv('harry_potter_dialogues.csv')
# Filtrar columnas relevantes
data = data[['character_name', 'dialogue']]

Es importante verificar que el dataset contenga suficientes líneas de diálogo del personaje elegido para garantizar un entrenamiento efectivo. Un mínimo de 500 líneas es recomendable, aunque datasets más grandes pueden mejorar la calidad del modelo.

Creación de datasets personalizados

Si no se encuentra un dataset adecuado en Kaggle, es posible crear uno propio a partir de transcripciones. Sitios como Transcript Wiki ofrecen transcripciones de programas de televisión, películas o incluso entrevistas. Por ejemplo, una transcripción de Peppa Pig puede servir como base para un chatbot que hable como este personaje. Para extraer los datos, se utilizan expresiones regulares que separen el nombre del personaje y su diálogo.

import re

# Ejemplo de transcripción
transcript = """
Peppa: ¡Me encanta saltar en charcos!
George: ¡Dinosaurio, grrr!
"""

# Expresión regular para extraer nombre y diálogo
pattern = r'([a-zA-Z|\s]+): (.+)'
matches = re.findall(pattern, transcript)
data = pd.DataFrame(matches, columns=['character_name', 'dialogue'])

Este enfoque permite personalizar el chatbot con personajes menos comunes o incluso con diálogos entre amigos, capturando estilos de conversación únicos.

Entrenamiento del modelo con Google Colab

El modelo base para el chatbot será DialoGPT-small, un modelo GPT preentrenado por Microsoft, que se ajustará finamente con los datos recopilados. Google Colab proporciona un entorno gratuito con acceso a GPUs, ideal para este propósito. El proceso de entrenamiento implica cargar el dataset, configurar el entorno y ajustar los hiperparámetros del modelo.

Configuración del entorno en Google Colab

Primero, se debe cargar el archivo del dataset a Google Colab y seleccionar una runtime con GPU para acelerar el entrenamiento. El código para cargar el dataset y especificar el personaje objetivo es el siguiente:

import pandas as pd

# Configuración del dataset y personaje
data = pd.read_csv('MY_DATASET.csv')
CHARACTER_NAME = 'MY_CHARACTER'

El archivo model_train_upload_workflow.ipynb, disponible en repositorios como GitHub, contiene los scripts necesarios para este proceso. El entrenamiento con un dataset de 700 líneas toma aproximadamente 10 minutos en una GPU estándar.

Ajuste fino del modelo

El ajuste fino implica entrenar el modelo DialoGPT-small con el dataset preparado. Los hiperparámetros clave incluyen el número de épocas (num_train_epochs), que determina cuántas veces el modelo recorre el dataset. Un valor típico es 3-5 épocas, pero un número excesivo puede provocar sobreajuste, donde el modelo memoriza los datos en lugar de generalizar.

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import Trainer, TrainingArguments

# Cargar modelo y tokenizador
model_name = "microsoft/DialoGPT-small"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Configuración de entrenamiento
training_args = TrainingArguments(
    output_dir='./output-small',
    num_train_epochs=3,
    per_device_train_batch_size=4,
    save_steps=500,
    save_total_limit=2,
)

# Entrenamiento
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset,
)
trainer.train()

Para modelos más complejos, se puede usar DialoGPT-medium o DialoGPT-large, aunque requieren más tiempo y recursos computacionales. El modelo entrenado se guarda en la carpeta output-small.

Despliegue del modelo en Hugging Face

Hugging Face es una plataforma que permite alojar modelos de inteligencia artificial y acceder a ellos mediante una API gratuita. Este paso es crucial para que el chatbot sea accesible desde Discord.

Creación de un repositorio en Hugging Face

Para comenzar, es necesario crear una cuenta en Hugging Face y generar un repositorio de modelo. Al crear el repositorio, se debe añadir una etiqueta de “conversational” en el archivo README.md del modelo.

---
tags:
    - conversational
---

# Mi Chatbot Personalizado

El modelo entrenado se sube al repositorio utilizando la API de Hugging Face. Es importante obtener un token de API desde el perfil de usuario para autenticar las operaciones.

from huggingface_hub import login, upload_folder

# Autenticación con Hugging Face
login(token="HUGGINGFACE_TOKEN")

# Subir modelo
upload_folder(
    folder_path="./output-small",
    repo_id="username/my-chatbot-model",
    repo_type="model",
)

Una vez subido, el modelo puede probarse directamente en el navegador para verificar su funcionalidad conversacional.

Construcción del bot de Discord

El siguiente paso es integrar el modelo con Discord para que el chatbot pueda interactuar en canales de texto. Esto requiere crear una aplicación en el portal de desarrolladores de Discord y configurar un bot.

Configuración en el portal de Discord

En el portal de desarrolladores de Discord, se crea una nueva aplicación y se añade un bot. Solo es necesario activar el permiso de enviar mensajes en la configuración de permisos del bot. El token de la API del bot debe copiarse para su uso posterior.

Desarrollo del bot en Repl.it

Repl.it es una plataforma ideal para alojar el bot, ya que permite ejecutar scripts en Python o JavaScript. Se crea un nuevo Repl en el lenguaje preferido y se configuran las variables de entorno para almacenar los tokens de Hugging Face y Discord.

import os
import discord
from huggingface_hub import InferenceClient

# Configuración de tokens
HUGGINGFACE_TOKEN = os.getenv('HUGGINGFACE_TOKEN')
DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')

# Inicialización del cliente de Hugging Face
client = InferenceClient(model="username/my-chatbot-model", token=HUGGINGFACE_TOKEN)

# Configuración del bot de Discord
intents = discord.Intents.default()
intents.message_content = True
bot = discord.Client(intents=intents)

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    response = client.text_generation(message.content)
    await message.channel.send(response)

bot.run(DISCORD_TOKEN)

Para un bot en JavaScript, es necesario especificar una versión compatible de la API de Discord en el archivo package.json debido a limitaciones en Repl.it.

{
    "dependencies": {
        "discord.js": "^12.5.3"
    }
}

Una vez configurado, el bot se ejecuta en Repl.it y se añade a un servidor de Discord, donde responderá a los mensajes de los usuarios.

Mantenimiento del bot en línea

Un desafío común al alojar bots en Repl.it es que el script se detiene si se cierra el navegador. Para mantener el bot en línea, se configura un servidor web que contiene el script del bot y se utiliza un servicio como Uptime Robot para enviar solicitudes periódicas al servidor.

Configuración del servidor web

El servidor web se implementa en el mismo Repl.it, asegurándose de que el bot permanezca activo. Un ejemplo básico para Python es el siguiente:

from flask import Flask
import threading
import bot  # Importa el script del bot

app = Flask(__name__)

@app.route('/')
def home():
    return "Bot is running!"

# Ejecutar el bot en un hilo separado
threading.Thread(target=bot.run, args=(os.getenv('DISCORD_TOKEN'),)).start()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Configuración de Uptime Robot

Uptime Robot permite mantener el servidor activo enviando solicitudes HTTP cada cinco minutos. Se configura un monitor que apunte a la URL del servidor web en Repl.it.

# Ejemplo de URL para monitorear
https://my-bot-project.username.repl.co/

Con esta configuración, el bot permanecerá en línea incluso si el navegador se cierra, respondiendo a los mensajes de los usuarios de manera continua.

Conclusiones

Crear un chatbot de Discord con IA es un proyecto accesible que combina técnicas de inteligencia artificial y desarrollo web. Desde la recolección de datos en Kaggle o transcripciones personalizadas, hasta el entrenamiento de un modelo GPT en Google Colab, el despliegue en Hugging Face, y la integración con Discord mediante Repl.it, este tutorial cubre cada paso necesario. La configuración de Uptime Robot asegura que el bot permanezca activo, permitiendo interacciones continuas con los usuarios. Este proyecto no solo es una excelente introducción al procesamiento del lenguaje natural, sino también una oportunidad para experimentar con personajes favoritos y personalizar experiencias conversacionales únicas.