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
- Activez et configurez l’extension
azure_ai
. - Créez un compte OpenAI et demandez l’accès à Azure OpenAI Service.
- Accordez l’accès à Azure OpenAI dans l’abonnement souhaité.
- Octroyez des autorisations pour créer des ressources Azure OpenAI et déployer des modèles.
- 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;