Partager via


Générer des incorporations de vecteurs avec Azure OpenAI sur Azure Database pour PostgreSQL – Serveur flexible

S’APPLIQUE À : Azure Database pour PostgreSQL - Serveur flexible

Appelez facilement des incorporations Azure OpenAI pour obtenir une représentation vectorielle de l’entrée. Celle-ci peut alors être utilisée dans les recherches de similarité vectorielle et consommée par les modèles Machine Learning.

Prérequis

  1. Activez et configurez l’extension azure_ai.
  2. Créez un compte OpenAI et demandez l’accès à Azure OpenAI Service.
  3. Accordez l’accès à Azure OpenAI dans l’abonnement souhaité.
  4. Octroyez des autorisations pour créer des ressources Azure OpenAI et déployer des modèles.
  5. Créez et déployez une ressource de service Azure OpenAI et un modèle, par exemple le déploiement du modèle d’incorporations text-embedding-ada-002. Copiez le nom du déploiement, car il est nécessaire pour créer des incorporations.

Configurer le point de terminaison et la clé OpenAI

Dans la ressource Azure OpenAI, sous Gestion de ressources>Clés et points de terminaison, vous pouvez trouver le point de terminaison et les clés de votre ressource Azure OpenAI. Pour appeler le déploiement du modèle, activez l’extension azure_ai à l’aide du point de terminaison et de l’une des clés.

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

Appelle l’API Azure OpenAI pour créer des incorporations à l’aide du déploiement fourni sur l’entrée donnée.

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)

Arguments

deployment_name

Nom text du déploiement qui contient le modèle dans Azure OpenAI Studio.

input

text ou text[] Texte unique ou tableau de textes, en fonction de la surcharge de la fonction utilisée, pour laquelle les incorporations sont créées.

dimensions

integer DEFAULT NULL Nombre de dimensions que les incorporations de sortie obtenues doivent avoir. Pris en charge uniquement dans des modèles text-embedding-3 et ultérieur. Disponible dans les versions 1.1.0 et ultérieures de l’extension azure_ai

batch_size

integer DEFAULT 100 Nombre d’enregistrements à traiter à la fois (disponible uniquement pour la surcharge de la fonction pour laquelle le paramètre input est de type text[]).

timeout_ms

Délai d’expiration de integer DEFAULT 3600000 en millisecondes après lequel l’opération est arrêtée.

throw_on_error

boolean DEFAULT true sur l’erreur si la fonction doit lever une exception entraînant une restauration des transactions d’enveloppement.

max_attempts

integer DEFAULT 1 Nombre de fois où l’extension réessaye la création de l’incorporation d’Azure OpenAI, en cas d’échec causé par une quelconque erreur nouvelle tentative possible.

retry_delay_ms

integer DEFAULT 1000 Durée (en millisecondes) d’attente pour l’extension, avant d’appeler à nouveau le point de terminaison Azure OpenAI pour la création de l’incorporation, en cas d’échec causé par une quelconque erreur de nouvelle tentative possible.

Type renvoyé

real[] ou TABLE(embedding real[]) Un élément unique ou une table à colonne unique, selon la surcharge de la fonction utilisée, avec des représentations vectorielles du texte d’entrée, lorsque le traitement est effectué par le déploiement sélectionné.

Utiliser OpenAI pour créer des incorporations et les stocker dans un type de données vectoriel

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

Étapes suivantes