Qué importa para un bot
- Latencia: en un chat se nota todo lo que pase de un par de segundos. Transmite tokens o envía el indicador de escribiendo.
- Tool calling: permite que el modelo llame tus funciones (consultar un pedido, buscar en documentos) con argumentos tipados.
- API compatible con OpenAI: si un proveedor acepta el mismo formato de petición, cambiar es solo modificar la URL base y el nombre del modelo.
- Términos de datos: revisa si las entradas de la API se usan para entrenar y cuánto tiempo se guardan.
Comparación
| Proveedor | Compatible con OpenAI | Bueno para | Página de precios |
|---|---|---|---|
| xAI (Grok) | Sí | Chat general, razonamiento, contexto largo | docs.x.ai |
| OpenAI | Formato nativo | Ecosistema amplio, salidas estructuradas | openai.com |
| Anthropic (Claude) | Capa de compatibilidad; se recomienda la API Messages nativa | Instrucciones largas, uso cuidadoso de herramientas | anthropic.com |
| Google Gemini | Endpoint de compatibilidad | Tiene plan gratuito para algunos modelos; multimodal | ai.google.dev |
| Mistral | API propia, de forma similar | Proveedor europeo, modelos de pesos abiertos | mistral.ai |
| Groq | Sí | Inferencia muy rápida de modelos abiertos | groq.com |
| OpenRouter | Sí | Una llave, muchos proveedores; pruebas A/B fáciles | openrouter.ai |
| Local: Ollama / llama.cpp | Sí | Privacidad, sin costo por token; necesita un equipo con RAM suficiente o GPU | ollama.com |
Datos de compatibilidad revisados el 2026-10-19 en la documentación de cada proveedor.
Mantén tu bot portable
// Same code, different provider: change BASE_URL, API_KEY and MODEL in .env
const res = await fetch(process.env.BASE_URL + "/chat/completions", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
model: process.env.MODEL,
max_tokens: 400, // cap cost per reply
messages: [
{ role: "system", content: "You are a support bot for Example Shop. Answer in the user's language." },
{ role: "user", content: userText },
],
}),
signal: AbortSignal.timeout(20000),
});
if (!res.ok) throw new Error("model error " + res.status);
const reply = (await res.json()).choices[0].message.content;
Estima el tamaño del prompt y el costo con el estimador de tokens y lee la guía de chatbots con IA para memoria, herramientas y defensas contra prompt injection.