Integrando ChatGPT con Spring Boot

Publicado por Jhonatan Rojas Terrones el

Arquitectura de SolucionesSpring BootChat GPTOpenAIMicroservicios

Desde ya hace unos meses atrás se va hablando sobre la Inteligencia Artificial especialmente de la empresa OpenAI y su producto con más relevancia en estos últimos meses ChatGPT, en este artículo no hablaremos sobre ¿Que es Inteligencia Artificial? ni ¿Que es ChatGPT?, esto lo tenemos publicado en un post anterior Chat GPT: El nuevo gurú de la programación

El 1 de marzo de 2023, OpenAI lanzo la publicación de sus APIs para que los desarrolladores ahora puedan integrarse a los modelos ChatGPT y Whisper en sus aplicaciones, ¡Que gran noticia para los desarrolladores amantes de la IA! con este lanzamiento podemos incorporar IA en nuestras aplicaciones

¿Qué APIs nos brinda OpenAI?

OpenAI ha entrenado modelos de lenguaje de vanguardia que son excelentes para comprender y generar texto.

Las APIs de OpenAI brinda acceso a estos modelos y se puede utilizar para resolver prácticamente cualquier tarea de involucre lenguaje de procesamiento. Puede realizar las siguientes tareas:

  • Generación de Contenido
  • Resumen
  • Clasificación, categorización y análisis de sentimiento
  • Extracción de datos
  • Traducción
  • Transcripción
  • Generación de Imágenes

Podemos interactuar con la API a través de solicitudes HTTP desde cualquier lenguaje de programación, en este articulo construiremos un microservicio en Spring Boot para integrarlo con la API de OpenAI.

Creación del proyecto JAVA en Spring Boot

1. Para la creación del proyecto utilizaremos el Spring Initializr

El microservicio tendrá las siguientes características, como se muestra en la siguiente imagen:

2. Configuración del fichero application.yml

  • api-key: es la clave "token" de la API que se utiliza para la autenticación. Si no tienes una API KEY os dejo el link para generar.
  • gpt-model: gpt-3.5-turbo, es el modelo GPT-3.5 más optimizado para chat es muy similar al modelo davinci, este ultimo tiene mejor calidad y más caro por las capacidades que lo caracteriza.
  • urls: siguiendo la documentación de OpenAI, todas las URLs de la empiezan con https://api.openai.com/v1 (base-url) y la función de chat se define como /chat/completions (chat-url) de acuerdo a la tabla de compatibilidad según el modelo.

Ahora que la configuración esta completa pasemos a la implementación del cliente.

3. Implementación del cliente utilizando OpenFeign

Creamos la interfaz OpenAIClient el método chat para la integración con la API de OpenAI.

4. Creación de los objetos de solicitud Request y respuesta Response

  • Creamos la clase ChatGPTRequest
  • Creamos la clase ChatGPTResponse

5. Implementación del Servicio

Creamos la clase de servicio OpenAIClientService construiremos un método llamado chat y como parámetro de entrada el objeto de la solicitud ChatGPTRequest, llamaremos al cliente Feign para hacer las llamadas a la API de OpenAI.

La construcción de la implementación del servicio se ha realizado de acuerdo a la documentación de las API de OpenAI. En la documentación seguramente hay varios parámetros de entradas que son requeridos y opcionales que podemos enviar en el cuerpo de la solicitud, en nuestro caso para la función /chat/completions, podemos observar que existe un parámetro temperature indica el muestreo, entre 0 y 2.

Los valores más altos harán que la salida sea más aleatoria, mientras que los valores más bajos son más precisos (enfocadas y determinista). El valor de temperature por defecto es 1.

6. Construcción del controlador REST

Creamos la clase OpenAIClientController que sera de tipo @RestController y vamos a definir:

  • chat(/api/v1/chat): Servicio de tipo POST que consume el mensaje en formato JSON, enviando una pregunta y genera contenido de respuesta.

7. Implementación de la Autenticación

Finalmente pasamos a crear la clase OpenAIClientConfig. La función de esta clase será que todas las llamadas a la API de OpenAI deban de pasar el parámetro de Authorization en el encabezado Header de solicitud con el valor del API KEY, según la imagen vamos a declarar el método apiKeyInterceptor y retornar un RequestInterceptor

8. Ejecutar el microservicio

  • Botoncito verde y a correr!!!!

Probando el servicio vía Postman

Ahora podemos probar en Postman el endpoint que acabamos de crear.

En el postman anterior, se puede ver que mi pregunta ¿Quién pinto la mona lisa? y su respuesta suma 41 fichas. Consulte la sección "uso" en el JSON de respuesta

  • prompt_tokens: 19
  • completion_tokens: 22
  • total_tokens: 41

OpenAI ofrece una herramienta para realizar el calculo de tokens

En el registro de API de OpenAI, obtenemos un crédito de $5 que se puede usar durante los primeros 3 meses para probar su API, una vez terminado el crédito gratuito, ofrecen el modelo de pago por uso

OpenAI ofrece el concepto de Fine-tunning, se trata de crear tus propios modelos personalizados ajustando sus modelos base(Ada, Baddage, Curie, Davinci) con sus datos de entrenamiento, una vez que ajustes un modelo, se te facturará solo por los tokens que uses en las solicitudes de ese modelo. (Por si os interesa, se puede realizar una PoC en un próximo artículo sobre fine-tunning, a que si ^^)

Conclusión

La integración de la API de OpenAI en microservicios usando Spring Boot brinda una solución sólida y flexible para el desarrollo de aplicaciones de chat inteligentes, permitiendo aprovechar al máximo las capacidades de procesamiento de lenguaje natural de OpenAI y la modularidad de Spring Boot. Esta combinación es ideal para crear conversaciones más interactivas y realistas con los usuarios.

Espero que este articulo haya sido de utilidad para futuros desarrollo de vuestras aplicaciones webs o móviles incorporéis IA, el código fuente de este artículo se puede encontrar en mi repositorio de GitHub.

Autor

Jhonatan Rojas Terrones

Me considero aprendiz de todo, maestro de nada. Amante de la Innovación & Arquitecturas de Soluciones Empresariales de IT, Cloud y DevOps en knowmad mood.