Udostępnij za pośrednictwem


Generowanie osadzania wektorów za pomocą usługi Azure OpenAI w usłudze Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Łatwo wywołaj osadzanie usługi Azure OpenAI, aby uzyskać wektorową reprezentację danych wejściowych, która może być używana w wyszukiwaniach podobieństwa wektorowego i używanych przez modele uczenia maszynowego.

Wymagania wstępne

  1. Włącz i skonfiguruj azure_ai rozszerzenie.
  2. Utwórz konto openAI i zażądaj dostępu do usługi Azure OpenAI Service.
  3. Udziel dostępu do usługi Azure OpenAI w żądanej subskrypcji.
  4. Udzielanie uprawnień do tworzenia zasobów usługi Azure OpenAI i wdrażania modeli.
  5. Utwórz i wdróż zasób usługi Azure OpenAI oraz model, na przykład wdróż model osadzania modelu text-embedding-ada-002. Skopiuj nazwę wdrożenia, ponieważ jest ona potrzebna do utworzenia osadzonych.

Konfigurowanie punktu końcowego i klucza interfejsu OpenAI

W zasobie Azure OpenAI w obszarze Klucze zarządzania>zasobami i punkty końcowe można znaleźć punkt końcowy i klucze dla zasobu usługi Azure OpenAI. Aby wywołać wdrożenie modelu, włącz azure_ai rozszerzenie przy użyciu punktu końcowego i jednego z kluczy.

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

Wywołuje interfejs API usługi Azure OpenAI, aby utworzyć osadzanie przy użyciu podanego wdrożenia w danym danych wejściowych.

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 nazwa wdrożenia w narzędziu Azure OpenAI Studio, który zawiera model.

input

text lub text[] pojedynczy tekst lub tablica tekstów, w zależności od przeciążenia używanej funkcji, dla której są tworzone osadzanie.

dimensions

integer DEFAULT NULL Liczba wymiarów, które powinny mieć wynikowe osadzanie danych wyjściowych. Obsługiwane tylko w modelach osadzania tekstu-3 i nowszych. Dostępne w wersjach 1.1.0 i nowszych rozszerzenia azure_ai

batch_size

integer DEFAULT 100 liczba rekordów do przetworzenia w danym momencie (dostępna tylko dla przeciążenia funkcji, dla której parametr input jest typu text[]).

timeout_ms

integer DEFAULT 3600000 limit czasu w milisekundach, po którym operacja jest zatrzymana.

throw_on_error

boolean DEFAULT true w przypadku błędu funkcja powinna zgłosić wyjątek powodujący wycofanie transakcji zawijania.

max_attempts

integer DEFAULT 1 ile razy rozszerzenie ponawia próbę utworzenia osadzania usługi Azure OpenAI, jeśli wystąpi błąd ponawiania próby.

retry_delay_ms

integer DEFAULT 1000 czas (w milisekundach) oczekiwania rozszerzenia przed ponownym wywołaniem punktu końcowego usługi Azure OpenAI na potrzeby tworzenia osadzania, gdy zakończy się niepowodzeniem z powodu błędu z możliwością ponowienia próby.

Typ zwracany

real[] lub pojedynczy element lub TABLE(embedding real[]) jednokolumna tabela, w zależności od przeciążenia używanej funkcji z reprezentacjami wektorowymi tekstu wejściowego, podczas przetwarzania przez wybrane wdrożenie.

Używanie interfejsu OpenAI do tworzenia osadzania i przechowywania ich w typie danych wektorowych

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