Hace un año, si querías agregar IA a tu proyecto, básicamente significaba usar GPT-3.5 y rezar para que funcionara. Hoy el panorama es completamente diferente. Tienes docenas de opciones, cada una con sus ventajas, costos y casos de uso específicos.
Vamos a desmenuzar las opciones reales que tienes en 2024, con código, costos y casos de uso concretos. Sin marketing, solo lo que necesitas saber para elegir.
NOTA: tomamos como referencia los primeros modelos de los cuales ya tenemos información recopilada y veridica.
El Panorama Actual
Las opciones principales se dividen en tres categorías:
- APIs Comerciales: OpenAI, Anthropic, Google, Cohere
- Modelos Open Source: Llama, Mistral, Phi
- Soluciones Intermedias: Vercel AI SDK, LangChain, Replicate
Cada una tiene su lugar. Veamos cuándo usar qué.
OpenAI: El Estándar de Facto
OpenAI sigue siendo el rey por una razón: funciona bien y la documentación es excelente.
Ejemplo Básico
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
async function generarRespuesta(prompt) {
const completion = await openai.chat.completions.create({
model: "gpt-4-turbo-preview",
messages: [
{ role: "system", content: "Eres un asistente experto en programación." },
{ role: "user", content: prompt }
],
temperature: 0.7,
max_tokens: 1000,
});
return completion.choices[0].message.content;
}
// Uso
const respuesta = await generarRespuesta("Explica qué son las closures en JavaScript");
console.log(respuesta);Costos Reales
Con GPT-4 Turbo (el modelo que realmente quieres usar):
- Input: $10 por 1M tokens
- Output: $30 por 1M tokens
En términos prácticos: si tu app procesa 100,000 conversaciones al mes con ~500 tokens promedio cada una, estás viendo unos $1,500/mes. No es barato.
Cuándo Usar OpenAI
- Necesitas la mejor calidad posible
- Tu presupuesto aguanta los costos
- Quieres soporte y estabilidad garantizada
- Function calling es importante para tu proyecto
Anthropic Claude: El Challenger
Claude se ha vuelto mi opción favorita últimamente. La calidad es comparable a GPT-4 pero con ventanas de contexto más grandes y mejor seguimiento de instrucciones.
Ejemplo con Claude
import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
async function chatConClaude(mensaje) {
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
messages: [
{ role: "user", content: mensaje }
],
});
return message.content[0].text;
}
// Perfecto para análisis de código
const analisis = await chatConClaude(`
Analiza este código y sugiere mejoras:
function fetchData() {
var result;
$.ajax({
url: '/api/data',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
`);Ventaja Real: Contexto Masivo
Claude 3 soporta hasta 200k tokens de contexto. Eso es básicamente un libro completo. Útil para:
// Puedes pasar archivos enteros para análisis
async function analizarRepositorio(archivos) {
const contenidoCompleto = archivos
.map(f => `// ${f.path}\n${f.content}`)
.join('\n\n');
const analisis = await chatConClaude(`
Analiza esta base de código y encuentra:
1. Problemas de seguridad
2. Code smells
3. Oportunidades de refactoring
${contenidoCompleto}
`);
return analisis;
}Costos
Claude 3.5 Sonnet:
- Input: $3 por 1M tokens
- Output: $15 por 1M tokens
Significativamente más barato que GPT-4. Mismo caso de uso anterior: ~450/mes vs 1,500/mes.
Modelos Open Source: Llama y Mistral
Si los costos de API te están matando o necesitas privacidad total, los modelos open source son una opción seria ahora.
Corriendo Llama Localmente
// Usando Ollama (la forma más fácil de correr modelos locales)
import { Ollama } from 'ollama';
const ollama = new Ollama();
async function chatLocal(prompt) {
const response = await ollama.chat({
model: 'llama3.1',
messages: [{ role: 'user', content: prompt }],
});
return response.message.content;
}
// Gratis, pero necesitas hardware decente
const respuesta = await chatLocal("Genera un README para un proyecto de React");Realidad del Hardware
Para correr Llama 3.1 70B (el modelo bueno):
- Mínimo: 48GB VRAM (4x RTX 3090)
- Recomendado: 80GB VRAM (A100)
- Alternativa barata: Llama 3.1 8B (corre en una 3090)
La calidad del modelo 8B es… aceptable. No esperes magia, pero para tareas simples funciona.
Opción Cloud: Replicate
Si quieres open source pero sin el dolor de cabeza del hardware:
import Replicate from 'replicate';
const replicate = new Replicate({
auth: process.env.REPLICATE_API_TOKEN,
});
async function usarLlama(prompt) {
const output = await replicate.run(
"meta/llama-2-70b-chat:latest",
{
input: {
prompt: prompt,
max_tokens: 500,
}
}
);
return output.join('');
}Costo: ~$0.65 por 1M tokens. Mucho más barato que las APIs comerciales.
Vercel AI SDK: La Capa de Abstracción
Vercel AI SDK es genial si quieres cambiar entre proveedores sin reescribir código.
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { anthropic } from '@ai-sdk/anthropic';
// Cambia el proveedor sin cambiar tu código
async function generarContenido(prompt, proveedor = 'openai') {
const modelos = {
openai: openai('gpt-4-turbo'),
anthropic: anthropic('claude-3-5-sonnet-20241022'),
};
const { text } = await generateText({
model: modelos[proveedor],
prompt: prompt,
});
return text;
}
// Mismo código, diferentes modelos
const respuesta1 = await generarContenido("Explica recursión", "openai");
const respuesta2 = await generarContenido("Explica recursión", "anthropic");Streaming en UI
La killer feature de Vercel AI SDK es el streaming trivial:
// app/api/chat/route.js
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
export async function POST(req) {
const { messages } = await req.json();
const result = await streamText({
model: openai('gpt-4-turbo'),
messages,
});
return result.toAIStreamResponse();
}
// En tu componente React
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<div>
{messages.map(m => (
<div key={m.id}>
<strong>{m.role}:</strong> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit">Enviar</button>
</form>
</div>
);
}Eso es todo. Chat con streaming funcionando. Cero configuración de WebSockets, cero dolor de cabeza.
Casos de Uso Reales
1. Chatbot de Soporte
Mejor opción: GPT-4 Turbo o Claude 3.5 Sonnet
async function soporteCliente(pregunta, historial) {
const contexto = `
Eres un asistente de soporte para una plataforma de e-commerce.
Base de conocimiento: [FAQ, políticas, procedimientos]
`;
const mensajes = [
{ role: "system", content: contexto },
...historial,
{ role: "user", content: pregunta }
];
// Claude es mejor para seguir instrucciones complejas
return await chatConClaude(mensajes);
}Costo estimado: $200-800/mes dependiendo del volumen.
2. Generación de Código
Mejor opción: GPT-4 + Claude (usa ambos)
async function generarComponente(descripcion) {
// GPT-4 para la estructura inicial
const estructura = await generarRespuesta(`
Genera un componente React para: ${descripcion}
`);
// Claude para revisar y optimizar
const optimizado = await chatConClaude(`
Revisa este código y optimízalo:
${estructura}
`);
return optimizado;
}3. Análisis de Datos
Mejor opción: Llama 3.1 70B (via Replicate)
async function analizarCSV(datos) {
const prompt = `
Analiza estos datos de ventas y dame insights:
${JSON.stringify(datos.slice(0, 100))}
Busca patrones, anomalías y tendencias.
`;
// Open source es suficiente para análisis
return await usarLlama(prompt);
}Costo: Casi nada vs OpenAI.
4. Embeddings para Search
Mejor opción: OpenAI text-embedding-3-small
import OpenAI from 'openai';
const openai = new OpenAI();
async function crearEmbeddings(textos) {
const response = await openai.embeddings.create({
model: "text-embedding-3-small",
input: textos,
});
return response.data.map(d => d.embedding);
}
// Buscar documentos similares
async function buscarSimilar(query, documentos) {
const queryEmbedding = await crearEmbeddings([query]);
// Calcula similitud coseno con tus documentos
const similitudes = documentos.map(doc =>
cosineSimilarity(queryEmbedding[0], doc.embedding)
);
return documentos[similitudes.indexOf(Math.max(...similitudes))];
}Costo: $0.02 por 1M tokens. Ridículamente barato.
La Verdad sobre LangChain
LangChain está sobrevalorado. Es útil para prototipos rápidos, pero para producción:
// LangChain: Mucha magia, poco control
import { ChatOpenAI } from "langchain/chat_models/openai";
import { PromptTemplate } from "langchain/prompts";
// vs usar la API directamente
import OpenAI from 'openai';
// Segundo es más simple, más control, menos bugs misteriososUsa LangChain si estás experimentando. Para producción, APIs directas.
Mi Stack Personal
Para un proyecto nuevo hoy:
- Vercel AI SDK como abstracción base
- Claude 3.5 Sonnet para tareas complejas
- GPT-4 Turbo como fallback
- OpenAI Embeddings para search
- Llama 3.1 8B (local) para desarrollo/testing
// config/ai.js
export const aiConfig = {
development: {
model: 'llama3.1', // Local, gratis
provider: 'ollama'
},
production: {
model: 'claude-3-5-sonnet-20241022',
fallback: 'gpt-4-turbo',
provider: 'anthropic'
}
};Recomendaciones por Presupuesto
Startup ($0-100/mes):
- Llama via Replicate
- Embeddings de OpenAI
- Cachea agresivamente
SMB ($100-1000/mes):
- Claude 3.5 Sonnet
- OpenAI para casos específicos
- Vercel AI SDK
Enterprise ($1000+/mes):
- GPT-4 + Claude (usa el mejor para cada tarea)
- Fine-tuning si tiene sentido
- Infraestructura dedicada
Lo que podemos decir
No hay una respuesta correcta. Depende de:
- Tu presupuesto
- Tus requisitos de calidad
- Tu volumen de uso
- Tus necesidades de privacidad
Mi consejo: empieza con Claude 3.5 Sonnet via Vercel AI SDK. Te da flexibilidad para cambiar después y el costo es razonable. Si tu app despega y el costo se vuelve problema, evalúa open source.
Lo importante es empezar. Puedes optimizar después.