DEV Community

Cover image for 🚀 Guía para: Workshop de Introducción a la API de ChatGPT utilizando NestJS/Node.js
Juan Carlos Valderrábano Hernández
Juan Carlos Valderrábano Hernández

Posted on

🚀 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)