Поделиться через


Создание векторных внедрения с помощью Azure OpenAI на База данных Azure для PostgreSQL — гибкий сервер

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

Вызов внедрения Azure OpenAI легко позволяет получить векторное представление входных данных, которое можно использовать в поисках сходства векторов и используется моделями машинного обучения.

Необходимые компоненты

  1. Включите и настройте azure_ai расширение.
  2. Создайте учетную запись OpenAI и запросите доступ к службе Azure OpenAI.
  3. Предоставьте доступ к Azure OpenAI в нужной подписке.
  4. Предоставьте разрешения на создание ресурсов Azure OpenAI и развертывание моделей.
  5. Создайте и разверните ресурс службы Azure OpenAI и модель, например развертывание модели внедрения текста-внедрения-ada-002. Скопируйте имя развертывания, так как требуется для создания внедрения.

Настройка конечной точки и ключа OpenAI

В ресурсе Azure OpenAI в разделе "Ключи управления>ресурсами" и "Конечные точки" можно найти конечную точку и ключи для ресурса Azure OpenAI. Чтобы вызвать развертывание модели, включите azure_ai расширение с помощью конечной точки и одного из ключей.

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

Вызывает API Azure OpenAI для создания внедрения с помощью предоставленного развертывания по заданным входным данным.

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)

Аргументы

deployment_name

text имя развертывания в Студии OpenAI Azure, содержащей модель.

input

text или text[] один текст или массив текстов в зависимости от перегрузки используемой функции, для которой создаются внедрения.

dimensions

integer DEFAULT NULL Число измерений, в которых должны быть внедренные выходные данные. Поддерживается только в моделях с внедрением текста-3 и более поздних версий. Доступно в версиях 1.1.0 и более поздних версий расширения azure_ai

batch_size

integer DEFAULT 100 число записей для обработки за раз (доступно только для перегрузки функции, для которой input параметр имеет тип text[]).

timeout_ms

integer DEFAULT 3600000 время ожидания в миллисекундах, после чего операция остановлена.

throw_on_error

boolean DEFAULT true при ошибке функция вызывает исключение, что приводит к откату транзакций упаковки.

max_attempts

integer DEFAULT 1 Число повторных попыток расширения встраивание Azure OpenAI при сбое при возникновении ошибки повторной попытки.

retry_delay_ms

integer DEFAULT 1000 Время (миллисекунда), которое ожидает расширение, прежде чем снова вызывать конечную точку Azure OpenAI для внедрения, если она завершается сбоем с любой повторяющейся ошибкой.

Возвращаемый тип

real[] или TABLE(embedding real[]) один элемент или таблица с одним столбцом в зависимости от перегрузки используемой функции с векторными представлениями входного текста при обработке выбранного развертывания.

Использование OpenAI для создания внедрения и хранения их в векторном типе данных

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

Следующие шаги