Azure Database for PostgreSQL - 유연한 서버에서 Azure OpenAI를 사용하여 벡터 포함 생성
적용 대상: Azure Database for PostgreSQL - 유연한 서버
Azure OpenAI 포함을 쉽게 호출하여 입력의 벡터 표현을 가져올 수 있습니다. 이 표현은 벡터 유사성 검색에 사용되고 기계 학습 모델에서 사용될 수 있습니다.
필수 조건
azure_ai
확장을 사용하도록 설정하고 구성합니다.- OpenAI 계정을 만들고 Azure OpenAI Service에 대한 액세스를 요청합니다.
- 원하는 구독에서 Azure OpenAI에 대한 액세스 권한을 부여합니다.
- Azure OpenAI 리소스 만들기 및 모델 배포 권한을 부여합니다.
- Azure OpenAI 서비스 리소스와 모델을 만들고 배포합니다. 예를 들어, 포함 모델 text-embedding-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
Azure OpenAI API를 호출하여 지정된 입력에 대해 제공된 배포를 사용하여 포함을 만듭니다.
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
모델이 포함된 Azure OpenAI Studio의 배포 이름입니다.
input
포함이 생성되는 데 사용되는 함수의 오버로드에 따라 단일 텍스트 또는 텍스트 배열 text
또는 text[]
.
dimensions
integer DEFAULT NULL
결과 출력 포함에 포함해야 하는 차원의 수입니다. text-embedding-3 이상 모델에서만 지원됩니다. azure_ai 확장 버전 1.1.0 이상에서 사용 가능
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;