Share via


Generare incorporamenti vettoriali con Azure OpenAI in Database di Azure per PostgreSQL - Server flessibile

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

Richiamare incorporamenti di Azure OpenAI facilmente per ottenere una rappresentazione vettoriale dell'input, che è quindi possibile usare in ricerche di somiglianza vettoriale e utilizzata dai modelli di Machine Learning.

Prerequisiti

  1. Abilitare e configurare l'azure_aiestensione.
  2. Creare un account OpenAI e richiedere l'accesso al servizio Azure OpenAI.
  3. Concedere l'accesso ad Azure OpenAI nella sottoscrizione desiderata.
  4. Concedere le autorizzazioni di accesso per creare risorse Azure OpenAI e distribuire modelli.
  5. Creare e distribuire una risorsa del servizio Azure OpenAI e un modello, ad esempio distribuire il modello di incorporamento text-embedding-ada-002. Copiare il nome della distribuzione in base alle esigenze per creare incorporamenti.

Configurare l'endpoint e la chiave OpenAI

Nella risorsa Azure OpenAI, in Gestione risorse>Chiavi ed endpoint è possibile trovare l'endpoint e le chiavi per la risorsa Azure OpenAI. Per richiamare la distribuzione del modello, abilitare l'estensione usando l'endpoint azure_ai e una delle chiavi.

select azure_ai.set_setting('azure_openai.endpoint', 'https://<endpoint>.openai.azure.com'); 
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>'); 

azure_openai.create_embeddings

Richiama l'API Azure OpenAI per creare incorporamenti usando la distribuzione fornita sull'input specificato.

azure_openai.create_embeddings(deployment_name text, input text, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)
azure_openai.create_embeddings(deployment_name text, input text[], batch_size integer DEFAULT 100, timeout_ms integer DEFAULT 3600000, throw_on_error boolean DEFAULT true, max_attempts integer DEFAULT 1, retry_delay_ms integer DEFAULT 1000)

Argomenti

deployment_name

text nome della distribuzione in Azure OpenAI Studio che contiene il modello.

input

text o text[] singolo testo o array di testi, a seconda dell'overload della funzione usata, per cui vengono creati gli incorporamenti.

dimensions

integer DEFAULT NULL: numero di dimensioni che devono essere presenti gli incorporamenti di output risultanti. Supportato solo nei modelli text-embedding-3 e versioni successive. Disponibile nelle versioni 1.1.0 e successive dell'estensione azure_ai

batch_size

integer DEFAULT 100 numero di record da elaborare alla volta (disponibile solo per l'overload della funzione per cui il parametro input è di tipo text[]).

timeout_ms

integer DEFAULT 3600000 timeout in millisecondi dopo il quale l'operazione viene arrestata.

throw_on_error

boolean DEFAULT true in caso di errore, la funzione genera un'eccezione che genera un rollback delle transazioni di wrapping.

max_attempts

integer DEFAULT 1 numero di tentativi di creazione dell'incorporamento di Azure OpenAI se l'estensione ha esito negativo con un errore reversibile.

retry_delay_ms

integer DEFAULT 1000 periodo di tempo (in millisecondi) di attesa dell'estensione prima di chiamare di nuovo l'endpoint di Azure OpenAI per la creazione dell'incorporamento, quando ha esito negativo con qualsiasi errore reversibile.

Tipo restituito

real[] o TABLE(embedding real[]) un singolo elemento o una tabella a colonna singola, a seconda dell'overload della funzione utilizzata, con rappresentazioni vettoriali del testo di input, quando elaborate dalla distribuzione selezionata.

Usare OpenAI per creare incorporamenti e archiviarli in un tipo di dati vettoriale

-- Create tables and populate data
DROP TABLE IF EXISTS conference_session_embeddings;
DROP TABLE IF EXISTS conference_sessions;

CREATE TABLE conference_sessions(
  session_id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  title text,
  session_abstract text,
  duration_minutes integer,
  publish_date timestamp
);

-- Create a table to store embeddings with a vector column.
CREATE TABLE conference_session_embeddings(
  session_id integer NOT NULL REFERENCES conference_sessions(session_id),
  session_embedding vector(1536)
);

-- Insert a row into the sessions table
INSERT INTO conference_sessions
    (title,session_abstract,duration_minutes,publish_date) 
VALUES
    ('Gen AI with Azure Database for PostgreSQL flexible server'
    ,'Learn about building intelligent applications with azure_ai extension and pg_vector' 
    , 60, current_timestamp)
    ,('Deep Dive: PostgreSQL database storage engine internals'
    ,' We will dig deep into storage internals'
    , 30, current_timestamp)
    ;

-- Get an embedding for the Session Abstract
SELECT
     pg_typeof(azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)) as embedding_data_type
    ,azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract)
  FROM
    conference_sessions c LIMIT 10;

-- Insert embeddings 
INSERT INTO conference_session_embeddings
    (session_id, session_embedding)
SELECT
    c.session_id, (azure_openai.create_embeddings('text-embedding-ada-002', c.session_abstract))
FROM
    conference_sessions as c  
LEFT OUTER JOIN
    conference_session_embeddings e ON e.session_id = c.session_id
WHERE
    e.session_id IS NULL;

-- Create a HNSW index
CREATE INDEX ON conference_session_embeddings USING hnsw (session_embedding vector_ip_ops);


-- Retrieve top similarity match
SELECT
    c.*
FROM
    conference_session_embeddings e
INNER JOIN
    conference_sessions c ON c.session_id = e.session_id
ORDER BY
    e.session_embedding <#> azure_openai.create_embeddings('text-embedding-ada-002', 'Session to learn about building chatbots')::vector
LIMIT 1;

Passaggi successivi