Delen via


Vector embeddings genereren met Azure OpenAI in Azure Database for PostgreSQL - Flexible Server

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

Roep Azure OpenAI-insluitingen eenvoudig aan om een vectorweergave van de invoer te krijgen, die vervolgens kan worden gebruikt in vector-overeenkomsten en die worden gebruikt door machine learning-modellen.

Vereisten

  1. Schakel de extensie in en configureer deze azure_ai .
  2. Maak een OpenAI-account en vraag toegang tot de Azure OpenAI-service aan.
  3. Ververleent toegang tot Azure OpenAI in het gewenste abonnement.
  4. Verken machtigingen om Azure OpenAI-resources te maken en modellen te implementeren.
  5. Maak en implementeer een Azure OpenAI-serviceresource en een model, bijvoorbeeld het insluitmodel text-embedding-ada-002. Kopieer de naam van de implementatie omdat deze nodig is om insluitingen te maken.

OpenAI-eindpunt en -sleutel configureren

In de Azure OpenAI-resource vindt u onder Resourcebeheersleutels>en -eindpunten het eindpunt en de sleutels voor uw Azure OpenAI-resource. Als u de modelimplementatie wilt aanroepen, schakelt u de azure_ai extensie in met behulp van het eindpunt en een van de sleutels.

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

Roept de Azure OpenAI-API aan om insluitingen te maken met behulp van de opgegeven implementatie via de opgegeven invoer.

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)

Argumenten

deployment_name

text naam van de implementatie in Azure OpenAI Studio die het model bevat.

input

text of text[] één tekst of matrix van teksten, afhankelijk van de overbelasting van de gebruikte functie, waarvoor insluitingen worden gemaakt.

dimensions

integer DEFAULT NULL Het aantal dimensies dat de resulterende uitvoer-insluitingen moeten hebben. Alleen ondersteund in modellen met tekst insluiten-3 en hoger. Beschikbaar in versie 1.1.0 en hoger van de azure_ai-extensie

batch_size

integer DEFAULT 100 aantal records dat tegelijk moet worden verwerkt (alleen beschikbaar voor de overbelasting van de functie waarvoor de parameter input van het type text[]is).

timeout_ms

integer DEFAULT 3600000 time-out in milliseconden waarna de bewerking is gestopt.

throw_on_error

boolean DEFAULT true bij fout moet de functie een uitzondering genereren die resulteert in een terugdraaiactie van teruglooptransacties.

max_attempts

integer DEFAULT 1 aantal keren dat de extensie het maken van het insluiten van Azure OpenAI opnieuw probeert uit te voeren als deze mislukt met een fout die opnieuw kan worden geprobeerd.

retry_delay_ms

integer DEFAULT 1000 de hoeveelheid tijd (milliseconden) die de extensie wacht voordat het Azure OpenAI-eindpunt opnieuw wordt aangeroepen voor het maken van het insluiten, wanneer deze mislukt met een fout die opnieuw kan worden geprobeerd.

Retourtype

real[] of TABLE(embedding real[]) één element of een tabel met één kolom, afhankelijk van de overbelasting van de gebruikte functie, met vectorweergaven van de invoertekst, wanneer deze wordt verwerkt door de geselecteerde implementatie.

OpenAI gebruiken om insluitingen te maken en op te slaan in een vectorgegevenstype

-- 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;

Volgende stappen