Compartir vía


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

  1. Habilitar y configurar la extensión azure_ai.
  2. Cree una cuenta de OpenAI y soliciteAcceso a Azure OpenAI Service.
  3. Conceda acceso a Azure OpenAI en la suscripción deseada.
  4. Conceda permisos para crear recursos de Azure OpenAI e implementar modelos.
  5. 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;

Pasos siguientes