Condividi tramite


Integrare le funzionalità di intelligenza artificiale di Azure nel server flessibile di Azure Database per PostgreSQL

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

L'estensione azure_ai aggiunge la possibilità di usare modelli di linguaggio di grandi dimensioni e creare applicazioni di intelligenza artificiale generative all'interno di un database server flessibile Database di Azure per PostgreSQL integrando la potenza dei servizi di intelligenza artificiale di Azure. L'intelligenza artificiale generativa è una forma di intelligenza artificiale in cui i LLM (modelli di linguaggio su larga scala) vengono addestrati per generare contenuti originali basati sull'input del linguaggio naturale. L'uso dell'estensione azure_ai consente di usare le funzionalità di elaborazione di query in linguaggio naturale dell'intelligenza artificiale generati direttamente dal database.

Questa esercitazione illustra l'aggiunta di funzionalità avanzate di intelligenza artificiale a un'istanza del server flessibile Database di Azure per PostgreSQL usando l'estensione azure_ai . Illustra l'integrazione sia di Azure OpenAI che del servizio Azure AI Language nel database usando l'estensione .

Prerequisiti

  • Una sottoscrizione di Azure: crearne una gratuitamente.

  • Accesso concesso ad Azure OpenAI nella sottoscrizione di Azure desiderata. Attualmente, l'accesso a questo servizio viene concesso dall'applicazione. È possibile richiedere l'accesso a OpenAI di Azure completando il modulo all'indirizzo https://aka.ms/oai/access.

  • Una risorsa Azure OpenAI con il modello versione 2 text-embedding-ada-002 implementato. Questo modello è attualmente disponibile solo in determinate aree. Se non si ha una risorsa, il processo di creazione di uno è documentato nella guida alla distribuzione delle risorse OpenAI di Azure.

  • Un servizio azure per il linguaggio di intelligenza artificiale. Se non si dispone di una risorsa, è possibile creare una risorsa linguistica nel portale di Azure seguendo le istruzioni fornite nel documento di avvio rapido per il riepilogo. È possibile usare il piano tariffario gratuito (Free F0) per provare il servizio e eseguire l'aggiornamento in un secondo momento a un livello a pagamento per la produzione.

  • Un'istanza di server flessibile di Azure Database per PostgreSQL nella tua sottoscrizione di Azure. Se non si ha una risorsa, vedere Creare un server flessibile di Database di Azure per PostgreSQL.

Connettiti al database usando psql nella shell di Azure Cloud

Aprire Azure Cloud Shell in un Web browser. Selezionare Bash come ambiente e, se richiesto, selezionare la sottoscrizione usata per il database del server flessibile Database di Azure per PostgreSQL e quindi selezionare Crea archiviazione.

Per recuperare i dettagli della connessione al database:

  1. Andare alla risorsa del server flessibile Database di Azure per PostgreSQL nel portale di Azure.

  2. Dal menu di navigazione a sinistra selezionare Connetti sotto Impostazioni e copiare il blocco Dettagli di connessione.

  3. Incollare le righe di dichiarazione delle variabili di ambiente copiate nel terminale di Azure Cloud Shell aperto in precedenza, sostituendo il {your-password} token con la password impostata durante la creazione del database.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    

    Connettiti al tuo database usando l'utilità della riga di comando psql digitando quanto segue al prompt.

    psql
    

Installare l'estensione azure_ai

Estensione Azure AI e OpenAI

L'estensione azure_ai consente di integrare Azure OpenAI e Servizi cognitivi di Azure nel database. Per abilitare l'estensione nel database, seguire questa procedura:

  1. Aggiungere l'estensione all'elenco consenti come descritto in Consenti estensioni.

  2. Nel database in cui si prevede di usare l'estensione azure_ai , installarlo come descritto in Creare estensioni

Esaminare gli oggetti contenuti nell'estensione azure_ai

La revisione degli oggetti contenuti nell'estensione azure_ai può fornire una migliore comprensione delle funzionalità offerte. È possibile usare il \dx meta-comando dal psql prompt dei comandi per elencare gli oggetti contenuti nell'estensione.

\dx+ azure_ai

L'output del meta-comando mostra che l'estensione azure_ai crea tre schemi, più funzioni definite dall'utente e diversi tipi compositi nel database. La tabella seguente elenca gli schemi aggiunti dall'estensione e descrive ognuno di essi.

Schema Descrizione
azure_ai Schema principale in cui risiedono la tabella di configurazione e le funzioni definite dall'utente per interagire con essa.
azure_openai Contiene le UDFs che consentono di chiamare un endpoint di Azure OpenAI.
azure_cognitive Fornisce funzioni definite dall'utente e tipi compositi correlati all'integrazione del database con Servizi cognitivi di Azure.

Le funzioni e i tipi sono tutti associati a uno degli schemi. Per esaminare le funzioni definite nello azure_ai schema, usare il \df meta-comando, specificando lo schema le cui funzioni devono essere visualizzate. I \x auto comandi prima del \df comando attivano e disattivano automaticamente la visualizzazione espansa per semplificare la visualizzazione dell'output del comando in Azure Cloud Shell.

\x auto
\df+ azure_ai.*

La azure_ai.set_setting() funzione consente di impostare l'endpoint e i valori critici per i servizi di intelligenza artificiale di Azure. Accetta una chiave e il valore da assegnare. La azure_ai.get_setting() funzione consente di recuperare i valori impostati con la set_setting() funzione . Accetta la chiave dell'impostazione da visualizzare. Per entrambi i metodi, la chiave deve essere una delle seguenti:

Chiave Descrizione
azure_openai.endpoint Endpoint OpenAI supportato , ad esempio https://example.openai.azure.com.
azure_openai.subscription_key Chiave di sottoscrizione per una risorsa OpenAI.
azure_cognitive.endpoint Endpoint di Servizi cognitivi supportato (ad esempio, https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Chiave di sottoscrizione per una risorsa di Servizi cognitivi.

Importante

Poiché le informazioni di connessione per i servizi di intelligenza artificiale di Azure, incluse le chiavi API, vengono archiviate in una tabella di configurazione nel database, l'estensione azure_ai definisce un ruolo denominato azure_ai_settings_manager per garantire che queste informazioni siano protette e accessibili solo agli utenti assegnati a tale ruolo. Questo ruolo consente la lettura e la scrittura di impostazioni correlate all'estensione. Solo gli utenti avanzati e i membri del ruolo azure_ai_settings_manager possono richiamare le funzioni azure_ai.get_setting() e azure_ai.set_setting(). In Database di Azure per PostgreSQL server flessibile, il ruolo azure_ai_settings_manager viene assegnato a tutti gli utenti amministratori.

Generare incorporamenti vettoriali con Azure OpenAI

Lo azure_ai schema dell'estensione azure_openai consente l'uso di Azure OpenAI per la creazione di incorporamenti vettoriali per i valori di testo. Usando questo schema, è possibile generare incorporamenti con Azure OpenAI direttamente dal database per creare rappresentazioni vettoriali del testo di input, che possono quindi essere usate nelle ricerche di somiglianza vettoriale e usate dai modelli di Machine Learning.

Gli incorporamenti sono una tecnica dell'uso di modelli di Machine Learning per valutare il livello di correlazione delle informazioni. Questa tecnica consente di identificare in modo efficiente le relazioni e le analogie tra i dati, consentendo agli algoritmi di identificare i modelli ed eseguire stime accurate.

Impostare l'endpoint e la chiave OpenAI di Azure

Prima di usare le azure_openai funzioni:

  1. Configurare l'estensione con l'endpoint del servizio Azure OpenAI e la chiave.

  2. Andare alla risorsa OpenAI di Azure nel portale di Azure e selezionare la voce Chiavi e endpoint in Gestione risorse nel menu a sinistra.

  3. Copiare l'endpoint e la chiave di accesso. È possibile usare KEY1 o KEY2. Avere sempre due chiavi consente di ruotare e rigenerare in modo sicuro le chiavi senza causare interruzioni del servizio.

Il comando seguente, sostituire i token {endpoint} e {api-key} con i valori recuperati dal portale di Azure, quindi eseguire i comandi dal prompt dei comandi psql per aggiungere i valori alla tabella di configurazione.

SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');

Verificare le impostazioni scritte nella tabella di configurazione:

SELECT azure_ai.get_setting('azure_openai.endpoint');
SELECT azure_ai.get_setting('azure_openai.subscription_key');

L'estensione azure_ai è ora connessa all'account OpenAI di Azure e pronta per generare incorporamenti vettoriali.

Popolare il database con i dati di esempio

Questa esercitazione utilizza un piccolo sottoinsieme del dataset BillSum, che fornisce un elenco di progetti di legge del Congresso degli Stati Uniti e dello stato della California, per fornire dati di testo di esempio per generare vettori. È possibile scaricare il file bill_sum_data.csv contenente questi dati dal repository GitHub degli esempi di Azure.

Per ospitare i dati di esempio nel database, creare una tabella denominata bill_summaries.

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

Usando il comando COPY di PostgreSQL dal psql prompt dei comandi, carica i dati di esempio dal file CSV nella bill_summaries tabella, specificando che la prima riga del file CSV è una riga di intestazione.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Abilitare il supporto vettoriale

L'estensione azure_ai consente di generare incorporamenti per il testo di input. Per abilitare l'archiviazione dei vettori generati insieme al resto dei dati nel database, è necessario installare l'estensione pgvector seguendo le indicazioni riportate nella documentazione relativa all'abilitazione del vettore nella documentazione del database .

Con il vettore supportato aggiunto al database, aggiungere una nuova colonna alla bill_summaries tabella usando il vector tipo di dati per archiviare gli incorporamenti all'interno della tabella. Il text-embedding-ada-002 modello produce vettori con dimensioni 1536, quindi è necessario specificare 1536 come dimensione vettoriale.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Generare e archiviare vettori

La tabella bill_summaries è ora pronta per archiviare gli incorporamenti. Usando la funzione azure_openai.create_embeddings(), si creano vettori per il campo bill_text e da inserire nella colonna appena creata bill_vector nella tabella bill_summaries.

Prima di usare la create_embeddings() funzione, eseguire il comando seguente per esaminarlo ed esaminare gli argomenti necessari:

\df+ azure_openai.*

La Argument data types proprietà nell'output del \df+ azure_openai.* comando rivela l'elenco di argomenti previsti dalla funzione.

Argomento Tipo Predefinito Descrizione
deployment_name text Nome della distribuzione in Azure OpenAI Studio che contiene il text-embeddings-ada-002 modello.
input text Testo di input usato per creare incorporamenti.
timeout_ms integer 3600000 Timeout in millisecondi dopo il quale l'operazione viene arrestata.
throw_on_error boolean true Flag che indica se, in caso di errore, la funzione deve generare un'eccezione con conseguente rollback delle transazioni di wrapping.

Il primo argomento è deployment_name, assegnato quando il modello di embedding è stato distribuito nell'account OpenAI di Azure. Per recuperare questo valore, vai alla risorsa OpenAI di Azure nel portale di Azure. Da qui, nel menu di navigazione a sinistra, in Gestione delle risorse, selezionare l'elemento Distribuzioni modello per aprire Azure OpenAI Studio. In Azure OpenAI Studio, sulla scheda Distribuzioni, copiare il valore del Nome del Deployment associato alla distribuzione del modello text-embedding-ada-002.

Screenshot delle distribuzioni di incorporamento per l'integrazione dell'intelligenza artificiale.

Usando queste informazioni, eseguire una query per aggiornare ogni record nella bill_summaries tabella, inserendo gli incorporamenti vettoriali generati per il bill_text campo nella bill_vector colonna usando la azure_openai.create_embeddings() funzione . Sostituire {your-deployment-name} con il valore Nome distribuzione copiato dalla scheda Distribuzioni di Azure OpenAI Studio e quindi eseguire il comando seguente:

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Eseguire la query seguente per visualizzare l'incorporamento generato per il primo record della tabella. È possibile eseguire \x prima se l'output è difficile da leggere.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Ogni incorporamento è un vettore di numeri a virgola mobile, in modo che la distanza tra due incorporamenti nello spazio vettoriale sia correlata alla somiglianza semantica tra due input nel formato originale.

La somiglianza vettoriale è un metodo usato per misurare il modo il grado di somiglianza tra due oggetti rappresentandoli come vettori, ovvero serie di numeri. I vettori vengono spesso usati per eseguire ricerche tramite LLMs. La somiglianza vettoriale viene in genere calcolata usando metriche di distanza, ad esempio distanza euclidea o somiglianza del coseno. La distanza euclidea misura la distanza retta tra due vettori nello spazio dimensionale n, mentre la somiglianza del coseno misura il coseno dell'angolo tra due vettori.

Per consentire una ricerca più efficiente sul campo vector creando un indice su bill_summaries utilizzando la distanza coseno e HNSW, abbreviazione di Hierarchical Navigable Small World. HNSW consente a pgvector di usare gli algoritmi basati su grafo più recenti per approssimare le query dei vicini più prossimi.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Ora che tutto è pronto, si può eseguire una query di ricerca similarità del coseno rispetto al database.

Nella query seguente vengono generati gli incorporamenti per una domanda di input e quindi viene eseguito il cast a una matrice vettoriale (::vector), che consente di confrontarlo con i vettori archiviati nella bill_summaries tabella.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

La query usa l'operatore <=>vector, che rappresenta l'operatore "distanza coseno" usato per calcolare la distanza tra due vettori in uno spazio multidimensionale.

Integrare Servizi cognitivi di Azure

Le integrazioni dei servizi di intelligenza artificiale di Azure incluse nello azure_cognitive schema dell'estensione azure_ai offrono un set completo di funzionalità del linguaggio di intelligenza artificiale accessibili direttamente dal database. Le funzionalità includono l'analisi del sentiment, il rilevamento della lingua, l'estrazione di frasi chiave, il riconoscimento delle entità e il riepilogo del testo. L'accesso a queste funzionalità è abilitato tramite il servizio Azure AI Language.

Per esaminare le funzionalità complete di Intelligenza artificiale di Azure accessibili tramite l'estensione, vedere Integrare il server flessibile di Database di Azure per PostgreSQL con Servizi cognitivi di Azure.

Impostare l'endpoint e la chiave del servizio linguistico di intelligenza artificiale di Azure

Come per le funzioni azure_openai, per effettuare correttamente chiamate ai servizi Azure AI utilizzando l'estensione azure_ai, è necessario fornire l'endpoint e una chiave per il servizio Linguaggio di Azure AI. Recupera questi valori passando alla tua risorsa del servizio linguistico nel portale di Azure, dal menu a sinistra, sotto Gestione risorse, seleziona l'elemento Chiavi ed endpoint. Copiare l'endpoint e la chiave di accesso. È possibile usare KEY1 o KEY2.

Nel comando seguente sostituisci i token {endpoint} e {api-key} con i valori ottenuti dal portale di Azure, poi esegui i comandi dal prompt dei comandi psql per aggiungere i tuoi valori alla tabella di configurazione.

SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');

Riepilogo delle fatture

Per illustrare alcune delle funzionalità delle azure_cognitive funzioni dell'estensione azure_ai , si genera un riepilogo di ogni fattura. Lo azure_cognitive schema fornisce due funzioni per il riepilogo del testo summarize_abstractive e summarize_extractive. Il riepilogo astrattivo produce un riepilogo che acquisisce i concetti principali dal testo di input, ma potrebbe non usare parole identiche. Il riepilogo estrattivo assembla un riepilogo estraendo frasi critiche dal testo di input.

Per usare la capacità del servizio Azure AI Language di generare contenuti nuovi e originali, usare la summarize_abstractive funzione per creare un riepilogo dell'input di testo. Usare di nuovo il \df meta-comando dipsql, questa volta per esaminare in modo specifico la funzione azure_cognitive.summarize_abstractive.

\df azure_cognitive.summarize_abstractive

La Argument data types proprietà nell'output del \df azure_cognitive.summarize_abstractive comando rivela l'elenco di argomenti previsti dalla funzione.

Argomento Tipo Predefinito Descrizione
testo text Testo di input da riepilogare.
lingua text Rappresentazione ISO 639-1 a due lettere della lingua in cui viene scritto il testo di input. Controllare il supporto della lingua per i valori consentiti.
timeout_ms integer 3600000 Intervallo di timeout in millisecondi trascorsi dopo il quale l'operazione viene arrestata.
throw_on_error boolean true Flag che indica se, in caso di errore, la funzione deve generare un'eccezione con conseguente rollback delle transazioni di wrapping.
sentence_count integer 3 Numero massimo di frasi da includere nel riepilogo generato.
disable_service_logs boolean false Il servizio lingua registra il testo di input per 48 ore esclusivamente per consentire la risoluzione dei problemi. L'impostazione di questa proprietà su true disabilita la registrazione dell'input e potrebbe limitare la possibilità di analizzare i problemi che si verificano. Per altre informazioni, vedere Note sulla conformità e la privacy di Servizi cognitivi all'indirizzo https://aka.ms/cs-compliance e sui principi di intelligenza artificiale responsabile Microsoft all'indirizzo https://www.microsoft.com/ai/responsible-ai.

La summarize_abstractive funzione richiede gli argomenti seguenti: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

La seguente query sulla tabella bill_summaries utilizza la funzione summarize_abstractive per generare un nuovo riepilogo in una frase per il testo di una fattura, permettendo di integrare la potenza dell'intelligenza artificiale generativa direttamente nelle query.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

La funzione può essere usata anche per scrivere dati nelle tabelle di database. Modificare la bill_summaries tabella per aggiungere una nuova colonna per archiviare i riepiloghi di una frase nel database.

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Aggiornare quindi la tabella con i riepiloghi. La summarize_abstractive funzione restituisce una matrice di testo (text[]). La array_to_string funzione converte il valore restituito nella relativa rappresentazione di stringa. Nella query seguente l'argomento throw_on_error è stato impostato su false. Questa impostazione consente al processo di riepilogo di continuare se si verifica un errore.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

Nell'output potrebbe essere visualizzato un avviso relativo a un documento non valido per il quale non è stato possibile generare un riepilogo appropriato. Questo avviso deriva dall'impostazione di throw_on_error a false nella query sopra indicata. Se tale flag fosse stato lasciato all'impostazione predefinita di true, la query ha esito negativo e non sarebbe stato scritto alcun riepilogo nel database. Per visualizzare il record che ha generato l'avviso, eseguire quanto segue:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

È quindi possibile eseguire una query sulla bill_summaries tabella per visualizzare i nuovi riepiloghi di una frase generati dall'estensione azure_ai per gli altri record nella tabella.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusione

Si è appena appreso come usare l'estensione azure_ai per integrare modelli linguistici di grandi dimensioni e funzionalità di intelligenza artificiale generative nel database.