Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 di 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. Usando l'estensione azure_ai , è possibile usare le funzionalità di intelligenza artificiale generative per l'elaborazione di query in linguaggio naturale direttamente dal database.
Questo articolo illustra l'aggiunta di funzionalità avanzate di intelligenza artificiale a un'istanza del server flessibile di Database di Azure per PostgreSQL usando l'estensione azure_ai . Illustra come integrare sia Azure OpenAI che il servizio Azure AI Language nel database usando l'estensione .
Prerequisiti
Una sottoscrizione di Azure. Creane uno gratis.
Accesso concesso ad Azure OpenAI nella sottoscrizione di Azure desiderata. Attualmente, l'applicazione concede l'accesso a questo servizio. È possibile richiedere l'accesso ad Azure OpenAI completando il modulo in Accesso limitato per il servizio Azure OpenAI.
Una risorsa OpenAI di Azure con il
text-embedding-ada-002modello (versione 2) distribuito. 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.Risorsa di Lingua di Azure AI. Se non si ha una risorsa lingua, è possibile crearne una nel portale di Azure seguendo le istruzioni fornite nella guida introduttiva 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 flessibile di Azure Database per PostgreSQL nella tua sottoscrizione Azure. Se questa risorsa non è disponibile, vedere Creare un database di Azure per PostgreSQL.
Connettersi al database usando psql in Azure Cloud Shell
Aprire Azure Cloud Shell in un Web browser. Selezionare Bash come ambiente. Se richiesto, selezionare la sottoscrizione usata per il database di Database di Azure per PostgreSQL e quindi selezionare Crea archiviazione.
Per recuperare i dettagli della connessione al database:
Nel portale Azure, vai all'istanza server flessibile di Database di Azure per PostgreSQL.
Nel menu a sinistra, in Impostazioni, selezionare Connetti. Copiare il blocco Dettagli connessione.
Incollare le righe di dichiarazione copiate per le variabili di ambiente nel terminale di Azure Cloud Shell. Sostituire il
{your-password}token con la password impostata al momento della 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 utilizzando lo strumento da riga di comando psql. Immettere il comando seguente al prompt:
psql
Installare l'estensione azure_ai
È possibile usare l'estensione azure_ai per integrare Azure OpenAI e Servizi cognitivi di Azure nel database. Per altre informazioni, vedere Generare incorporamenti vettoriali con Azure OpenAI in Database di Azure per PostgreSQL.
Per abilitare l'estensione nel database:
Aggiungere l'estensione all'elenco consenti, come descritto in Consenti estensioni.
Nel database in cui si prevede di usare l'estensione installare l'estensione
azure_aicome descritto in Creare estensioni.
Esaminare gli oggetti 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 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. Nella tabella seguente vengono descritti gli schemi aggiunti dall'estensione:
| Diagramma | Descrizione |
|---|---|
azure_ai |
Fornisce lo schema principale in cui risiedono la tabella di configurazione e le funzioni definite dall'utente (UDF) 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. Specificare 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.*
Usare la azure_ai.set_setting() funzione per 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 di Azure supportato, ad esempio https://example.openai.azure.com. |
azure_openai.subscription_key |
Una chiave di sottoscrizione per una risorsa OpenAI di Azure. |
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 con 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 tutti gli utenti amministratori hanno il ruolo azure_ai_settings_manager.
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. Queste rappresentazioni possono quindi essere usate nelle ricerche di somiglianza vettoriale e utilizzate 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, in modo che gli algoritmi possano identificare i modelli ed eseguire stime accurate.
Impostare l'endpoint e la chiave OpenAI di Azure
Prima di usare le azure_openai funzioni, configurare l'estensione con l'endpoint e la chiave del servizio OpenAI di Azure:
Nel portale di Azure passare alla risorsa OpenAI di Azure. Nel menu a sinistra, in Gestione risorse selezionare Chiavi ed endpoint.
Copiare l'endpoint e la chiave di accesso. È possibile usare
KEY1oKEY2. Avere sempre due chiavi consente di ruotare e rigenerare in modo sicuro le chiavi senza causare interruzioni del servizio.Nel comando seguente sostituire i
{endpoint}token e{api-key}con i valori recuperati dal portale di Azure. Esegui quindi i comandi dal prompt dei comandipsqlper 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
Questo articolo usa un piccolo subset del set di dati BillSum per fornire dati di testo di esempio per la generazione di vettori. Questo set di dati fornisce un elenco di fatture statali statunitensi e statali californiane. È possibile scaricare il bill_sum_data.csv file che contiene questi dati dal repository GitHub per gli 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 prompt dei comandi psql, carica i dati di esempio dal file CSV nella bill_summaries tabella. Specificare 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
È possibile usare l'estensione azure_ai per generare incorporamenti per il testo di input. Per consentire l'archiviazione dei vettori generati insieme al resto dei dati nel database, è necessario installare l'estensione pgvector . Seguire le indicazioni nella documentazione sull'abilitazione del supporto vettoriale nel database.
Con il supporto vettoriale 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 1.536 dimensioni, 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 azure_openai.create_embeddings() funzione , si creano vettori per il bill_text campo e li si inserisce nella colonna appena creata bill_vector nella bill_summaries tabella.
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 nel portale di Azure AI Foundry che contiene il text-embeddings-ada-002 modello. |
|
input |
text |
Testo di input usato per creare incorporamenti. | |
timeout_ms |
integer |
3600000 |
Timeout espresso 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 è il valore deployment_name, assegnato durante la distribuzione del modello di incorporamento nell'account Azure OpenAI. Per recuperare questo valore:
Passare alla risorsa Azure OpenAI nel portale di Azure.
Nel menu a sinistra, in Gestione risorse selezionare Distribuzioni di modelli per aprire il portale di Azure AI Foundry.
Nel portale di Azure AI Foundry selezionare Distribuzioni. Nel riquadro Distribuzioni copiare il valore Nome distribuzione associato alla distribuzione del
text-embedding-ada-002modello.
Usando queste informazioni, eseguire una query per aggiornare ogni record nella bill_summaries tabella. Inserire 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 dal riquadro Distribuzioni del portale di Azure AI Foundry. Poi eseguire quindi 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 embedding è un vettore di numeri a virgola mobile. La distanza tra due incorporamenti nello spazio vettoriale è correlata alla somiglianza semantica tra due input nel formato originale.
Eseguire una ricerca di somiglianza vettoriale
La somiglianza vettoriale è un metodo per misurare la somiglianza di due elementi rappresentandoli come vettori. I vettori sono costituiti da una serie di numeri e vengono spesso usati per eseguire ricerche tramite modelli linguistici di grandi dimensioni.
La somiglianza vettoriale viene comunemente calcolata tramite metriche di distanza, ad esempio:
- Distanza euclidea: misura la distanza di linea retta tra due vettori nello spazio n-dimensionale.
- Somiglianza del coseno: misura il coseno dell'angolo tra due vettori.
Consentire una ricerca più efficiente sul campo vector creando un indice per bill_summaries tramite la distanza coseno e HNSW (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);
Con tutti gli elementi ora disponibili, è possibile eseguire una query di ricerca di somiglianza coseno sul database.
Nella query seguente vengono generati gli embedding per una domanda di input e quindi convertiti in una matrice vettoriale (::vector). La matrice vettoriale consente di confrontare la domanda 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. Questo operatore rappresenta l'operatore di 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 a cui è possibile accedere 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 a cui è possibile accedere tramite l'estensione, vedere Integrare 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 azure_openai funzioni, per effettuare correttamente chiamate ai servizi di intelligenza artificiale di Azure usando l'estensione azure_ai, è necessario fornire l'endpoint e una chiave per la risorsa del servizio linguistico di Azure AI.
Nel portale di Azure passare alla risorsa del servizio linguistico.
Nel menu a sinistra, in Gestione risorse selezionare Chiavi ed endpoint.
Copiare l'endpoint e la chiave di accesso. È possibile usare
KEY1oKEY2.psqlNel prompt dei comandi eseguire i comandi seguenti per aggiungere i valori alla tabella di configurazione. Sostituire i{endpoint}token e{api-key}con i valori recuperati dal portale di Azure.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 , è possibile generare un riepilogo di ogni fattura. Lo azure_cognitive schema fornisce due funzioni per il riepilogo del testo:
-
summarize_abstractive: Il riepilogo astrattivo produce un riepilogo che include i concetti principali dal testo di input, ma potrebbe non usare parole identiche. -
summarize_extractive: riepilogo estrativo 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 da psql , questa volta per esaminare in modo specifico la azure_cognitive.summarize_abstractive funzione:
\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 |
|---|---|---|---|
text |
text |
Testo di input da riepilogare. | |
language |
text |
Rappresentazione ISO 639-1 di due lettere della lingua in cui viene scritto il testo di input. Per i valori consentiti, selezionare Supporto lingua per le funzionalità del linguaggio. | |
timeout_ms |
integer |
3600000 |
Timeout espresso 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. |
sentence_count |
integer |
3 |
Numero massimo di frasi da includere nel riepilogo generato. |
disable_service_logs |
boolean |
false |
Impostazione che disabilita i log del servizio di linguaggio. 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 le note sulla conformità e la privacy di Servizi cognitivi e i principi di intelligenza artificiale responsabile Microsoft. |
La summarize_abstractive funzione richiede gli argomenti seguenti: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).
La query seguente contro la tabella bill_summaries utilizza la funzione summarize_abstractive per generare un nuovo riepilogo di una frase per il testo di una proposta di legge. Consente di incorporare 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';
È anche possibile usare la funzione 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 è 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 è il risultato dell'impostazione di throw_on_error a false nella query precedente. Se il flag è stato lasciato all'impostazione predefinita di true, la query avrà esito negativo e non verrà scritto alcun riepilogo nel database. Per visualizzare il record che ha generato l'avviso, eseguire questo comando:
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
Congratulazioni! Si è appena appreso come usare l'estensione azure_ai per integrare modelli linguistici di grandi dimensioni e funzionalità di intelligenza artificiale generative nel database.
Contenuto correlato
- Consenti estensioni in Database di Azure per PostgreSQL
- Informazioni su come generare incorporamenti con il Servizio OpenAI di Azure
- Azure OpenAI nei modelli di Azure AI Foundry
- Informazioni sugli incorporamenti in Azure OpenAI nei modelli di Azure AI Foundry
- Cos'è Lingua di Azure AI?
- Che cos'è OpenAI di Azure nei modelli di Azure AI Foundry?