Compartilhar via


Gerar inserções de vetor com o Azure OpenAI no Banco de Dados do Azure para PostgreSQL

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 aprendizado de máquina.

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[] texto único 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 gera 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 de repetição.

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 de repetição.

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 DiskANN index
CREATE INDEX ON conference_session_embeddings USING diskann (session_embedding vector_cosine_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;