Azure Database for PostgreSQL - 유연한 서버 및 Azure OpenAI를 사용한 권장 시스템
적용 대상: Azure Database for PostgreSQL - 유연한 서버
이 실습 자습서에서는 Azure Database for PostgreSQL 유연한 서버 및 Azure OpenAI Service를 사용하여 추천 애플리케이션을 빌드하는 방법을 보여 줍니다. 권장 사항은 다양한 영역에 적용됩니다. 서비스 공급자는 고객과 환경에서 수집한 이전 기록과 상황별 정보를 기반으로 자신이 제공하는 제품 및 서비스에 대한 권장 사항을 제공하는 경향이 있습니다.
권장 시스템을 모델링하는 방법에는 여러 가지가 있습니다. 이 문서에서는 가장 간단한 형태, 즉 사전 구매에 해당하는 하나의 제품을 기반으로 한 권장 사항을 살펴봅니다. 이 자습서에서는 의미 체계 검색 문서에 사용된 레시피 데이터 세트를 사용하며 고객이 이전에 좋아했거나 검색한 레시피를 기반으로 레시피를 권장합니다.
필수 조건
- OpenAI 계정을 만들고 Azure OpenAI Service에 대한 액세스를 요청합니다.
- 원하는 구독에서 Azure OpenAI에 대한 액세스 권한을 부여합니다.
- Azure OpenAI 리소스 만들기 및 모델 배포 권한을 부여합니다.
Azure OpenAI 서비스 리소스 및 모델을 만들고 배포하고 embeddings 모델 text-embedding-ada-002를 배포합니다. 포함을 만드는 데 필요하므로 배포 이름을 복사합니다.
azure_ai 및 pgvector 확장 사용
Azure Database for PostgreSQL 유연한 서버 인스턴스에서 azure_ai
및 pgvector
를 사용하도록 설정하려면 먼저 PostgreSQL 확장 사용 방법에 설명된 대로 허용 목록에 추가하고 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로 설정합니다. 이 특정 데이터 세트는 WIN1252 인코딩을 사용하기 때문에 이 단계가 필요합니다.
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 Database for PostgreSQL - 유연한 서버를 Azure Cognitive Services와 통합합니다.
- 로컬로 배포된 LLM(미리 보기)을 사용하여 Azure Database for PostgreSQL - 유연한 서버에서 벡터 포함을 생성합니다.
- Azure Database for PostgreSQL을 Azure Machine Learning Services와 통합합니다.
- 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를 사용하도록 설정하고 사용합니다.