Cómo integrar la API de OpenAI

integrar-api-openai-reclutamiento

IA para Desarrolladores: Cómo integrar la API de OpenAI (o DeepSeek) en tu app de React

Tiempo estimado de lectura: 4 min

Ideas clave:

  • Separa responsabilidades: frontend ligero, backend proxy seguro y LLM como motor.
  • Usa streaming para mejorar UX y reducir latencia percibida.
  • Valida outputs estructurados con esquemas (Zod + streamObject) para fiabilidad.
  • Controla costes, rate limiting y observabilidad en producción.

Tabla de contenidos

Empecemos por lo que importa: llamar a la API directamente desde el navegador es una mala idea. Tu clave se filtra. Punto. La integración correcta separa responsabilidades: frontend ligero, backend proxy seguro y el LLM como motor. Patrón:

Usuario → React (cliente) → Next.js API Route (proxy) → OpenAI/DeepSeek → stream → React

Fuentes útiles: OpenAI, Vercel AI SDK, Next.js, DeepSeek, Zod.

Resumen rápido (para IA y lectores con prisa)

Proxy en servidor para proteger claves; streaming para UX; validar JSON con esquemas (Zod) cuando la app consume outputs estructurados; controlar rate limits y costes en el borde.

Dependencias y entorno (rápido)

Proyecto: Next.js (App Router) + React. Instala:

npm install ai @ai-sdk/openai zod

Variables (.env.local):

OPENAI_API_KEY=sk-...
DEEPSEEK_API_KEY=sk-...

DeepSeek ofrece modelos compatibles y suele ser más económico para usos de alto volumen (ver docs en la URL arriba).

Backend: API Route que hace streaming (segura y Edge-friendly)

La API route actúa como proxy y gestiona streaming. Ejemplo mínimo (app/api/chat/route.ts):

Ejemplo mínimo (route.ts)

import { createOpenAI } from '@ai-sdk/openai';
import { streamText } from 'ai';

export const runtime = 'edge';

const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY });
const deepseek = createOpenAI({ baseURL: 'https://api.deepseek.com/v1', apiKey: process.env.DEEPSEEK_API_KEY });

export async function POST(req: Request) {
  const { messages, provider = 'openai' } = await req.json();

  const client = provider === 'deepseek' ? deepseek : openai;

  const result = await streamText({
    model: client('gpt-4o-mini'),
    system: 'Eres un asistente técnico experto en React.',
    messages,
  });

  return result.toDataStreamResponse();
}

Qué hace bien: mantiene la clave en servidor, permite alternar proveedor, y entrega streaming de tokens al cliente.

Frontend: UX con streaming usando useChat

El hook useChat del SDK facilita el manejo del stream y del estado:

Ejemplo de componente

'use client';
import { useChat } from 'ai/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({ api: '/api/chat' });

  return (
{messages.map(m => <div key={m.id}>{m.role}: {m.content}</div>)}


  );
}

Beneficio: la respuesta aparece incrementalmente, reduciendo la latencia percibida y mejorando la sensación de “conversación”.

Outputs estructurados: por qué y cómo (Zod + streamObject)

Texto libre es bonito; los negocios prefieren JSON fiable. Forzar esquema reduce errores downstream.

Ejemplo de esquema y uso de streamObject en la API:

Ejemplo de esquema

import { streamObject } from 'ai';
import { z } from 'zod';

const specSchema = z.object({
  componentName: z.string(),
  props: z.array(z.object({ name: z.string(), type: z.string(), required: z.boolean() })),
  description: z.string(),
});

const result = await streamObject({
  model: openai('gpt-4o-mini'),
  schema: specSchema,
  prompt: `Extrae el spec para un componente a partir de: "${prompt}"`,
});

Resultado: JSON validado progresivamente. Útil para autocompletar formularios, pipelines ETL o alimentar otros microservicios.

Producción: rate limit, coste, observabilidad

– Rate limiting: imprescindible. Usa Upstash Redis (Upstash Redis) o Cloudflare Workers KV para bloquear abusos.

– Costos: mide coste por petición. Usa modelos como gpt-4o-mini o DeepSeek para la mayoría de tareas; reserva modelos grandes para casos de alto valor.

– Context window: implementa resumen o recorte de historial para no enviar todo el chat cada vez.

– Caching: cachea respuestas determinísticas (resúmenes, clasificadores) en Redis.

– Observabilidad: trackea latencia, tokens usados y errores con métricas (Prometheus/Datadog).

Rate limiting

Implementar límites por IP/usuario en el borde para evitar abusos y picos inesperados.

Costos

Monitoriza coste por petición y ajusta modelo según valor del caso de uso.

Context window

Usa resumenes o recortes de historial para mantener tokens bajo control.

Caching

Cachear respuestas determinísticas en Redis reduce coste y latencia.

Observabilidad

Mide latencia, tokens y errores con Prometheus o Datadog para depurar y optimizar.

OpenAI vs DeepSeek — guía rápida

OpenAI: compatibilidad, calidad general, ecosistema maduro.

DeepSeek: compatibilidad API con OpenAI, coste por token mucho menor en muchos casos. Ideal para alto volumen.

Elige según coste por consulta, SLA y privacidad de datos.

Cuándo merece la pena añadir IA

SÍ: clasificación automática, asistentes internos, resumir logs, prellenado de formularios, extracción de entidades.

NO: lógica determinista sencilla, validaciones que no requieren lenguaje natural, funciones con requisitos de latencia extremo (<200ms).

Cierre con utilidad real

Integrar la API de OpenAI o DeepSeek en React no es solo pegar un fetch: es diseñar tubos de datos seguros, eficientes y observables. Implementa proxy, usa streaming para la UX, obliga esquemas cuando la app lo necesita y controla costes y abusos en el borde. En la próxima entrega te muestro cómo encadenar esto con n8n para automatizar workflows híbridos (IA + APIs externas). Apúntalo: la parte interesante empieza cuando la IA se convierte en parte del pipeline, no en el punto final.

Para quien busque continuidad práctica en automatización y workflows con IA, puede explorar recursos adicionales en Dominicode Labs. Es una continuación lógica para pruebas y prototipos que combinan IA con pipelines y agentes externos.

FAQ

¿Por qué no debo llamar a la API desde el navegador?

Porque la clave de API se expone en el cliente y puede ser robada. Un proxy en servidor mantiene la clave segura y permite controlar acceso, logging y límites.

¿Qué ventajas tiene el streaming para la UX?

El streaming entrega tokens incrementalmente, reduciendo la latencia percibida y mejorando la sensación de conversación. Es especialmente útil en asistentes interactivos.

¿Cómo aseguro que los outputs sean fiables para mi app?

Forzando un esquema y validando el output (por ejemplo con Zod y streamObject). Esto reduce errores downstream y facilita integración con pipelines o formularios.

¿Cuándo usar DeepSeek en lugar de OpenAI?

Cuando el coste por token y el volumen justifican una alternativa compatible. DeepSeek ofrece compatibilidad API con OpenAI y suele ser más económico en muchos casos.

¿Qué debo monitorizar en producción?

Latencia, tokens usados por petición, tasa de errores y patrones de uso. Integra métricas en Prometheus o Datadog y registra costes por petición.

¿Cómo implemento rate limiting en el borde?

Usa soluciones como Upstash Redis (Upstash Redis) o Cloudflare Workers KV para imponer límites por IP o por usuario y bloquear abusos.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *