Integrando ChatGPT en DBeaver

0
323

0. Índice de contenidos.

  1. Introducción.
  2. Entorno.
  3. Creación API Key.
  4. Creación base de datos.
  5. Instalación del plugin en DBeaver.
  6. Consulta de datos.
    6.1 Consultas sencillas.
    6.2 Consultas de dificultad intermedia.
    6.3 Consulta más compleja.
  7. Debug consultas a ChatGPT.
  8. Conclusiones.

1. Introducción

En nuestro anterior tutorial dedicado a investigar las posibilidades que nos brinda ChatGPT a la hora de trabajar con bases de datos, habíamos visto que nos podía facilitar enormemente la creación de consultas SQL. Para ello era necesario darle el contexto del modelo de datos con el que ibamos a trabajar y partir de ahí ya podíamos comenzar a explotar los datos.

En este tutorial vamos integrar el plugin de ChatGPT que la gente de DBeaver ha desarrollado para integrarlo en su producto .

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 13′ (Apple M1 Pro, 32GB DDR4).
  • Sistema Operativo: Mac OS Ventura 13.3.1

3. Creación API Key

En primer lugar necesitamos crear un API Key para poder consumir los servicios de ChatGPT, para ello nos debemos loguear con nuestra cuenta de OpenAI y en el apartado User / API Keys crear una nueva clave https://platform.openai.com/account/api-keys. Recomendamos crear claves distintas para cada servicio que necesite acceder al API de ChatGPT, de esta forma podemos gestionarlas de forma independiente y revocar una clave sin afectar al resto de servicios.

Creación API Key

El uso de ChatGPT a través de su API no es gratuito, por lo que deberemos de tener saldo en nuestra cuenta. En el siguiente enlace podemos configurar nuestros medios de pago para realizar las recargas https://platform.openai.com/account/billing/overview

4. Creación base de datos

Repetiremos los pasos del tutorial anterior para levantar un contenedor Docker con una base de datos PostgreSQL, y a continuación ejecutaremos los scripts para crear las dos tablas con las que vamos a realizar los ejemplos (person y vehicle) y el script para popularlas.

5. Instalación del plugin en DBeaver

DBeaver trabaja con un sistema de plugins similar al de Eclipse, en este caso instalaremos el plugin DBeaver AI (GPT) integration a través de la opción Help / Install new software

DBeaver instalación plugin chatGPT

El plugin viene sin firmar y debemos confiar en él para poder instalarlo.

DBeaver instalación plugin chatGPT

Ya estamos en situación de comenzar a utilizar ChatGPT desde DBeaver, en el editor de consultas SQL tendremos un nuevo icono disponible:
Icono ChatGPT en editor SQL

Antes de comenzar a utilizarlo debemos configurarlo, pulsaremos en el nuevo icono para interactuar con ChatGPT y nos aparece una ventana modal donde debemos pinchar en la rueda de configuración para irnos a nueva nueva modal donde configuramos el plugin.
Establecemos el API Token generado en el punto anterior.
En modelo seleccionamos gpt-3.5-turbo (el recomendado para generar SQL) y configuramos una temperatura en torno a 0.7.
A mayor temperatura más creativo es ChatGPT a la hora de interpretar los datos de entrada, a menor temperatura más rígido es, y necesita una definición de tablas mucho más precisa.

Config ChatGPT in DBeaver

En nuestro caso activamos los dos checks del apartado Completion en la configuración del plugin:

  • Ejecutar la consulta SQL una vez sea generada
  • Mostrar como comentario en la consulta generada el texto en lenguaje natural con el que solicitamos a ChatGPT que nos genere la consulta

6. Consulta de datos

El plugin para DBeaver ofrece varias opciones de configuración a nivel de scope para definir el origen de datos, en nuestro caso el que mejor funciona y mejor contexto envía a ChatGPT es Current Schema y seleccionar public que es el esquema con el que trabajamos.

Config scope in DBeaver

Para realizar las consultas a base de datos vamos a utilizar el mismo juego de datos del tutorial anterior y le pediremos a ChatGPT que genere las mismas consultas con el fin de comparar resultados. En cada SQL generada mostramos como comentario el texto en lenguaje natural con el que solicitamos a ChatGPT que nos genere la consulta.

6.1 Consultas sencillas

Le pedimos las consultas para obtener todas las personas y vehículos ordenados por atributos:

Ambas consultas son generadas correctamente, como curiosidad en uno de los casos hace uso del comodín para devolver todos los campos y en otro detalla uno a uno los campos a obtener.

Ahora preguntaremos por el número de vehículos de cada color que hay en cada ciudad:

La consulta que nos devuelve funciona correctamente. Curiosamente, en esta consulta hace uso del nombre del esquema para acceder a la tabla person, en las consultas anteriores no lo hacía.

6.2 Consultas de dificultad intermedia

Le preguntamos ahora por las ciudades que tienen algún vehículo blanco pero no tienen ningún vehículo negro a partir de 2018:

De nuevo la consulta generada es correcta, pero si comparamos con la obtenida en el tutorial anterior preguntando a ChatGPT directamente vemos que es distinta. No tiene mayor importancia, pero nos plantea la duda de por qué genera distintos resultados ante el mismo input:

Vamos un paso más allá y le pedimos el número de vehículos posteriores a 2015 por ciudad y color, y para cada registro conocer el año más antiguo de un vehículo de ese color en cualquier ciudad:

En este caso la consulta no es correcta, por un lado está obteniendo el máximo del año cuando debe buscar el año más antiguo y por otro está restringiendo la consulta del año a los resultados filtrados (year > 2015) y agrupados (por ciudad y color). Realizamos varios intentos formulando la petición de diversos modos, pero en ninguno de ellos ha sido capaz de generar la consulta correcta, algo que sí había hecho ChatGPT al consultarle preguntarle a través de prompt. Esto nos hace pensar que el plugin de DBeaver no envía suficiente contexto al API de ChatGPT. La consulta correcta generada en el tutorial anterior es:

6.3 Consulta más compleja

Por último vamos a pedirle que nos genere una consulta más compleja donde queremos obtener por cada año entre el más antiguo y moderno de los años de los vehículos, el número de vehículos agrupados por color que existen en cada ciudad, excluyendo aquellas ciudades que no tengan vehículos para ese año.

Esta consulta es correcta, pero si la comparamos con la del tutorial anterior tiene múltiples diferencias. Al trabajar con el prompt parece que hace un parseo del texto de entrada y lo interpreta de forma lineal, en primer lugar obtiene los años entre el más antiguo y más moderno, a continuación obtiene el número de vehículos por ciudad, año y color y finalmente cruza todos esos datos:

7. Debug consultas a ChatGPT

El plugin de ChatGPT para DBeaver permite activar un modo debug para generar log con las llamadas que se realizan al API de ChatGPT. Activarlo es tan sencillo como marcar la casilla Write GPT queries to debug log en la pantalla de configuración del plugin.

DBeaver activar debug ChatGPT

Para acceder a los ficheros de logs debemos acceder a las siguientes rutas en función de nuestro sistema operativo, tal como se indica en https://dbeaver.com/docs/wiki/Log-files/:

  • En Windows %APPDATA%DBeaverDataworkspace6.metadata
  • En Linux $XDG_DATA_HOME/DBeaverData/workspace6/.metadata
  • En MacOS open path ~/Library/DBeaverData/workspace6/.metadata

Visualizamos el contenido del fichero dbeaver-debug.log

Vemos que el plugin diversa información al API de ChatGPT:

  • PostgreSQL (es el motor de base de datos que ChatGPT debe utilizar)
  • Nombre de las tablas existente en el esquema y para cada una de ellas el nombre de sus campos, pero NO envía información alguna sobre foreigns, índices, tipos de datos… En la versión de pago de DBeaver sí permite configurar el envío de estos datos.
  • Nombre del esquema de trabajo
  • Texto con el que solicitamos la consulta

En nuestro tutorial donde trabajabamos directamente con el promt de ChatGPT le dábamos como contexto un DDL con la definición completa de las tablas de base de datos, el plugin de DBeaver envía datos con mucha menos definición, de ahí vienen las diferencias que hemos visto a la hora de generar determinadas consultas en los ejemplos anterior y la imposibilidad de generar correctamente una de ellas.

8. Conclusiones

Esta primera versión del plugin no es tan eficiente como el uso de ChatGPT directamente a través de su promt, pero puede ser de gran ayuda para la generación de consultas, especialmente para gente con conocimientos técnicos. A la vista de las pruebas realizadas, las consultas devueltas por el plugin no deben ser tomadas como correctas al 100%, sino que es necesario que alguien con conocimientos de SQL las revise y las adapte si es necesario (obtenemos una mejora de productividad al disponer de una consulta de partida).

Entendemos que el uso del API de ChatGPT tiene limitaciones en cuanto al tamaño del input, de ahí que la información que envía el plugin no sea un DDL de la base de datos, penalizando la efectividad de la herramienta. Imaginamos que a medida que ChatGPT evolucione, estos detalles mejoren y la experiencia de usuario sea más satisfactoria.

Debemos recordar que el uso de este plugin no es gratuito y necesitamos de saldo en nuestra cuenta de OpenAI, por las pruebas realizadas el consumo es mínimo, pero es un detalle a tener en cuenta si pretendemos integrar el plugin en el día a día de un departamento de desarrollo.

Dejar respuesta

Please enter your comment!
Please enter your name here