Creare incorporamenti con l'estensione Azure per intelligenza artificiale

Completato

Per eseguire una ricerca semantica, è necessario confrontare l'incorporamento della query con gli incorporamenti degli elementi ricercati. L'estensione azure_ai per Database di Azure per PostgreSQL - Server flessibile si integra con Azure OpenAI per generare vettori di incorporamento.

Diagramma che mostra il testo di input

Introduzione su azure_ai e Azure OpenAI

L'estensione flessibile di Database di Azure per PostgreSQL per Intelligenza artificiale di Azure offre funzioni definite dall'utente per l'integrazione con Microsoft Foundry, tra cui Azure OpenAI e Ricerca di intelligenza artificiale di Azure.

L'API Incorporamenti OpenAI di Azure genera un vettore di incorporamento del testo di input. Usare questa API per impostare gli incorporamenti per tutti gli elementi in cui viene eseguita la ricerca. Lo schema azure_aidell'estensioneazure_openai semplifica la chiamata all'API da SQL per generare incorporamenti, sia per inizializzare incorporamenti di elementi o creare una query incorporata in tempo reale. Questi incorporamenti possono quindi essere usati per eseguire ricerche di somiglianza vettoriale, o in altre parole, la ricerca semantica.

Uso dell'estensione azure_ai con Azure OpenAI

Per chiamare l'API Incorporamenti OpenAI di Azure da PostgreSQL, è necessario abilitare e configurare l'estensione, concedere l'accesso azure_ai ad Azure OpenAI e distribuire un modello OpenAI di Azure. Per ulteriori informazioni, consultare la documentazione di Azure OpenAI su Azure Database per PostgreSQL Flexible Server.

Quando l'ambiente è pronto e l'estensione è consentita, eseguire questo codice SQL:

/* Enable the extension. */
CREATE EXTENSION azure_ai;

È anche necessario configurare l'endpoint e la chiave di accesso della risorsa del servizio OpenAI:

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

Dopo aver configurato azure_ai e Azure OpenAI, il recupero e l'archiviazione degli embedding è semplicemente una questione di chiamare una funzione nella query SQL. Supponendo che ci sia una tabella listings con una colonna description e una colonna listing_vector, è possibile generare e archiviare l'embedding per tutte le voci con la query seguente. Sostituire {your-deployment-name} con il nome della distribuzione di Azure OpenAI Studio per il modello creato.

UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;

La listing_vector colonna vettoriale deve avere lo stesso numero di dimensioni ottenute dal modello linguistico.

Per visualizzare un documento di incorporamento, eseguire la query seguente:

SELECT listing_vector FROM listings LIMIT 1;

Il risultato è un vettore di numeri a virgola mobile. È possibile eseguire prima di tutto \x per rendere l'output più leggibile.

Generare un incorporamento di query in modo dinamico

Dopo aver incorporato i documenti da cercare, è possibile eseguire una query di ricerca semantica. A tal fine, è anche necessario generare un embedding per il testo della query.

Lo azure_openai schema dell'estensione azure_ai consente di generare incorporamenti all'interno di SQL. Ad esempio, per trovare i primi tre elenchi il cui testo è più semanticamente simile alla query "Trovami luoghi in un quartiere a piedi", eseguire il codice SQL seguente:

SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;

L'operatore <=> calcola la distanza del coseno tra i due vettori, la metrica di somiglianza semantica. Più vicini i vettori, più semanticamente simili; più altri vettori, più semanticamente diversi.

L'operatore ::vector converte gli incorporamenti generati in matrici di vettori PostgreSQL.

La query restituisce i primi tre ID e descrizioni dell'elenco, classificati da meno a più diversi (più o meno simili).