DEV Community

Cover image for 🚀 Guía para: Workshop de Introducción a la API de ChatGPT utilizando NestJS/Node.js

🚀 Guía para: Workshop de Introducción a la API de ChatGPT utilizando NestJS/Node.js

¡Bienvenidos al Workshop de Introducción a la API de ChatGPT utilizando NestJS/Node.js! En este taller, aprenderemos a integrar la API de ChatGPT en aplicaciones desarrolladas con NestJS o Node.js, explorando desde la configuración inicial hasta la implementación de casos prácticos y avanzados.

📍 Objetivos del Workshop

  1. Comprender la API de ChatGPT: Familiarizarnos con la API de ChatGPT, su estructura de mensajes, y cómo puede ser utilizada en aplicaciones basadas en Node.js y NestJS.
  2. Configuración del Entorno: Preparar un entorno de desarrollo con NestJS/Node.js, incluyendo la instalación de dependencias y configuración de claves API.
  3. Realización de Solicitudes a la API: Aprender a realizar solicitudes a la API de ChatGPT dentro de un proyecto NestJS/Node.js, utilizando ejemplos claros y documentados.
  4. Implementación de Funcionalidades Clave: Desarrollar funcionalidades como análisis de texto, detección de sentimientos y generación de respuestas conversacionales en una API REST.
  5. Aplicación Práctica en Proyectos Reales: Implementar los conceptos aprendidos en un proyecto práctico, creando endpoints que interactúen con la API de ChatGPT.
  6. Documentación y Mejores Prácticas: Explorar cómo documentar adecuadamente el código y seguir las mejores prácticas en el desarrollo de APIs.

📅 Estructura del Taller

1. Introducción y Objetivos

  • Presentación del Taller: Introducción a los objetivos y alcance del taller.
  • Requisitos Previos: Conocimientos básicos de NestJS/Node.js y acceso a la API de OpenAI.

2. Configuración Inicial

2.1 Instalación de Node.js y NestJS

  • Instalación de Node.js: Descarga e instalación de Node.js desde la página oficial.
  • Creación de un Proyecto NestJS: Usar el CLI de NestJS para crear un nuevo proyecto:

     npm i -g @nestjs/cli
     nest new chatgpt-workshop
    
  • Configuración Inicial: Configuración del entorno y estructura del proyecto.

2.2 Instalación de Dependencias

  • Axios: Una biblioteca para realizar solicitudes HTTP:

     npm install axios
    
  • Dotenv: Para manejar variables de entorno de manera segura:

     npm install dotenv
    
  • Configuración de Variables de Entorno: Crear un archivo .env para almacenar la clave API de OpenAI:

     OPENAI_API_KEY=tu_clave_api_aqui
    

3. Primeros Pasos con la API en Node.js/NestJS

3.1 Integración con Axios

  • Configuración de Axios: Crear un servicio en NestJS que utilice Axios para realizar solicitudes a la API de OpenAI.
  • Ejemplo de Código:

     import { Injectable } from '@nestjs/common';
     import axios from 'axios';
    
     @Injectable()
     export class ChatGptService {
       private readonly apiKey = process.env.OPENAI_API_KEY;
       private readonly apiUrl = 'https://api.openai.com/v1/chat/completions';
    
       async sendMessage(messages: Array<{ role: string; content: string }>) {
         const response = await axios.post(
           this.apiUrl,
           {
             model: 'gpt-4',
             messages: messages,
           },
           {
             headers: {
               Authorization: `Bearer ${this.apiKey}`,
               'Content-Type': 'application/json',
             },
           },
         );
    
         return response.data;
       }
     }
    
  • Documentación:

    • apiKey: Clave API obtenida desde el archivo .env.
    • apiUrl: URL base para la API de OpenAI.
    • sendMessage(): Método que envía un array de mensajes a la API de ChatGPT.

3.2 Realización de Solicitudes Básicas

  • Estructura de Mensajes:

    • role: Define el rol del participante en la conversación (system, user, assistant).
    • content: Contenido del mensaje.
    • Ejemplo de Solicitud:
       {
         "model": "gpt-4",
         "messages": [
           {"role": "system", "content": "You are a helpful assistant."},
           {"role": "user", "content": "What is the capital of France?"}
         ]
       }
    
    • Respuesta:
       {
         "id": "chatcmpl-abc123",
         "object": "chat.completion",
         "created": 1689988888,
         "choices": [
           {
             "index": 0,
             "message": {
               "role": "assistant",
               "content": "The capital of France is Paris."
             },
             "finish_reason": "stop"
           }
         ],
         "usage": {
           "prompt_tokens": 13,
           "completion_tokens": 9,
           "total_tokens": 22
         }
       }
    

4. Análisis de Texto y Conversaciones

4.1 Generación de Respuestas

  • Descripción: Uso de la API para generar respuestas automáticas basadas en la entrada del usuario.
  • Ejemplo de Código:

     import { Controller, Post, Body } from '@nestjs/common';
     import { ChatGptService } from './chatgpt.service';
    
     @Controller('chat')
     export class ChatController {
       constructor(private readonly chatGptService: ChatGptService) {}
    
       @Post('message')
       async sendMessage(@Body('message') message: string) {
         const messages = [{ role: 'user', content: message }];
         const response = await this.chatGptService.sendMessage(messages);
         return response.choices[0].message.content;
       }
     }
    
  • Explicación:

    • ChatController: Define un endpoint POST para enviar mensajes a la API de ChatGPT.
    • sendMessage(): Recibe un mensaje de usuario y lo envía a la API, devolviendo la respuesta generada.

4.2 Manejo del Contexto en Conversaciones

  • Descripción: Mantener el contexto de una conversación mediante la gestión de un historial de mensajes.
  • Ejemplo de Código:

     let chatHistory = [
       { role: 'system', content: 'You are a helpful assistant.' },
     ];
    
     @Post('conversation')
     async continueConversation(@Body('message') message: string) {
       chatHistory.push({ role: 'user', content: message });
       const response = await this.chatGptService.sendMessage(chatHistory);
       chatHistory.push(response.choices[0].message);
       return response.choices[0].message.content;
     }
    
  • Explicación:

    • chatHistory: Un array que almacena el historial de la conversación.
    • continueConversation(): Añade el nuevo mensaje al historial, lo envía a la API y actualiza el historial con la respuesta.

5. Análisis de Sentimientos

5.1 Implementación de Detección de Sentimientos

  • Descripción: Utilizar la API para analizar el tono y los sentimientos en un texto dado.
  • Ejemplo de Código:

     @Post('sentiment')
     async analyzeSentiment(@Body('message') message: string) {
       const messages = [
         { role: 'system', content: 'You are an assistant specialized in sentiment analysis.' },
         { role: 'user', content: message },
       ];
       const response = await this.chatGptService.sendMessage(messages);
       return response.choices[0].message.content;
     }
    
  • Explicación:

    • analyzeSentiment(): Envia un texto a la API con el contexto de análisis de sentimientos y devuelve la interpretación.

6. Aplicación Práctica: Creación de una API REST Completa

6.1 Proyecto de Ejemplo: API RESTful

  • Descripción: Desarrollo de una API RESTful completa en NestJS que integra las funcionalidades de ChatGPT para generación de texto, manejo de conversaciones, y análisis de sentimientos.
  • Endpoints:
    • POST /chat/message: Genera una respuesta simple basada en el input del usuario.
    • POST /chat/conversation: Mantiene el contexto de la conversación para respuestas más complejas.
    • POST /chat/sentiment: Analiza el sentimiento del texto proporcionado.

6.2 Manejo de Errores y Validaciones

  • Descripción: Implementar validaciones y manejo de errores en la API para asegurar la robustez.
  • Ejemplo de Manejo de Errores:

     import { HttpException, HttpStatus } from '@nestjs/common';
    
     async sendMessage(messages: Array<{ role: string; content: string }>) {
       try {
         const response = await axios.post(this.apiUrl, {
           model: 'gpt-4',
           messages: messages,
         }, {
           headers: {
             Authorization: `Bearer ${this.apiKey}`,
             'Content-Type': 'application/json',
           },
         });
    
         return response.data;
       } catch (error) {
         throw new HttpException('Error comunicándose con la API de ChatGPT', HttpStatus.BAD_REQUEST);
       }
     }
    

7. Documentación y Mejores Prácticas

7.1 Documentación de la API

  • Descripción: Documentar la API utilizando Swagger y OpenAPI para facilitar la comprensión y uso por otros desarrolladores.
  • Implementación de Swagger:

     import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
    
     const options = new DocumentBuilder()
       .setTitle('ChatGPT API')
       .setDescription('API de ejemplo integrando ChatGPT con NestJS')
       .setVersion('1.0')
       .build();
    
     const document = SwaggerModule.createDocument(app, options);
     SwaggerModule.setup('api', app, document);
    

8. Preguntas y Respuestas

9. Conclusión

🛠️ Recursos Adicionales

Top comments (0)