Gerar inserções de vetores com o OpenAI do Azure no Banco de Dados do Azure para PostgreSQL – Servidor Flexível

APLICA-SE A: Banco de dados do Azure para PostgreSQL – Servidor Flexível

Invoque as inserções do OpenAI do Azure facilmente para obter uma representação de vetor da entrada, que pode ser usada em pesquisas de similaridade de vetor e consumida por modelos de machine learning.

Pré-requisitos

  1. Habilitar e configurar a extensão azure_ai.
  2. Crie uma conta do OpenAI e solicite acesso ao Serviço OpenAI do Azure.
  3. Conceda acesso ao OpenAI do Azure na assinatura desejada.
  4. Conceda permissões para criar recursos do OpenAI do Azure e implantar modelos.
  5. Crie e implante um recurso do Serviço OpenAI do Azure e um modelo, por exemplo, implante o modelo de inserções text-embedding-ada-002. Copie o nome da implantação conforme necessário para criar as inserções.

Configurar o ponto de extremidade e a chave do OpenAI

No recurso OpenAI do Azure, em Gerenciamento de Recursos>Chaves e Pontos de Extremidade, você pode encontrar o ponto de extremidade e as chaves para o seu recurso OpenAI do Azure. Para invocar a implantação do modelo, habilite a extensão azure_ai usando o ponto de extremidade e uma das chaves.

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 a API do OpenAI do Azure para criar inserções usando a implantação fornecida na entrada recebida.

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 nome da implantação no Estúdio do OpenAI do Azure que contém o modelo.

input

text ou text[] único texto ou matriz de textos, dependendo da sobrecarga da função usada, para a qual as inserções são criadas.

dimensions

integer DEFAULT NULL O número de dimensões que as inserções de saída resultantes devem ter. Só há suporte em modelos text-embedding-3 e posteriores. Disponível nas versões 1.1.0 e posteriores da extensão azure_ai

batch_size

integer DEFAULT 100 número de registros a serem processados por vez (disponível apenas para a sobrecarga da função para a qual o parâmetro input é do tipo text[]).

timeout_ms

integer DEFAULT 3600000 tempo limite em milissegundos após o qual a operação é interrompida.

throw_on_error

boolean DEFAULT true em caso de erro, a função gerar uma exceção resultando em uma reversão das transações de encapsulamento.

max_attempts

integer DEFAULT 1 número de vezes que a extensão tentará novamente a criação da inserção do OpenAI do Azure se falhar com qualquer erro retível.

retry_delay_ms

integer DEFAULT 1000 quantidade de tempo (milissegundos) que a extensão aguarda, antes de chamar novamente o ponto de extremidade do OpenAI do Azure para a criação da inserção, quando falhar com qualquer erro em que seja possível tentar novamente.

Tipo de retorno

real[] ou TABLE(embedding real[]) um único elemento ou uma tabela de coluna única, dependendo da sobrecarga da função usada, com representações de vetor do texto de entrada, quando processado pela implantação selecionada.

Usar o OpenAI para criar inserções e armazená-las em um tipo de dados de vetores

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

Próximas etapas