Saltar a contenido

IA

Conceptos

image.png

La IA (Inteligencia Artificial) es una rama de la informática que busca crear máquinas o programas capaces de realizar tareas que normalmente requieren inteligencia humana.

Estas tareas incluyen cosas como:

  • Reconocimiento de voz o imágenes (por ejemplo, cuando tu teléfono entiende lo que dices).
  • Toma de decisiones (como los sistemas que recomiendan películas o rutas de viaje).
  • Aprendizaje automático (machine learning), donde las máquinas aprenden de los datos sin ser programadas explícitamente para cada tarea.
  • Procesamiento del lenguaje natural, que permite a los sistemas entender y responder en lenguaje humano (como yo 😊).

En resumen, la IA trata de imitar la forma en que las personas piensan, aprenden y resuelven problemas, pero usando algoritmos y datos.

Arquitectura

              ┌───────────────────────────────────────────────────────────────┐
              │                        USUARIO                                │
              │───────────────────────────────────────────────────────────────│
              │  💬 Usa navegador web (Chrome, Firefox, etc.)                 │
              │  🌐 Accede a http://tu-servidor:3000                          │
              └───────────────┬───────────────────────────────────────────────┘
                              │ 1️⃣ Escribe / envía prompt
                              ▼
        ┌──────────────────────────────────────────────────────────────────────┐
        │                      🖥️  Open WebUI (contenedor Docker)              │
        │──────────────────────────────────────────────────────────────────────│
        │ - Interfaz tipo ChatGPT                                              │
        │ - Guarda historiales de chat (persistencia)                          │
        │ - Tiene “Knowledge Base” (memoria larga / aprendizaje)               │
        │ - Llama al modelo LLM a través de API local                          │
        └───────────────┬──────────────────────────────────────────────────────┘
                        │ 2️⃣ Envía prompt al motor de IA local (Ollama)
                        ▼
        ┌──────────────────────────────────────────────────────────────────────┐
        │                 🧠 Ollama (host, fuera del contenedor)               │
        │──────────────────────────────────────────────────────────────────────│
        │ - Maneja modelos LLM (Llama 3, Mistral, Phi-3, etc.)                 │
        │ - Usa GPU vía CUDA para acelerar inferencia                          │
        │ - Expone API local http://localhost:11434                            │
        │ - Compatible con múltiples modelos y embeddings                      │
        └───────────────┬──────────────────────────────────────────────────────┘
                        │ 3️⃣ Llama a la GPU para procesar el modelo
                        ▼
        ┌──────────────────────────────────────────────────────────────────────┐
        │             ⚙️ NVIDIA Container Toolkit + Drivers CUDA               │
        │──────────────────────────────────────────────────────────────────────│
        │ - “Puentea” la GPU física hacia los contenedores                     │
        │ - Permite ejecutar CUDA/Tensor ops dentro de Docker                  │
        │ - Asegura compatibilidad entre driver y librerías del contenedor     │
        └───────────────┬──────────────────────────────────────────────────────┘
                        │ 4️⃣ Acceso a la GPU física
                        ▼
        ┌──────────────────────────────────────────────────────────────────────┐
        │                 💻 GPU Física (RTX, CUDA cores, VRAM)                │
        │──────────────────────────────────────────────────────────────────────│
        │ - Ejecuta el modelo LLM en paralelo masivo                           │
        │ - Usa librerías CUDA/cuDNN/TensorRT instaladas en Ubuntu             │
        │ - Devuelve resultados procesados a Ollama                            │
        └──────────────────────────────────────────────────────────────────────┘

Modelos

image.png

Un modelo de inteligencia artificial es un programa entrenado para aprender patrones a partir de datos (como texto, imágenes o sonidos), y luego usar esos patrones para hacer tareas “inteligentes”, por ejemplo:

  • Entender preguntas
  • Escribir texto
  • Traducir
  • Reconocer imágenes o voz

🔹 Un modelo de IA aprende de muchos ejemplos y luego predice o genera cosas nuevas que tienen sentido.

🔹Un modelo de IA es un sistema entrenado para hacer una tarea específica.

🔹 Cada tipo de modelo de IA se especializa en un tipo de información.
🔹 Algunos (como los multimodales) combinan varios tipos a la vez.
🔹 Los modelos de lenguaje grandes (LLMs) son los más usados hoy por su versatilidad (chat, análisis, generación, etc.).


Tipos

image.png

Los tipos de modelos se diferencian por el tipo de datos que usan (texto, imagen, sonido, etc.) y lo que saben hacer (predecir, clasificar, generar, etc.).

Tipo de modelo Qué hace Ejemplos
1. Modelos de lenguaje (LLMs) Entienden y generan texto, mantienen conversaciones, escriben, traducen. ChatGPT, Llama 3, Mistral, Gemini, Claude
2. Modelos de visión Reconocen y analizan imágenes o videos. YOLO, CLIP, ResNet, OpenCV, SAM (Segment Anything)
3. Modelos de voz y audio Reconocen voz o generan audio y música. Whisper (transcripción), TTS (Text-to-Speech), MusicGen
4. Modelos multimodales Combinan texto, imágenes, audio o video para razonar con varios tipos de datos a la vez. GPT-4o, Gemini 1.5, Claude 3.5, Kosmos-2
5. Modelos de recomendación Predicen qué te gustará (productos, películas, música). Netflix, Amazon, TikTok, Spotify
6. Modelos predictivos / analíticos Detectan patrones y hacen pronósticos basados en datos numéricos. Modelos de predicción de ventas, clima, finanzas
7. Modelos generativos Crean contenido nuevo: texto, imágenes, código, video o música. DALL·E, Stable Diffusion, Midjourney, Code Llama
8. Modelos de refuerzo (Reinforcement Learning) Aprenden a tomar decisiones por ensayo y error. AlphaGo, agentes de videojuegos, robots autónomos
9. Modelos de embeddings / vectoriales Representan texto o imágenes como números para comparar similitud. OpenAI Embeddings, Nomic, Sentence Transformers

Modelos populares por tipo

Área Modelos conocidos
Texto / conversación ChatGPT, Claude, Llama, Mistral, Phi
Imagen Stable Diffusion, Midjourney, DALL·E, CLIP
Audio / voz Whisper, Bark, MusicGen
Multimodal (todo en uno) GPT-4o, Gemini 1.5, Claude 3.5, Kosmos
Código / programación Code Llama, StarCoder, DeepSeek Coder
Recomendaciones Matrix Factorization, Transformers, DeepFM

Terminología

Parámetros

Son las “conexiones internas” del cerebro del modelo. Cada parámetro guarda un número que el modelo ajustó mientras aprendía. Un modelo tiene capas de redes neuronales con miles de millones de parámetros (sus “neuronas”). Durante el entrenamiento, el modelo ajusta esos parámetros para aprender relaciones entre los datos.

  • El número define el tamaño: Un modelo de 8B (como Llama 3.1) tiene 8.000 millones de parámetros.
  • Regla física: A más parámetros, la IA es más inteligente, pero requiere más memoria VRAM en GPU para funcionar.

Por ejemplo:

  • llama3.1:70b tiene 70 mil millones de parámetros (ocupa decenas de GB).
  • Esos son los “pesos” de una red neuronal, como las sinapsis de un cerebro.
  • Cuantos más parámetros, más conocimiento y más capacidad de razonamiento.

🔹 “B” = billones de parámetros
🔹 Más parámetros = más inteligencia, más tamaño, más consumo
🔹 “70B” = modelo muy grande, con calidad similar a ChatGPT avanzado

Tokens

Los tokens son las unidades de texto que el modelo procesa o genera. No son palabras exactamente, sino pedacitos de palabras.

Los tokens son las piezas del texto que entran o salen del modelo cuando conversas.

Cuando tú hablas con él, el modelo usa lo que aprendió para procesar tus tokens (las partes de texto que le mandas) y generar una respuesta.

Cuantización (Quantization)

Es la técnica de compresión que permite que un modelo gigante quepa en tu servidor. Los pesos originales son números matemáticos de alta precisión muy pesados (16 bits / FP16). La cuantización los reduce (por ejemplo, a 4 bits / Q4).

  • El beneficio: Reduce el peso del modelo a la cuarta parte (de 32 GB a solo 8 GB de VRAM) perdiendo menos del 1% de inteligencia. Es lo que permite que tu GPU L4 rinda al máximo.

Ventana de Contexto (Context Window)

Es la memoria a corto plazo de la IA en un chat. Define cuántos tokens (texto) puede recordar el modelo entre tu pregunta, sus respuestas anteriores y las instrucciones del sistema en una misma sesión.

  • Los modelos modernos tienen ventanas enormes (ej. Llama 3.1 soporta 128.000 tokens).
  • Impacto: Aunque el modelo soporte mucho, a mayor contexto usado por un usuario, más VRAM consume.

Temperatura (Temperature)

Es el parámetro que controla la creatividad o aleatoriedad de las respuestas del modelo. Se mide en una escala de 0.0 a 1.0 (o a veces hasta 2.0):

  • Temperatura baja (0.0 - 0.2): Respuestas lógicas, precisas y repetitivas. Ideal para programación, matemáticas o análisis de datos.
  • Temperatura alta (0.7 - 1.0): Respuestas creativas, variadas y fluidas. Ideal para lluvia de ideas o redacción de textos.

Prompt del Sistema (System Prompt)

Es la personalización o rol inicial que le das a la IA antes de que el usuario empiece a hablar. Define las reglas de comportamiento, el tono y las restricciones del modelo (por ejemplo: "Eres un profesor de química estricto que solo responde en español"). El usuario no lo ve directamente, pero el modelo lo obedece durante todo el chat.


Resumen

Término Qué significa Ejemplo
Modelo de IA Un cerebro artificial entrenado para hacer una tarea. ChatGPT, Llama, Mistral
Entrenamiento El proceso donde aprende de muchos datos. Leer millones de textos
Parámetros Las conexiones o “neuronas” que guardan lo aprendido. 70 B en Llama 3 – 70B
Tokens Las piezas de texto que el modelo lee o genera. “Hola mundo” → 3 tokens

Ollama

image.png

Ollama es una herramienta y plataforma diseñada para ejecutar modelos de lenguaje grandes (LLMs) de manera local en tu computadora, sin depender de servidores en la nube.

En términos simples, es una forma de usar modelos tipo ChatGPT o LLaMA directamente en tu máquina.

  • Permite descargar y correr modelos de IA (como LLaMA 2, Mistral, Gemma, Phi-3, etc.) en tu propio equipo.
  • Proporciona una interfaz de línea de comandos (CLI) y una API local, con la que puedes integrar los modelos en tus propias aplicaciones.
  • Se encarga de gestionar la descarga, ejecución y optimización del modelo, para que no tengas que configurar manualmente entornos complejos.

Enlaces

Características

  • Ejecución local: todos los cálculos se hacen en tu computadora (no se envían datos a la nube).
  • Compatibilidad multiplataforma: disponible para macOS, Windows y Linux.
  • Modelos variados: soporta modelos de código abierto como LLaMA 2, Mistral, Gemma, Phi-3, Command-R, entre otros.
  • Integración sencilla: se puede usar desde terminal o con peticiones HTTP a http://localhost:11434.
  • Privacidad y control: ideal si quieres mantener tus datos en local o experimentar con IA sin depender de OpenAI, Anthropic, etc.

Requisitos

Instalación

Baremetal

curl -fsSL https://ollama.com/install.sh | sh

# Arranca el servicio (si no arrancó solo):
sudo systemctl enable --now ollama

Docker

Creando el directorio para los servicios

mkdir -p ~/projects/ollama
cd ~/projects/ollama
# guarda aquí el compose.yaml

compose.yaml

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama
    environment:
      - OLLAMA_NUM_PARALLEL=4      # Permite procesar hasta 4 peticiones simultáneas en la GPU L4
      - OLLAMA_MAX_LOADED_MODELS=1 # Mantiene un solo modelo en VRAM para evitar saturación
    restart: unless-stopped
    #  ===== Recursos y GPU NVIDIA ===== (requiere nvidia-container-toolkit en el host)
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            capabilities: ["gpu"]
            count: all
        limits: #  Control de recursos para Ollama 
          cpus: '10.0'       # Máximo 10 cores lógicos simultáneos
          memory: 24gb       # Espacio de sobra para Llama 3.1 8B y picos de contexto
    # =========================== 
volumes:
  ollama:

CLI

# Arranca el stack
sudo docker compose up -d
# Comprueba los logs de ollama
sudo docker logs -n 200 -f ollama
# apaga el stack
sudo docker compose down
# Conectar al shell del contenedor ollama
sudo docker exec -it ollama bash
# Lista los modelos instalados
ollama list
# Descarga un modelo sin ejecutarlo
ollama pull phi3
# Muestra información de un modelo
ollama show llama3.1
# ejecuta un modelo
ollama run llama3.1
# Elimina un modelo
ollama rm mistral

Open WebUI

image.png

🏡 Home | Open WebUI

Open WebUI (antes conocida como Ollama WebUI) es una interfaz gráfica web de código abierto que te permite usar modelos de lenguaje locales (como los de Ollama, LM Studio, o incluso GPTs remotos) desde una experiencia parecida a ChatGPT — pero en tu propia computadora o servidor, sin depender de la nube.

En pocas palabras:

Convierte Ollama en un ChatGPT local.

Con Open WebUI, obtienes una interfaz moderna (accesible desde tu navegador) donde puedes:

  • Chatear con modelos locales como Mistral, LLaMA 3, Phi-3, etc.
  • Crear y guardar “personas” o prompts personalizados (como GPTs locales).
  • Subir archivos y pedirle al modelo que los analice.
  • Administrar varios modelos desde un mismo panel.
  • Integrar extensiones o conectarlo con APIs externas.

Open WebUI corre dentro de Docker y usa Ollama o PyTorch como backend IA.

Funciones

Función Descripción
💬 Chat multihilo Guarda y organiza tus conversaciones.
🧠 Compatibilidad con Ollama Usa modelos locales fácilmente.
🌍 Integración con OpenAI y otros backends También puede conectarse a GPT-4, Claude, etc.
🧩 Soporte para plugins y herramientas Puedes ampliar sus funciones (por ejemplo, para buscar en la web o ejecutar código).
📄 Análisis de archivos Puedes subir PDFs, TXT o CSV y hacerle preguntas al modelo.
🛡️ Privacidad total Todos los datos se quedan en tu equipo si solo usas Ollama.

Instalar

Después de instalar Ollama, puedes desplegar Open WebUI como contenedor docker ampliando el fichero compose.yaml con el contenido:

---
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    deploy:
      resources:
        limits:
          cpus: '2.0'        # La interfaz web es ligera, 2 cores bastan
          memory: 2gb
    volumes:
      - open_webui:/app/backend/data
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
      - ENABLE_SIGNUP=false
      - DEFAULT_USER_ROLE=user
      # ===== CONFIGURACIÓN DE BÚSQUEDA WEB AUTOMÁTICA =====
      - ENABLE_RAG_WEB_SEARCH=True       # Activa la búsqueda web de forma global al iniciar
      - RAG_WEB_SEARCH_ENGINE=ddgs       # Selecciona DuckDuckGo (Gratis y sin requerir APIs externas)
      - WEB_SEARCH_CONCURRENT_REQUESTS=1 # Crítico multiusuario: Encola las búsquedas para evitar bloqueos por IP
    depends_on:
      - ollama
    restart: unless-stopped
    networks:
      - default
      - proxy 

volumes:
  open_webui:  

networks:
  default:
  proxy:
    external: true

Comandos:

# Arranca el stack
sudo docker compose up -d
# Comprueba los logs de open-webui
sudo docker logs -n 200 -f open-webui
# apaga el stack
sudo docker compose down

Ahora ya puedes acceder a Open WebUI en http://IP-Host:8080

Personalización

Entra ID

🌍 Microsoft Environment Variable Configuration | Open WebUI

🌍 Cómo registrar una aplicación en Entra ID de Microsoft - Microsoft identity platform | Microsoft Learn

Añade a docker-compose.yaml en la sección de variables:

      # SSO Microsoft Entra ID (OIDC)
      - ENABLE_OAUTH_SIGNUP=true
      - MICROSOFT_CLIENT_ID=${CLIENT_ID}
      - MICROSOFT_CLIENT_SECRET=${CLIENT_SECRET}
      - MICROSOFT_CLIENT_TENANT_ID=${TENANT_ID}
      - MICROSOFT_OAUTH_SCOPE=openid email profile
      - MICROSOFT_REDIRECT_URI=https://${FQDN}/oauth/microsoft/callback
      - OPENID_PROVIDER_URL=https://login.microsoftonline.com/${TENANT_ID}/v2.0/.well-known/openid-configuration

fichero .env

FQDN="ia.dominio.com"
TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
CLIENT_SECRET=xxxxx~xxxxxxxxxxxxxxxxxxxxxxxxxx