Integración OpenAI
Reglas
- Utiliza el paquete oficial
openai — new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
- Transmisión para chat:
stream: true con iterador asíncrono — nunca bloquees la finalización completa para respuestas orientadas al usuario
- Llamadas a funciones: define funciones con JSON Schema, maneja
tool_calls en la respuesta, devuelve resultados como tool messages
- Salidas estructuradas: usa
response_format: { type: "json_schema", json_schema: {...} } o Zod con el SDK de AI
- Gestión de tokens: estima tokens antes de enviar (aproximadamente 4 caracteres por token), recorta el contexto para mantenerse dentro de los límites
- Selección de modelo:
gpt-4o para razonamiento complejo, gpt-4o-mini para tareas simples — hazlo configurable
- System prompt como primer mensaje — establece tono, restricciones y formato de salida
- Temperatura: 0 para salidas deterministas (extracción de datos), 0.7-1.0 para tareas creativas
- Límite de tasa: respeta los encabezados
x-ratelimit-*, implementa backoff exponencial en errores 429
Patrones
const stream = await openai.chat.completions.create({
model: "gpt-4o",
messages,
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
tools: [{ type: "function", function: { name: "get_weather", parameters: schema } }],
});
Evitar
- Hardcodear claves API — siempre usa variables de entorno
- Ignorar límites de tokens — cuenta tokens y recorta mensajes de forma proactiva
- Usar
gpt-4o para tareas triviales — usa gpt-4o-mini para ahorrar costos
- Omitir manejo de errores en llamadas API — maneja errores 429, 500 y timeout de forma elegante