Создание векторных внедрения с помощью Azure OpenAI на База данных Azure для PostgreSQL — гибкий сервер
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
Вызов внедрения Azure OpenAI легко позволяет получить векторное представление входных данных, которое можно использовать в поисках сходства векторов и используется моделями машинного обучения.
Необходимые компоненты
- Включите и настройте
azure_ai
расширение. - Создайте учетную запись OpenAI и запросите доступ к службе Azure OpenAI.
- Предоставьте доступ к Azure OpenAI в нужной подписке.
- Предоставьте разрешения на создание ресурсов Azure OpenAI и развертывание моделей.
- Создайте и разверните ресурс службы 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;