적용 대상: Azure Database for PostgreSQL - 유연한 서버
이 실습 자습서에서는 Azure Database for PostgreSQL 및 Azure OpenAI를 사용하여 추천 애플리케이션을 빌드하는 방법을 보여 줍니다. 권장 사항에는 다른 도메인에 애플리케이션이 있습니다. 서비스 공급자는 고객 및 환경에서 수집된 이전 기록 및 상황별 정보를 기반으로 제공하는 제품 및 서비스에 대한 권장 사항을 제공하는 경향이 있습니다.
권장 사항 시스템을 모델링하는 다양한 방법이 있습니다. 이 자습서에서는 가장 간단한 형태인 이전 구매에 해당하는 제품을 기반으로 하는 권장 사항을 살펴봅니다. 이 자습서에서는 의미 체계 검색을 위한 자습서 에서 사용하는 레시피 데이터 세트를 사용합니다. 권장 사항은 고객이 과거에 좋아하거나 검색한 레시피를 기반으로 하는 레시피에 대한 것입니다.
필수 구성 요소
- OpenAI 계정을 만들고 Azure OpenAI에 대한 액세스를 요청합니다.
- 원하는 구독에서 Azure OpenAI에 대한 액세스 권한을 부여합니다.
- Azure OpenAI 리소스 만들기 및 모델 배포 권한을 부여합니다.
- Azure OpenAI 리소스 및 모델을 만들고 배포합니다. embeddings 모델 text-embedding-ada-002를 배포합니다. 배포 이름을 복사하세요. 임베딩을 생성하는 데 필요합니다.
azure_ai 및 pgvector 확장 기능 사용
Azure Database for PostgreSQL 유연한 서버에서 azure_ai
및 pgvector
을 사용하도록 설정하기 전에, 먼저 허용 목록에 추가해야 합니다. 를 실행 SHOW azure.extensions;
하여 올바르게 추가되었는지 확인합니다.
그런 다음 대상 데이터베이스에 연결하고 CREATE EXTENSION 명령을 실행하여 확장을 설치할 수 있습니다. 확장을 사용할 수 있도록 하려는 모든 데이터베이스에 대해 명령을 개별적으로 반복합니다.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
OpenAI 엔드포인트 및 키 구성
Azure AI 서비스의 리소스 관리>키 및 엔드포인트에서 Azure AI 리소스에 대한 엔드포인트와 키를 찾을 수 있습니다. 엔드포인트와 키 중 하나를 사용하여 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>');
데이터 다운로드
Kaggle에서 데이터를 다운로드합니다.
테이블 만들기
서버에 연결하고 데이터베이스를 만듭니다 test
. 해당 데이터베이스에서 다음 명령을 사용하여 데이터를 가져올 테이블을 만듭니다.
CREATE TABLE public.recipes(
rid integer NOT NULL,
recipe_name text,
prep_time text,
cook_time text,
total_time text,
servings integer,
yield text,
ingredients text,
directions text,
rating real,
url text,
cuisine_path text,
nutrition text,
timing text,
img_src text,
PRIMARY KEY (rid)
);
데이터 가져오기
클라이언트 창에서 다음 환경 변수를 설정하여 인코딩을 UTF-8로 설정합니다. 이 특정 데이터 세트는 Windows-1252 인코딩을 사용하므로 이 단계가 필요합니다.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
만든 테이블로 데이터를 가져옵니다. 이 데이터 세트에는 머리글 행이 포함되어 있습니다.
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
포함을 저장할 열 추가
포함 열을 테이블에 추가합니다.
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
포함 생성
azure_ai
확장을 사용하여 데이터 임베딩을 생성합니다. 다음 예제에서는 몇 개의 필드를 벡터화하고 연결합니다.
WITH ro AS (
SELECT ro.rid
FROM
recipes ro
WHERE
ro.embedding is null
LIMIT 500
)
UPDATE
recipes r
SET
embedding = azure_openai.create_embeddings('text-embedding-ada-002', r.recipe_name||' '||r.cuisine_path||' '||r.ingredients||' '||r.nutrition||' '||r.directions)
FROM
ro
WHERE
r.rid = ro.rid;
처리할 행이 더 이상 없을 때까지 명령을 반복합니다.
팁
LIMIT
값을 가지고 실험해 보세요. 값이 매우 높은 경우 Azure OpenAI에서 적용하는 제한으로 인해 문장이 중간에 실패할 수 있습니다. 명령문이 실패할 경우에는 1분 이상 기다렸다가 명령을 다시 실행하십시오.
검색
편의를 위해 데이터베이스에 검색 함수를 만듭니다.
create function
recommend_recipe(sampleRecipeId int, numResults int)
returns table(
out_recipeName text,
out_nutrition text,
out_similarityScore real)
as $$
declare
queryEmbedding vector(1536);
sampleRecipeText text;
begin
sampleRecipeText := (select
recipe_name||' '||cuisine_path||' '||ingredients||' '||nutrition||' '||directions
from
recipes where rid = sampleRecipeId);
queryEmbedding := (azure_openai.create_embeddings('text-embedding-ada-002',sampleRecipeText));
return query
select
distinct r.recipe_name,
r.nutrition,
(r.embedding <=> queryEmbedding)::real as score
from
recipes r
order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;
이제 권장 사항을 검색하는 함수를 호출하면 됩니다.
select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1
결과를 살펴봅니다.
out_recipename | out_similarityscore
---------------------------------------+---------------------
Apple Pie by Grandma Ople | 0
Easy Apple Pie | 0.05137232
Grandma's Iron Skillet Apple Pie | 0.054287136
Old Fashioned Apple Pie | 0.058492836
Apple Hand Pies | 0.06449003
Apple Crumb Pie | 0.07290977
Old-Fashioned Apple Dumplings | 0.078374185
Fried Apple Pies | 0.07918481
Apple Pie Filling | 0.084320426
Apple Turnovers | 0.08576391
Dutch Apple Pie with Oatmeal Streusel | 0.08779895
Apple Crisp - Perfect and Easy | 0.09170883
Delicious Cinnamon Baked Apples | 0.09384012
Easy Apple Crisp with Pie Filling | 0.09477234
Jump Rope Pie | 0.09503954
Easy Apple Strudel | 0.095167875
Apricot Pie | 0.09634114
Easy Apple Crisp with Oat Topping | 0.09708358
Baked Apples | 0.09826993
Pear Pie | 0.099974394
(20 rows)
관련 콘텐츠
- Azure Cognitive Services와 Azure Database for PostgreSQL 통합
- Azure Machine Learning 서비스와 Azure Database for PostgreSQL 통합
- Azure Database for PostgreSQL에서 Azure OpenAI를 사용하여 벡터 포함 생성
- Azure Database for PostgreSQL의 Azure AI 확장
- Azure Database for PostgreSQL을 사용하는 생성형 AI
- Azure Database for PostgreSQL 및 Azure OpenAI를 사용하여 의미 체계 검색 만들기
- Azure Database for PostgreSQL에서 pgvector 사용 설정 및 사용