Cómo Crear un Chatbot Multimodal con IA Generativa

Tiempo de lectura: 2 minutos

En 2025, LLaMA (Large Language Model Meta AI) se ha consolidado como una de las opciones más versátiles para chatbots locales o en la nube, capaces de procesar texto, imágenes y audio. En este tutorial aprenderás a crear un chatbot multimodal usando solo LLaMA.

Chatbot - pexels

Por qué usar LLaMA

  • Ligero y eficiente: Funciona incluso en PCs de gama media con GPUs modernas.
  • Local: No dependes de la nube, ideal para privacidad.
  • Multimodal: LLaMA 3 soporta input de texto y imágenes, y se puede integrar con TTS (text-to-speech) para audio.
  • Customizable: Puedes hacer fine-tuning con tus datos para respuestas más precisas.

LLaMA 3 tiene versiones de 7B, 13B y 70B parámetros; para pruebas locales, 7B-13B suelen ser suficientes.

Preparar el entorno

  1. Instala Python 3.11+ y crea un entorno virtual:
python -m venv llama-env
source llama-env/bin/activate  # Linux / Mac
.\llama-env\Scripts\activate   # Windows

Instala librerías necesarias:

pip install torch torchvision torchaudio
pip install transformers sentencepiece pillow
pip install pyttsx3  # Para TTS local

Descarga LLaMA 3 desde tu fuente oficial (por ejemplo Ollama o Hugging Face).

Código base del chatbot LLaMA

from transformers import LlamaForCausalLM, LlamaTokenizer
import torch
import pyttsx3
from PIL import Image

# Cargar modelo y tokenizer
model_name = "llama-3-7b"
tokenizer = LlamaTokenizer.from_pretrained(model_name)
model = LlamaForCausalLM.from_pretrained(model_name, device_map="auto")

# Función para generar respuesta
def generar_respuesta(prompt):
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    output = model.generate(**inputs, max_new_tokens=200)
    respuesta = tokenizer.decode(output[0], skip_special_tokens=True)
    return respuesta

# Función TTS
def hablar(texto):
    engine = pyttsx3.init()
    engine.say(texto)
    engine.runAndWait()

# Ejemplo de uso
prompt = "Hola, muéstrame un ejemplo divertido de chatbot multimodal."
respuesta = generar_respuesta(prompt)
print(respuesta)
hablar(respuesta)

Tip: Para input multimodal, puedes integrar LLaMA con CLIP o BLIP para procesar imágenes, y luego pasar el texto generado al modelo principal.

Integrando imágenes

from transformers import BlipProcessor, BlipForConditionalGeneration

processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model_blip = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")

def describir_imagen(ruta_imagen):
    image = Image.open(ruta_imagen)
    inputs = processor(image, return_tensors="pt")
    out = model_blip.generate(**inputs)
    return processor.decode(out[0], skip_special_tokens=True)

# Uso
descripcion = describir_imagen("mi_foto.jpg")
respuesta = generar_respuesta(f"Basado en esto: {descripcion}, cuéntame algo divertido.")
print(respuesta)

Deja un comentario