LLM
Un LLM (Large Language Model) es un modelo de aprendizaje profundo entrenado con enormes cantidades de texto para predecir y generar lenguaje natural. Su capacidad de "entender" y generar texto coherente los hace útiles para:
- Chatbots y asistentes conversacionales.
- Generación y resumen de texto.
- Extracción de información estructurada.
- Traducción y reescritura.
- Generación de código.
Los LLMs no "piensan" ni "entienden" en el sentido humano: predicen el token más probable dado un contexto. La sofisticación emerge de la escala.
Arquitectura básica: el flujo de una petición
La mayoría de APIs siguen el formato de chat completion con un array de mensajes:
[
{ "role": "system", "content": "Eres un asistente experto en Node.js." },
{ "role": "user", "content": "¿Cómo manejo errores en Express?" },
{ "role": "assistant", "content": "Puedes usar un middleware de errores..." },
{ "role": "user", "content": "¿Y con async/await?" }
]
Los roles son:
system: instrucciones de comportamiento del modelo (no visible para el usuario).user: mensajes del usuario.assistant: respuestas previas del modelo (para mantener contexto conversacional).
Principales proveedores
OpenAI
Considerada la pionera en el sector, es la responsable de la popularización de los LLMs con la familia de modelos GPT (Generative Pre-trained Transformer). Sus modelos destacan por ser el estándar de la industria, ofreciendo un equilibrio excelente entre razonamiento, velocidad y coste. Recientemente han introducido los modelos de razonamiento (o-series), diseñados para resolver problemas complejos de lógica y programación mediante una "cadena de pensamiento" interna antes de generar la respuesta final.
Algunos modelos de OpenAI:
gpt-5.4gpt-5.4-minigpt-5.4-nanogpt-4.1gpt-4ogpt-4o-minio3-mini
En las especificaciones de OpenAI se puede encontrar más información sobre cada modelo, como su aplicación de uso, contexto, velocidad y coste.
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await client.chat.completions.create({
model: 'gpt-5.4-mini',
messages: [
{ role: 'system', content: 'Eres un asistente de programación en Node.js.' },
{ role: 'user', content: '¿Qué es el event loop?' }
],
temperature: 0.5,
max_tokens: 500
});
console.log(response.choices[0].message.content);
Anthropic (Claude)
Fundada por ex-investigadores de OpenAI con un fuerte enfoque en la seguridad y la interpretabilidad de la IA (IA Constitucional). Sus modelos Claude son conocidos por tener un tono más natural y humano, ser menos propensos a alucinaciones y ofrecer ventanas de contexto muy amplias. Son especialmente potentes en tareas de redacción creativa, análisis detallado de documentos y programación avanzada.
Algunos modelos de Anthropic:
claude-opus-4-6claude-sonnet-4-6claude-haiku-4-5
En las especificaciones de Anthropic se puede encontrar más información sobre cada modelo, como su aplicación de uso, ventana de contexto, latencia y coste.
npm install @anthropic-ai/sdk
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const response = await client.messages.create({
model: 'claude-sonnet-4-5',
max_tokens: 500,
system: 'Eres un asistente de programación en Node.js.',
messages: [
{ role: 'user', content: '¿Qué es el event loop?' }
]
});
console.log(response.content[0].text);
Google (Gemini)
Los modelos de Google destacan por ser nativamente multimodales desde su fase de entrenamiento (procesan texto, imagen, audio y vídeo de forma conjunta) y por ofrecer una ventana de contexto masiva (hasta 2 millones de tokens), lo que permite analizar documentos extremadamente largos o repositorios de código enteros en una sola consulta.
Algunos modelos de Google:
gemini-3-flash-previewgemini-3.1-pro-previewgemini-3.1-flash-lite-preview
npm install @google/genai
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const response = await ai.models.generateContent({
model: 'gemini-2.0-flash',
contents: '¿Qué es el event loop de Node.js?'
});
console.log(response.text);
Mistral AI
Empresa europea centrada en la eficiencia y transparencia. Sus modelos destacan por un rendimiento excepcional en relación a su tamaño y por ofrecer versiones de pesos abiertos (open-weights), como Mixtral o Mistral Nemo, que permiten el auto-alojamiento (self-hosting) para mayor privacidad y control.
Algunos modelos de Mistral AI:
mistral-large-latestmistral-small-latestmistral-medium-latest
npm install @mistralai/mistralai
import { Mistral } from '@mistralai/mistralai';
const client = new Mistral({ apiKey: process.env.MISTRAL_API_KEY });
const response = await client.chat.complete({
model: 'mistral-large-latest',
messages: [{ role: 'user', content: '¿Qué es el event loop?' }]
});
console.log(response.choices[0].message.content);
DeepSeek
Compañía china que ha irrumpido con fuerza en el sector gracias a su relación calidad-precio imbatible. Su modelo DeepSeek-V3 ofrece un rendimiento de vanguardia a una fracción del coste de otros proveedores, mientras que DeepSeek-R1 es un modelo especializado en razonamiento complejo que rivaliza con las series de razonamiento de OpenAI mediante técnicas de aprendizaje por refuerzo.
Algunos modelos de DeepSeek:
deepseek-v3deepseek-r1
Puesto que su API es compatible con la de OpenAI, se utiliza el mismo SDK pero cambiando la baseURL.
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.DEEPSEEK_API_KEY,
baseURL: 'https://api.deepseek.com'
});
const response = await client.chat.completions.create({
model: 'deepseek-chat', // o 'deepseek-reasoner' para R1
messages: [{ role: 'user', content: '¿Qué es el event loop?' }]
});
console.log(response.choices[0].message.content);
Variables de entorno y buenas prácticas
Nunca hardcodees las API keys. Usa un fichero .env:
# .env
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=AIza...
import 'dotenv/config'; // npm install dotenv
Y añade .env a tu .gitignore:
.env
.env.local
Parámetros comunes de las APIs
| Parámetro | Descripción | Valores típicos |
|---|---|---|
temperature | Aleatoriedad de la respuesta | 0.0 – 1.0 |
max_tokens | Límite de tokens en la respuesta | 100 – 4096 |
top_p | Muestreo nucleico (alternativa a temperature) | 0.0 – 1.0 |
stop | Secuencias que detienen la generación | ["\n", "###"] |
stream | Devolver tokens conforme se generan | true / false |
Manejo de errores
Las APIs de LLMs pueden fallar por rate limits, timeouts o errores de red.
Implementa reintentos con backoff exponencial:
async function callWithRetry(fn, retries = 3, delay = 1000) {
for (let i = 0; i < retries; i++) {
try {
return await fn();
} catch (err) {
const isRateLimit = err?.status === 429;
const isLastAttempt = i === retries - 1;
if (isLastAttempt || !isRateLimit) throw err;
const waitTime = delay * Math.pow(2, i); // backoff exponencial
console.warn(`Rate limit alcanzado. Reintentando en ${waitTime}ms...`);
await new Promise(res => setTimeout(res, waitTime));
}
}
}
// Uso
const response = await callWithRetry(() =>
client.chat.completions.create({ model: 'gpt-4o-mini', messages })
);
El backoff exponencial es una estrategia de gestión de errores en la que el tiempo de espera entre reintentos aumenta de forma exponencial (por ejemplo: 1s, 2s, 4s, 8s...). Esta técnica es fundamental para:
- Evitar la saturación: No bombardear el servidor con peticiones si este ya está colapsado (throttling).
- Respetar los rate limits: Dar tiempo a que la ventana de cuota se restablezca tras un error 429.
- Eficiencia: Minimizar el número de intentos fallidos innecesarios.