Azure AI 확장을 사용하여 임베딩 생성하기

완료됨

의미 체계 검색을 실행하려면 쿼리 포함을 검색된 항목의 포함 항목과 비교해야 합니다. Azure Database for PostgreSQL - Flexible Server의 azure_ai 확장은 Azure OpenAI와 통합되어 임베딩 벡터를 생성합니다.

Azure OpenAI embeddings API로 전송되는

azure_ai 및 Azure OpenAI 소개

Azure AI용 Azure Database for PostgreSQL 유연한 확장은 AzureOpenAI 및 Azure AI Search를 포함하여 Microsoft Foundry와 통합할 수 있는 사용자 정의 함수를 제공합니다.

Azure OpenAI Embeddings API는 입력 텍스트의 포함 벡터를 생성합니다. 이 API를 사용하여 검색 중인 모든 항목에 대한 포함을 설정합니다. azure_ai 확장의 azure_openai 스키마를 사용하면 SQL에서 API를 쉽게 호출하여 항목 포함을 초기화할지 또는 즉시 쿼리 포함을 만들든 관계없이 포함을 생성할 수 있습니다. 그런 다음 이러한 포함을 사용하여 벡터 유사성 검색 또는 의미 체계 검색을 수행할 수 있습니다.

Azure OpenAI에서 azure_ai 확장 사용

PostgreSQL에서 Azure OpenAI Embeddings API를 호출하려면 확장을 사용하도록 설정하고, azure_ai Azure OpenAI에 대한 액세스 권한을 부여하고, Azure OpenAI 모델을 배포해야 합니다. 자세한 내용은 Azure Database for PostgreSQL 유연한 서버 설명서의 Azure OpenAI를 참조하세요.

환경이 준비되고 확장이 허용 목록에 추가되면 다음 SQL을 실행합니다.

/* Enable the extension. */
CREATE EXTENSION azure_ai;

또한 OpenAI 서비스 리소스의 엔드포인트 및 액세스 키를 구성해야 합니다.

SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');

Azure OpenAI가 구성되면 azure_ai 포함을 가져오고 저장하는 것은 SQL 쿼리에서 함수를 호출하는 간단한 문제입니다. listings 테이블에 description 열과 listing_vector 열이 있다고 가정하면, 다음 쿼리를 사용하여 모든 목록에 대한 임베딩을 생성하고 저장할 수 있습니다. Azure OpenAI Studio에서 만든 모델의 경우 {your-deployment-name}배포 이름으로 대체하십시오.

UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;

벡터 열에는 listing_vector 언어 모델이 생성하는 것과 동일한 수의 차원이 있어야 합니다.

문서 포함을 보려면 다음 쿼리를 실행합니다.

SELECT listing_vector FROM listings LIMIT 1;

결과는 부동 소수점 숫자의 벡터입니다. 먼저 실행 \x 하여 출력을 더 읽기 쉽게 만들 수 있습니다.

쿼리 임베딩을 동적으로 생성

검색하려는 문서에 대한 포함이 있으면 의미 체계 검색 쿼리를 실행할 수 있습니다. 이렇게 하려면 쿼리 텍스트에 대한 임베딩도 생성해야 합니다.

azure_openai 확장의 azure_ai 스키마를 사용하면 SQL 내에서 임베딩을 생성할 수 있습니다. 예를 들어 텍스트가 "이동 가능한 지역에 있는 위치 찾기" 쿼리와 가장 의미상 유사한 상위 3개 목록을 찾으려면 다음 SQL을 실행합니다.

SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;

연산자는 <=> 의미 체계 유사성 메트릭인 두 벡터 사이의 코사인 거리를 계산합니다. 벡터가 가까울수록 의미상 유사합니다. 벡터가 많을수록 의미 체계가 다릅니다.

::vector 연산자는 생성된 포함을 PostgreSQL 벡터 배열로 변환합니다.

쿼리는 상위 3개 목록 ID 및 설명을 반환하며, 순위는 작음에서 더 다를 수 있습니다(더 비슷하거나 덜 유사).