Cómo configurar un sistema NL2SQL con Azure OpenAI Studio

Cómo configurar un sistema NL2SQL utilizando Azure OpenAI Studio

Veremos cómo usar Azure OpenAI Studio para configurar un punto de conexión de inferencia al que podamos llamar para generar comandos SQL.

Este artículo es parte de un curso gratuito sobre Modelos de Lenguaje Amplio disponible en GitHub.

Creado por el Autor con Dall-E2

En el artículo anterior, aprendimos cómo configurar un indicador capaz de generar comandos SQL a partir de las solicitudes del usuario.

Ahora, veremos cómo usar Azure OpenAI Studio para crear un punto de conexión de inferencia al que podamos llamar para generar comandos SQL.

Aunque si estás leyendo estas líneas, probablemente ya cumplas con los requisitos, te recordaré que es necesario tener:

  • Necesitarás una suscripción a Azure, que es gratuita y viene con créditos gratuitos iniciales si te registras por primera vez. Crea una suscripción a Azure.
  • También necesitarás obtener acceso a los recursos de OpenAI. Actualmente, Microsoft ha reducido los requisitos y los tiempos de espera. El formulario de solicitud puede parecer más intimidante de lo que realmente es. Solicité acceso utilizando un correo electrónico de un dominio registrado y mencioné que quería información para un curso. Me concedieron acceso casi inmediatamente. Solicita acceso a Azure OpenAI Studio.

Es muy probable que la necesidad de solicitar acceso desaparezca pronto. Entonces, de todos modos intentaría, incluso si no has solicitado permiso.

Configuración de Azure OpenAI Studio.

Podemos acceder directamente desde el portal de Azure: https://portal.azure.com/#home

Una vez dentro, en servicios, necesitamos seleccionar Servicios de Azure AI.

Hacemos clic en Cuenta Azure OpenAI.

En esta pantalla, debemos elegir la Suscripción. Si tienes una suscripción de estudiante, es probable que no funcione. Crea una diferente.

Para el grupo de recursos, yo crearía uno nuevo. Puedes darle cualquier nombre que te guste. Es solo un agrupamiento lógico que mantiene todos los recursos bajo un mismo grupo. De esta manera, cuando elimines el grupo, eliminarás todos los recursos creados sin afectar a otros proyectos o grupos. Dado que este es solo un proyecto temporal, es una buena práctica eliminarlo al final para evitar incurrir en costos.

Para la Región, elegiría la más cercana a tu ubicación. Azure solo te mostrará las regiones donde están disponibles los Servicios de OpenAI.

Para el Nombre, elige un nombre único para tu proyecto.

Para el Nivel de precios, selecciona Estándar (S0). Esta es probablemente la única opción disponible para ti.

Con esto, puedes presionar el botón Revisar+Crear, verificar los datos y empezar a disfrutar del servicio.

La configuración tomará unos minutos para completarse y cuando esté lista, verás una pantalla similar a esta:

Haz clic en Ir a recurso.

Ahora, puedes crear una nueva implementación desde la sección Implementaciones de Modelo. Solo dale un nombre y elige el modelo: GPT-3.5-Turbo.

En tan solo unos segundos, Azure OpenAI Studio tendrá la implementación lista.

Solo haciendo clic en el nombre de la implementación podremos empezar a trabajar.

En la sección PlayGround, selecciona Chat y podrás empezar a ingresar tu indicación.

Hemos creado la indicación siguiendo el artículo ‘How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings.

create table employees(        ID_Usr INT primary key,        name VARCHAR);    /*3 filas de ejemplo    select * from employees limit 3;    ID_Usr    name    1344      George StPierre    2122      Jon jones    1265      Anderson Silva    */    create table salary(        ID_Usr INT,        year DATE,        salary FLOAT,        foreign key (ID_Usr) references employees(ID_Usr));    /*3 filas de ejemplo    select * from salary limit 3    ID_Usr    date          salary    1344      01/01/2023    61000    1344      01/01/2022    60000    1265      01/01/2023    55000    */    create table studies(        ID_study INT,        ID_Usr INT,        educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */        Institution VARCHAR,        Years DATE,        Speciality VARCHAR,        primary key (ID_study, ID_Usr),        foreign key(ID_Usr) references employees (ID_Usr));    /*3 filas de ejemplo    select * from studies limit 3    ID_Study ID_Usr educational_level Institution    Years       Speciality    2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    2334     1344   5                 MIT            01/01/2023  Phd. Data Science.    2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    */-Mantén el orden SQL simple y eficiente, utilizando SQL Lite válido, responde las siguientes preguntas para la tabla proporcionada arriba. Pregunta: ¿Cuántos empleados tenemos con un salario mayor a 50000?SELECT COUNT(*) AS total_empleadosFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;  Pregunta: Devuelve los nombres de las tres personas que han tenido el mayor aumento de salario en los últimos tres años.SELECT e.nameFROM employees eJOIN salary s ON e.ID_usr = s.ID_usrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;Pregunta: El nombre del empleado mejor pagado.

Esta es nuestra indicación completa. Necesitaremos dividirla en partes para colocar cada sección en su cuadro correspondiente.

En el cuadro de Mensaje del sistema, colocaremos la indicación completa excepto los ejemplos:

create table employees(        ID_Usr INT primary key,        name VARCHAR);    /*3 filas de ejemplo    select * from employees limit 3;    ID_Usr    name    1344      George StPierre    2122      Jon Jones    1265      Anderson Silva    */    create table salary(        ID_Usr INT,        year DATE,        salary FLOAT,        foreign key (ID_Usr) references employees(ID_Usr));    /*3 filas de ejemplo    select * from salary limit 3    ID_Usr    date          salary    1344      01/01/2023    61000    1344      01/01/2022    60000    1265      01/01/2023    55000    */    create table studies(        ID_study INT,        ID_Usr INT,        educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */        Institution VARCHAR,        Years DATE,        Speciality VARCHAR,        primary key (ID_study, ID_Usr),        foreign key(ID_Usr) references employees (ID_Usr));    /*3 filas de ejemplo    select * from studies limit 3    ID_Study ID_Usr educational_level Institution    Years       Speciality    2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    2334     1344   5                 MIT            01/01/2023  Phd. Data Science.    2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    */-Mantenga el orden SQL simple y eficiente, utilizando SQL Lite válido, responda las siguientes preguntas para la tabla proporcionada arriba.

En esta sección, proporcionamos la estructura de la base de datos, algunos ejemplos de su contenido y las instrucciones para que el modelo genere consultas SQL.

Ahora es el momento de llenar la sección Ejemplos con los ejemplos de nuestro enunciado. En el enunciado original, tenemos dos de ellos:

Pregunta: ¿Cuántos empleados tenemos con un salario mayor a 50000?SELECCIONAR COUNT(*) AS total_empleadosDE empleados eUNION JOIN salario s en e.ID_Usr = s.ID_UsrDONDE s.salario > 50000; Pregunta: Devolver los nombres de las tres personas que han tenido el mayor incremento salarial en los últimos tres años.SELECT e.nameDE empleados eUNION salario s en e.ID_usr = s.ID_UsrDONDE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDENAR POR (MAX(s.salario) - MIN(s.salario)) DESCLÍMITE 3;Pregunta: El nombre del empleado mejor remunerado.

Como puede ver, hemos creado un ejemplo para cada consulta. Esta técnica se conoce como few-shot sampling y permite que el modelo entienda cómo debe responder a las consultas de usuario.

El número óptimo de ejemplos generalmente oscila entre uno y seis; agregar más ejemplos puede no tener un impacto positivo significativo en la respuesta del modelo.

También podemos modificar la configuración de los hiperparámetros.

Para la generación de código, recomiendo usar una Temperatura de 0. No es necesario que el modelo sea excesivamente imaginativo con sus respuestas.

Es hora de empezar a jugar y probar el enunciado.

A partir de aquí, si nos gustan las respuestas, podemos hacer dos cosas:

  • Exportar la configuración. Guardará un archivo que podemos usar para reconfigurar el Playground.
  • Hacer clic en Ver Código y proporcionará un código de ejemplo para llamar a nuestro modelo.

Llamando a los servicios de Azure OpenAI desde un Notebook.

El notebook está disponible en el repositorio Large Language Models Course en Github.

Large-Language-Model-Notebooks-Course/P1-NL2SQL/NL2SQL_OpenAI_Azure.ipynb en main ·…

Curso práctico sobre Modelos de Lenguaje Amplio. . Contribuye a peremartra/Large-Language-Model-Notebooks-Course…

github.com

Comencemos instalando e importando la biblioteca OpenAI.

#Instalar openai !pip install -q "openai<1.0.0"import osimport openai

Ahora necesitamos configurar nuestro acceso a Azure.

#Configuración de Azureopenai.api_type = "azure"#Aquí el punto de inferencia que puedes obtener de Azureopenai.api_base = "https://openaicourseperemartra.openai.azure.com/"openai.api_version = "2023-07-01-preview"openai.api_key = "tu-clave-de-azure-openai"

Informar el prompt:

context = [ {'role':'system', 'content':"""create table employees(    ID_Usr INT primary key,    name VARCHAR);/* 3 filas de ejemploselect * from employees limit 3;ID_Usr    name1344      George StPierre2122      Jon jones1265      Anderson Silva*/create table salary(    ID_Usr INT,    year DATE,    salary FLOAT,    foreign key (ID_Usr) references employees(ID_Usr));/* 3 filas de ejemploselect * from salary limit 3ID_Usr    date          salary1344      01/01/2023    610001344      01/01/2022    600001265      01/01/2023    55000*/create table studies(    ID_study INT,    ID_Usr INT,    educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */    Institution VARCHAR,    Years DATE,    Speciality VARCHAR,    primary key (ID_study, ID_Usr),    foreign key(ID_Usr) references employees (ID_Usr));/* 3 filas de ejemploselect * from studies limit 3ID_Study ID_Usr educational_level Institution    Years       Speciality2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing2334     1344   5                 MIT            01/01/2023  Phd. Data Science.2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing*/-Mantenga la orden SQL simple y eficiente, utilizando SQL Lite válido, responda las siguientes preguntas para la tabla proporcionada anteriormente. Pregunta: ¿Cuántos empleados tenemos con un salario mayor a 50000?SELECT COUNT(*) AS total_empleadosFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;Pregunta: Devuelve los nombres de las tres personas que han tenido el mayor incremento salarial en los últimos tres años.SELECT e.nameFROM employees eJOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;"""} ]

Voy a crear una función para encapsular la llamada a la API de OpenAI.

#Función para llamar al modelo.def return_CCRMSQL(user_message, context):    newcontext = context.copy()    newcontext.append({'role':'user', 'content':"question: " + user_message})    response = openai.ChatCompletion.create(      engine="GPT3NL2SQLSample1Deployment", #Nuestra implementación      messages = newcontext,      temperature=0,      max_tokens=800)    return (response.choices[0].message["content"])

Ahora podemos proceder con las pruebas necesarias y obtener el código SQL para consultar nuestra base de datos:

context_user = context.copy()print(return_CCRMSQL("El nombre del empleado mejor pagado", context_user))

SELECT e.name FROM employees e JOIN salary s ON e.ID_usr = s.ID_usr WHERE s.salary = (SELECT MAX(salary) FROM salary); Esta consulta devolverá el nombre del empleado con el salario más alto.

print(return_CCRMSQL("Devuelve la institución con el salario promedio más alto", context_user))

SELECT st.Institution, AVG(sa.salary) AS avg_salary FROM studies st JOIN employees e ON st.ID_Usr = e.ID_Usr JOIN salary sa ON e.ID_Usr = sa.ID_Usr GROUP BY st.Institution ORDER BY avg_salary DESC LIMIT 1;

Conclusiones.

Cuando hayas determinado qué indicación utilizar, configurar los Servicios de Azure OpenAI y utilizar los modelos de OpenAI alojados en Azure en lugar de la API de OpenAI es una tarea sencilla.

La elección entre usar uno u otro depende de las decisiones de tu empresa. Los modelos de OpenAI utilizados a través de Azure Open Services no residen en OpenAI. En otras palabras, los datos que proporciones nunca saldrán de tu suscripción de Azure y nunca se utilizarán para entrenar modelos futuros de OpenAI.

Desde un punto de vista técnico, las diferencias son mínimas y la complejidad es prácticamente inexistente.

Recursos.

El curso completo sobre Modelos de Lenguaje Grandes está disponible en Github. Para mantenerse actualizado sobre nuevos artículos, considere seguir el repositorio o marcarlo como favorito. De esta manera, recibirás notificaciones cada vez que se agregue nuevo contenido.

GitHub – peremartra/Large-Language-Model-Notebooks-Course: Curso práctico sobre Modelos de Lenguaje Grandes…

Curso práctico sobre Modelos de Lenguaje Grandes. . Contribuye a peremartra/Large-Language-Model-Notebooks-Course…

github.com

La indicación utilizada en las soluciones se basa en el artículo “Cómo indicar LLMs para Text-to-SQL: Un estudio en entornos de cero, de un solo dominio y de dominios cruzados.

Este artículo es parte de una serie en la que exploramos las aplicaciones prácticas de los Modelos de Lenguaje Grandes. Puedes encontrar el resto de los artículos en la siguiente lista:

Pere Martra

Pere Martra

Curso Práctico de Modelos de Lenguaje Grandes

Ver lista12 historias

Escribo regularmente sobre Aprendizaje Profundo e Inteligencia Artificial. Considera seguirme en VoAGI para recibir actualizaciones sobre nuevos artículos. Y, por supuesto, eres bienvenido/a a conectarte conmigo en LinkedIn y en Twitter.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Este documento de IA presenta técnicas avanzadas para explicaciones detalladas de texto y visual en modelos de alineación de imágenes y texto.

Los modelos de alineación de texto e imagen tienen como objetivo establecer una conexión significativa entre el conte...

Noticias de Inteligencia Artificial

El mercado oculto de China para las poderosas tarjetas Nvidia de inteligencia artificial

En las bulliciosas calles del área de electrónica de Huaqiangbei en Shenzhen, ha surgido un mercado subterráneo de ch...

Inteligencia Artificial

La incorporación del smartphone podría aumentar la equidad racial en la detección neurológica

Un nuevo accesorio para teléfonos inteligentes podría ser utilizado para realizar pruebas neurológicas de bajo costo,...

Inteligencia Artificial

Deci presenta DeciCoder un modelo de lenguaje grande de código abierto con 1 billón de parámetros para generación de código.

En el mundo acelerado de la IA, la generación eficiente de código es un desafío que no se puede pasar por alto. Con l...