Integración con ChatGPT API en TypeScript: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo ChatGPT y TypeScript se convierten en mejores amigos

Imagine: está escribiendo código en TypeScript y, de repente, su servicio adquiere un superpoder: la capacidad de comprender y generar texto humano. La API de ChatGPT hace esto realidad. En este artículo no solo conectaremos la API, sino que construiremos un módulo completo para comunicarnos con la red neuronal, que sea robusto, tipado y listo para producción.

Si cree que la integración de IA es algo de ciencia ficción o solo para gigantes como Google, me apresuro a alegrarle: OpenAI proporciona una API REST simple, y TypeScript con su tipado estricto hace que trabajar con ella sea seguro y predecible. Vamos a verlo en la práctica.



Preparación del entorno: qué necesita instalar

Antes de escribir código, asegurémonos de que tiene todo lo necesario. Para trabajar con la API de ChatGPT en TypeScript necesitará:

  • Node.js versión 18 o superior (recomiendo la 20 LTS)
  • npm o yarn para la gestión de paquetes
  • Clave de API de OpenAI — obténgala en platform.openai.com
  • Editor de código (VS Code, WebStorm — cualquier que le sea cómodo)

Creemos un nuevo proyecto e instalemos las dependencias:

mkdir chatgpt-typescriptcd chatgpt-typescriptnpm init -ynpm install openai dotenvnpm install -D typescript @types/node ts-node

Tenga en cuenta: estamos usando el SDK oficial de OpenAI, que se lleva muy bien con TypeScript. El paquete dotenv será necesario para almacenar de forma segura la clave de API.



Configuración de TypeScript y variables de entorno

Creemos el archivo tsconfig.json con la configuración básica:

{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "lib": ["ES2020"],    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "skipLibCheck": true,    "forceConsistentCasingInFileNames": true  },  "include": ["src/**/*"]}

Ahora creemos el archivo .env en la raíz del proyecto:

OPENAI_API_KEY=su_clave_súper_secreta

Importante: ¡agregue .env al archivo .gitignore para no commitear accidentalmente la clave en el repositorio!



Escribiendo la primera solicitud a ChatGPT en TypeScript

Creemos la carpeta src y el archivo index.ts. Empecemos con algo simple: enviar un mensaje y obtener una respuesta.

import OpenAI from 'openai';import dotenv from 'dotenv';

dotenv.config();

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY,});

async function chatWithGPT(prompt: string): Promise<string> { try { const response = await openai.chat.completions.create({ model: 'gpt-4', messages: [ { role: 'system', content: 'Eres un asistente útil.' }, { role: 'user', content: prompt }, ], temperature: 0.7, max_tokens: 500, });

return response.choices[0]?.message?.content || 'Sin respuesta'; } catch (error) { console.error('Error al solicitar a ChatGPT:', error); throw error; }}

// Uso(async () => { const answer = await chatWithGPT('Cuenta un chiste corto sobre programadores'); console.log('ChatGPT dice:', answer);})();

Ejecute el código con el comando npx ts-node src/index.ts. Si todo está configurado correctamente, verá la respuesta de la red neuronal. Observe el tipado: TypeScript sugiere automáticamente la estructura del objeto response, lo que hace que el desarrollo sea cómodo.



Análisis de los parámetros clave

  • model: gpt-4 — el modelo más inteligente hoy en día. Para ahorrar, puede usar gpt-3.5-turbo.
  • messages: una lista de mensajes que forman la conversación. El rol system establece el comportamiento del asistente, user — la solicitud del usuario.
  • temperature: controla la creatividad de las respuestas (0.0 — respuestas deterministas, 1.0 — más creativas).
  • max_tokens: longitud máxima de la respuesta (1 token ≈ 0.75 palabras en inglés).


Manejo de errores y reintentos

En un proyecto real, la red puede fallar o la API puede devolver un error. Agreguemos un mecanismo de reintentos con retry:

import OpenAI from 'openai';import dotenv from 'dotenv';

dotenv.config();

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY,});

async function chatWithGPTWithRetry( prompt: string, maxRetries: number = 3): Promise<string> { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const response = await openai.chat.completions.create({ model: 'gpt-4', messages: [ { role: 'system', content: 'Eres un asistente útil.' }, { role: 'user', content: prompt }, ], temperature: 0.7, max_tokens: 500, });

return response.choices[0]?.message?.content || 'Sin respuesta'; } catch (error) { console.error(`Intento ${attempt} falló:`, error); if (attempt === maxRetries) { throw new Error('Todos los intentos de solicitud a ChatGPT fallaron'); } // Esperar antes de reintentar (1s, 2s, 4s...) await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, attempt - 1))); } } throw new Error('Error inesperado');}

// Uso(async () => { try { const answer = await chatWithGPTWithRetry('¿Cuál es el sentido de la vida?'); console.log('ChatGPT dice:', answer); } catch (error) { console.error('Error final:', error); }})();

Este enfoque hace que su integración sea resistente a fallos temporales de la red o sobrecarga de la API.



Conclusión

Hemos creado una integración funcional de ChatGPT API en TypeScript desde cero. Ahora tiene una base sólida que puede ampliar: agregar streaming de respuestas, trabajar con varios modelos, crear su propio asistente con contexto y mucho más. TypeScript hace que este proceso sea seguro y predecible, y la API de OpenAI abre posibilidades casi ilimitadas para su aplicación.

¿Qué sigue? Intente agregar diálogos con memoria, integración con su base de datos o crear un chatbot para su sitio web. El límite es su imaginación (y los límites de la API, por supuesto).

Blogs

Book Recommendations