Sdílet prostřednictvím


Generování vektorových vkládání pomocí Azure OpenAI na flexibilním serveru Azure Database for PostgreSQL

PLATÍ PRO: Flexibilní server 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 nakonfigurujte azure_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 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;

Další kroky