¡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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Documentación Oficial de OpenAI: Revisión detallada de las capacidades y funcionalidades de la API.
- NestJS Documentation: Guía completa para trabajar con NestJS.
- Axios Documentation: Referencia para realizar solicitudes HTTP con Axios.
Top comments (0)