Sdílet prostřednictvím


Generování vektorových vkládání pomocí Azure OpenAI ve službě Azure Database for PostgreSQL

Vyvolejte vkládání Azure OpenAI snadno, abyste získali vektorové znázornění vstupu, které je možné použít při vyhledávání vektorové podobnosti a spotřebovávaných modely strojového učení.

Požadavky

  1. Povolte a nakonfigurujteazure_ai rozšíření.
  2. Vytvořte účet OpenAI a požádejte o přístup ke službě Azure OpenAI.
  3. V požadovaném předplatném udělte přístup k Azure OpenAI.
  4. Udělte oprávnění k vytváření prostředků Azure OpenAI a nasazení modelů.
  5. Vytvořte a nasaďte prostředek služby Azure OpenAI a model, například nasaďte vložení modelu text-embedding-ada-002. Zkopírujte název nasazení, protože je potřeba k vytvoření vkládání.

Konfigurace koncového bodu OpenAI a klíče

V prostředku Azure OpenAI v části Klíče správy>prostředků a koncové body najdete koncový bod a klíče pro prostředek Azure OpenAI. Pokud chcete vyvolat nasazení modelu, povolte azure_ai rozšíření pomocí koncového bodu a jednoho z klíčů.

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

Vyvolá rozhraní API Azure OpenAI, které vytvoří vkládání pomocí zadaného nasazení přes daný vstup.

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)

Argumenty

deployment_name

text název nasazení v nástroji Azure OpenAI Studio, který tento model obsahuje.

input

text nebo text[] jeden text nebo pole textu v závislosti na přetížení použité funkce, pro kterou se vytvářejí vkládání.

dimensions

integer DEFAULT NULL Početdimenzích Podporuje se pouze v modelech pro vkládání textu 3 a novějších. Dostupné ve verzích 1.1.0 a novějších rozšířeních azure_ai

batch_size

integer DEFAULT 100 počet záznamů, které se mají zpracovat najednou (k dispozici pouze pro přetížení funkce, pro kterou je parametr input typu text[]).

timeout_ms

integer DEFAULT 3600000 časový limit v milisekundách, po kterém je operace zastavena.

throw_on_error

boolean DEFAULT true při chybě by funkce vyvolala výjimku, která vede k vrácení zpět obtékání transakcí.

max_attempts

integer DEFAULT 1 kolikrát rozšíření opakuje vytváření vkládání Azure OpenAI, pokud selže s jakoukoli chybou opakovatelnou.

retry_delay_ms

integer DEFAULT 1000 doba (milisekundy), po kterou rozšíření čeká před opětovným voláním koncového bodu Azure OpenAI pro vytvoření vložení, když selže s jakoukoli chybou opakovatelnou.

Návratový typ

real[] nebo TABLE(embedding real[]) jeden prvek nebo jednosloupcovou tabulku v závislosti na přetížení použité funkce s vektorovou reprezentací vstupního textu při zpracování vybraným nasazením.

Použití OpenAI k vytvoření vložených objektů a jejich uložení do datového typu vektoru

-- 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 DiskANN index
CREATE INDEX ON conference_session_embeddings USING diskann (session_embedding vector_cosine_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;