Generación de incrustaciones de vectores con Azure OpenAI en Azure Database for PostgreSQL: servidor flexible
SE APLICA A: Azure Database for PostgreSQL con servidor flexible
Invoque las inserciones de Azure OpenAI fácilmente para obtener una representación vectorial de la entrada, que se puede usar después en búsquedas de similitud vectorial y ser consumida por modelos de Machine Learning.
Requisitos previos
- Habilitar y configurar la extensión
azure_ai
. - Cree una cuenta de OpenAI y soliciteAcceso a Azure OpenAI Service.
- Conceda acceso a Azure OpenAI en la suscripción deseada.
- Conceda permisos para crear recursos de Azure OpenAI e implementar modelos.
- Crear e implementar un recurso del servicio Azure OpenAI y un modelo; por ejemplo, implemente el modelo de inserciones text-embedding-ada-002. Copie el nombre de implementación según sea necesario para crear inserciones.
Configuración del punto de conexión y la clave de OpenAI
En el recurso Azure OpenAI, en Administración de recursos>Claves y puntos de conexión, puede encontrar el punto de conexión y las claves del recurso Azure OpenAI. Para invocar la implementación del modelo, habilite la extensión azure_ai
mediante el punto de conexión y una de las claves.
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
Invoca la API de Azure OpenAI para crear incrustaciones mediante la implementación proporcionada a través de la entrada especificada.
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)
Argumentos
deployment_name
text
nombre de la implementación en Azure OpenAI Studio que contiene el modelo.
input
Texto único de text
o text[]
o matriz de textos, en función de la sobrecarga de la función utilizada, para la que se crean incrustaciones.
dimensions
integer DEFAULT NULL
Número de dimensiones que deben tener las inserciones de salida resultantes. Solo se admite en los modelos text-embedding-3 y versiones posteriores. Disponible en las versiones 1.1.0 y posteriores de la extensión azure_ai
batch_size
integer DEFAULT 100
número de registros que se van a procesar a la vez (solo está disponible para la sobrecarga de la función para la que el parámetro input
es de tipo text[]
).
timeout_ms
integer DEFAULT 3600000
tiempo de espera en milisegundos después del cual se detiene la operación.
throw_on_error
boolean DEFAULT true
en caso de error, la función debe producir una excepción, lo que da lugar a una reversión de las transacciones de ajuste.
max_attempts
integer DEFAULT 1
número de veces que la extensión vuelve a intentar la creación de la inserción de Azure OpenAI si se produce un error que admite reintentos.
retry_delay_ms
integer DEFAULT 1000
cantidad de tiempo (milisegundos) que espera la extensión antes de llamar de nuevo al punto de conexión de Azure OpenAI para la creación de la inserción, cuando se produce un error que admite reintentos.
Tipo de valor devuelto
real[]
o TABLE(embedding real[])
un único elemento o una tabla de una sola columna, dependiendo de la sobrecarga de la función utilizada, con representaciones vectoriales del texto de entrada, cuando la implementación seleccionada procesa.
Usar OpenAI para crear inserciones y almacenarlas en un tipo de datos vectorial
-- 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;