Come configurare un sistema NL2SQL con Azure OpenAI Studio
Configurazione di un sistema NL2SQL con Azure OpenAI Studio
Vedremo come utilizzare Azure OpenAI Studio per configurare un endpoint di inferenza che possiamo chiamare per generare comandi SQL.
Questo articolo fa parte di un corso su Large Language Models disponibile su GitHub.
Nell’articolo precedente, abbiamo imparato come configurare un prompt in grado di generare comandi SQL dalle richieste dell’utente.
Ora, vedremo come utilizzare Azure OpenAI Studio per creare un endpoint di inferenza che possiamo chiamare per generare comandi SQL.
Anche se stai leggendo queste righe, probabilmente soddisfi già i requisiti, ti ricordo che è necessario avere:
- Dietro la rivoluzione dell’AI Paige Bailey parla di Google PaLM 2 e altro
- Personalizzare compagni di codifica per organizzazioni
- I ricercatori di Meta & GeorgiaTech hanno pubblicato un nuovo set di dati e modelli di intelligenza artificiale associati per accelerare la ricerca sulla cattura diretta dell’aria al fine di contrastare i cambiamenti climatici.
- È necessario un abbonamento Azure, che è gratuito e viene fornito con crediti gratuiti iniziali se ti registri per la prima volta. Crea un abbonamento Azure.
- È anche necessario ottenere accesso alle risorse OpenAI. Attualmente, Microsoft ha ridotto i requisiti e i tempi di attesa. Il modulo di richiesta potrebbe sembrare più intimidatorio di quanto sia in realtà. Ho richiesto l’accesso utilizzando un’email da un dominio registrato e ho menzionato che volevo informazioni per un corso. Mi hanno concesso l’accesso quasi immediatamente. Richiedi l’accesso ad Azure OpenAI Studio.
È molto probabile che la necessità di richiedere l’accesso scompaia presto. Quindi, ti consiglierei comunque di provare, anche se non hai richiesto il permesso.
Configurazione di Azure OpenAI Studio.
Possiamo accedervi direttamente dal portale di Azure: https://portal.azure.com/#home
Una volta all’interno, nei servizi, è necessario selezionare Azure AI Services.
Facciamo clic su Azure OpenAI Account.
In questa schermata, è necessario scegliere la Sottoscrizione. Se hai una sottoscrizione per studenti, è probabile che non funzioni. Crea una diversa.
Per il gruppo di risorse, ne creerei uno nuovo. Puoi dargli qualsiasi nome tu voglia. È solo un raggruppamento logico che mantiene tutte le risorse sotto un unico gruppo. In questo modo, quando elimini il gruppo, rimuovi tutte le risorse create senza influire su altri progetti o gruppi. Poiché si tratta solo di un progetto temporaneo, è una buona pratica eliminarlo alla fine per evitare costi.
Per la Regione, scegli quella più vicina alla tua posizione. Azure ti mostrerà solo le regioni in cui sono disponibili i servizi OpenAI.
Per il Nome, scegli un nome unico per il tuo progetto.
Per il Livello di Prezzi, seleziona Standard S0. Questa è probabilmente l’unica opzione disponibile per te.
Con questo, puoi premere il pulsante Review+Create, verificare i dati e iniziare a goderti il servizio.
La configurazione richiederà alcuni minuti per completarsi e, una volta terminata, vedrai uno schermo simile a questo:
Clicca su Go to Resource.
Ora puoi creare una nuova distribuzione dalla sezione Model Deployments. Basta dargli un nome e scegliere il modello: GPT-3.5-Turbo.
In pochi secondi, Azure OpenAI Studio completerà la distribuzione.
Cliccando sul nome della distribuzione, possiamo iniziare a lavorare.
Nella sezione PlayGround, seleziona Chat e puoi iniziare a inserire il tuo prompt.
Abbiamo creato il prompt seguendo il paper ‘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 righe di esempio 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 righe di esempio 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 righe di esempio 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 */-Mantieni l'ordine SQL semplice ed efficiente, utilizzando SQL Lite valido, rispondi alle seguenti domande per la tabella fornita. Domanda: Quanti dipendenti abbiamo con uno stipendio superiore a 50000?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000; Domanda: Restituisci i nomi delle tre persone che hanno avuto l'aumento di stipendio più alto negli ultimi tre anni.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;Domanda: Il nome dell'impiegato con il salario più alto.
Questo è il nostro prompt completo. Dovremo dividerlo in parti per inserire ciascuna sezione nella sua casella corrispondente.
Nella casella del Messaggio di sistema, inseriremo l’intero prompt tranne gli esempi:
create table employees( ID_Usr INT primary key, name VARCHAR); /*3 righe di esempio 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 righe di esempio 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 righe di esempio select * from studies limit 3 ID_Study ID_Usr educational_level Institution Years Speciality 2782 1344 3 UC San Diego 01/01/2010 Laurea in Scienze del Marketing 2334 1344 5 MIT 01/01/2023 Dottorato in Data Science 2782 2122 3 UC San Diego 01/01/2010 Laurea in Scienze del Marketing */-Mantieni l'ordine SQL semplice ed efficiente, utilizzando SQL Lite valido, rispondi alle seguenti domande per la tabella fornita sopra.
In questa sezione, abbiamo fornito la struttura del database, alcuni esempi del suo contenuto e istruzioni per il modello per generare query SQL.
Ora è il momento di popolare la sezione Esempi con gli esempi della nostra richiesta. Nella richiesta originale, ne abbiamo due:
Domanda: Quanti dipendenti abbiamo con uno stipendio superiore a 50000?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000; Domanda: Restituire i nomi delle tre persone che hanno avuto il maggior aumento di stipendio negli ultimi tre anni.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;Domanda: Il nome del dipendente più pagato.
Come puoi vedere, abbiamo creato un esempio per ogni query. Questa tecnica è conosciuta come few-shot sampling e permette al modello di capire come dovrebbe rispondere alle query dell’utente.
Il numero ottimale di esempi va generalmente da uno a sei; aggiungere più esempi potrebbe non avere un impatto positivo significativo sulla risposta del modello.
Possiamo anche modificare le impostazioni degli iperparametri.
Per la generazione di codice, consiglio di utilizzare una temperatura di 0. Non c’è bisogno che il modello sia eccessivamente fantasioso nelle sue risposte.
È ora di iniziare a giocare e testare la richiesta.
Da qui, se ci piacciono le risposte, possiamo fare due cose:
- Esportare la configurazione. Salverà un file che possiamo utilizzare per riconfigurare il Playground.
- Cliccare su Vedi Codice, che fornirà un esempio di codice per chiamare il nostro modello.
Chiamare i servizi Azure OpenAI da un Notebook.
Il notebook è disponibile nel repository del corso Large Language Models Course su Github.
Large-Language-Model-Notebooks-Course/P1-NL2SQL/NL2SQL_OpenAI_Azure.ipynb su main ·…
Corso pratico sui grandi modelli di linguaggio. . Contribuisci a peremartra/Large-Language-Model-Notebooks-Course…
github.com
Iniziamo installando e importando la libreria OpenAI.
#Install openai !pip install -q "openai<1.0.0"import osimport openai
Ora dobbiamo configurare l’accesso ad Azure.
#Configurazione Azureopenai.api_type = "azure"#Qui il punto di inferenza che si può ottenere da Azureopenai.api_base = "https://openaicourseperemartra.openai.azure.com/"openai.api_version = "2023-07-01-preview"openai.api_key = "la-tua-chiave-azure-openai"
Informare il prompt:
context = [{'role':'system', 'content':"""create table employees( ID_Usr INT primary key, name VARCHAR);/* 3 righe di esempioselect * 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 righe di esempioselect * 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 righe di esempioselect * 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*/Mantenere l'ordinamento SQL semplice ed efficiente, utilizzando SQL Lite valido, rispondere alle seguenti domande per la tabella fornita. Domanda: Quanti dipendenti abbiamo con uno stipendio superiore a 50000?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;Question: Restituire i nomi delle tre persone che hanno avuto il più alto aumento di stipendio negli ultimi tre anni.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;"""}]
Sto per creare una funzione per incapsulare la chiamata all’API di OpenAI.
#Funzione per chiamare il modello.def return_CCRMSQL(user_message, context): newcontext = context.copy() newcontext.append({'role':'user', 'content':"question: " + user_message}) response = openai.ChatCompletion.create( engine="GPT3NL2SQLSample1Deployment", #La nostra distribuzione messages = newcontext, temperature=0, max_tokens=800) return (response.choices[0].message["content"])
Ora possiamo procedere con i test necessari e ottenere il codice SQL per interrogare il nostro database:
context_user = context.copy()print(return_CCRMSQL("Il nome del dipendente con il salario più alto", 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); Questa query restituirà il nome del dipendente con il salario più alto.
print(return_CCRMSQL("Restituisci l'istituzione con un salario medio più 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;
Conclusioni.
Una volta determinato quale prompt utilizzare, configurare i servizi Azure OpenAI e utilizzare i modelli OpenAI ospitati su Azure anziché l’API OpenAI è un compito semplice.
La scelta tra l’uso di uno o dell’altro dipende dalle decisioni della tua azienda. I modelli OpenAI utilizzati tramite Azure Open Services non risiedono all’interno di OpenAI. In altre parole, i dati forniti non lasciano mai la tua sottoscrizione di Azure e non verranno mai utilizzati per addestrare futuri modelli OpenAI.
Da un punto di vista tecnico, le differenze sono minime e la complessità è praticamente inesistente.
Risorse.
Il corso completo su Large Language Models è disponibile su Github. Per rimanere aggiornato su nuovi articoli, considera di seguire il repository o di dargli una stella. In questo modo riceverai notifiche ogni volta che viene aggiunto nuovo contenuto.
GitHub – peremartra/Large-Language-Model-Notebooks-Course: Corso pratico sui grandi modelli di linguaggio…
Corso pratico sui grandi modelli di linguaggio. . Contribuisci a peremartra/Large-Language-Model-Notebooks-Course…
github.com
Il prompt utilizzato nelle soluzioni si basa sul paper “How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings.“
Questo articolo fa parte di una serie in cui esploriamo le applicazioni pratiche dei grandi modelli di linguaggio. Puoi trovare il resto degli articoli nell’elenco seguente:
Corso pratico sui grandi modelli di linguaggio
Visualizza elenco12 storie
Scrivo regolarmente su Deep Learning e Intelligenza Artificiale. Considera seguirmi su VoAGI per ricevere aggiornamenti su nuovi articoli. E, naturalmente, sei il benvenuto a collegarti con me su LinkedIn e su Twitter.