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-nodeTenga 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_secretaImportante: ¡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 usargpt-3.5-turbo. - messages: una lista de mensajes que forman la conversación. El rol
systemestablece 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).