semantic-ranker-default-003
와 같은 Vertex AI 순위 지정 모델을 사용하여 애플리케이션의 검색 결과를 순위 지정하고 재순위 지정하는 방법을 알아봅니다.
ai.rank()
함수를 사용하여 쿼리와의 관련성을 기반으로 문서에 점수를 매기고, 더 나은 쿼리 순서를 위해 순위를 다시 지정하여 벡터 검색 결과를 개선할 수 있습니다.
Vertex AI Ranking API는 문서 목록을 가져와 문서가 지정된 쿼리 (검색 문자열)와 얼마나 관련성이 있는지에 따라 문서의 순위를 지정합니다. ai.rank()
함수를 사용하면 문서가 지정된 질문에 얼마나 잘 답변하는지에 대한 점수가 반환됩니다.
이 페이지의 안내를 사용하려면 PostgreSQL용 AlloyDB를 이해하고 생성형 AI 개념에 익숙해야 합니다.
AlloyDB는 ai
스키마를 예약하고 만듭니다.
시작하기 전에
검색 결과를 순위 지정하기 전에 다음을 수행합니다.
google_ml_integration
확장 프로그램이 설치되어 있는지 확인합니다.google_ml_integration.enable_model_support
플래그가on
로 설정되어 있는지 확인합니다.- Vertex AI와 통합
- Discovery Engine API를 사용 설정합니다.
- 순위 모델을 사용하는 데 필요한 역할을 획득합니다.
Discovery Engine API 사용 설정
콘솔
- API 사용 설정하기
- 프로젝트 확인 단계에서 다음을 클릭하여 변경할 프로젝트의 이름을 확인합니다.
- API 사용 설정 단계에서 사용 설정을 클릭하여 Discovery Engine API를 사용 설정합니다. 이 API를 이미 사용 설정한 경우 여기에 표시되지 않습니다.
gcloud
순위 모델을 사용하려면 Discovery Engine API를 사용 설정해야 합니다.
PROJECT_ID
를 Google Cloud 프로젝트 ID로 바꾸고 PROJECT_NUMBER
를 해당 프로젝트 번호로 바꿉니다.
# Enable Discovery Engine API gcloud services enable discoveryengine.googleapis.com --project=PROJECT_ID gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/discoveryengine.viewer"
Vertex AI 모델에는 순위 지정용 모델 등록이 필요하지 않습니다.
다음 예와 같이 Vertex AI 모델 이름을 model_id
로 사용할 수 있습니다.
SELECT index, score FROM ai.rank( model_id => 'semantic-ranker-default-003', search_string => 'Affordable family-friendly vacation spots in Southeast Asia?', documents => ARRAY[ 'Luxury resorts in South Korea', 'Family vacation packages for Vietnam: Ha Long Bay and Hoi An', 'Budget-friendly beaches in Thailand perfect for families', 'A backpacker guide to solo travel in India'])
시맨틱 순위 지정기의 일반적인 사용 사례는 더 나은 쿼리 순서를 위해 벡터 검색에서 반환된 결과를 다시 순위 지정하는 것입니다. 다음 예는 이 사용 사례에 시맨틱 순위 지정 모델을 사용하는 방법을 보여줍니다. 이 예에서는 벡터 검색을 사용하여 personal fitness
equipment
쿼리의 초기 결과 집합을 가져옵니다. 그런 다음 이러한 결과의 순위가 다시 지정되어 상위 5개 결과가 반환됩니다.
WITH initial_ranking AS ( SELECT id, description, ROW_NUMBER() OVER () AS ref_number FROM product ORDER BY embedding <=> google_ml.embedding( 'gemini-embedding-001', 'personal fitness equipment')::vector LIMIT 10 ), reranked_results AS ( SELECT index, score FROM ai.rank( model_id => 'semantic-ranker-default-003', search_string => 'personal fitness equipment', documents => (SELECT ARRAY_AGG(description ORDER BY ref_number) FROM initial_ranking), top_n => 5) ) SELECT id, description FROM initial_ranking, reranked_results WHERE initial_ranking.ref_number = reranked_results.index ORDER BY reranked_results.score DESC;
사용 가능한 모델 및 사용 사례 목록은 지원되는 모델을 참고하세요.
Vertex AI와 통합하고 확장 프로그램 설치
- Vertex AI와 통합
- 최신 버전의
google_ml_integration
가 설치되어 있는지 확인합니다.설치된 버전을 확인하려면 다음 명령어를 실행합니다.
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.3 (1 row)
확장 프로그램이 설치되어 있지 않거나 설치된 버전이 1.4.3 이전인 경우 다음 명령어를 실행하여 확장 프로그램을 업데이트합니다.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
위 명령어를 실행할 때 문제가 발생하거나 위 명령어를 실행한 후 확장 프로그램이 버전 1.4.3으로 업데이트되지 않으면 AlloyDB 지원팀에 문의하세요.
버전이 최신인지 확인한 후
upgrade_to_preview_version
절차를 실행하여 미리보기 기능을 설치합니다.CALL google_ml.upgrade_to_preview_version(); SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.4 (1 row)
필요한 역할
Discovery Engine의 순위 지정 모델을 사용하는 데 필요한 권한을 얻으려면 관리자에게 your project
에 대한 Discovery Engine 뷰어 (roles/discoveryengine.viewer
) Identity and Access Management (IAM) 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
검색 결과 순위 지정
다음 SQL 쿼리는 검색 결과를 순위 지정하는 방법을 보여줍니다.
SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
다음을 바꿉니다.
매개변수 | 설명 |
---|---|
MODEL_ID |
개발자가 정의한 모델 엔드포인트의 고유 ID입니다. |
SEARCH_STRING |
레코드의 순위가 매겨지는 검색 문자열입니다. |
DOCUMENTS |
레코드를 식별하는 고유한 문자열입니다. |
지원되는 Vertex AI 순위 지정 모델 목록은 지원되는 모델을 참고하세요.
예시
Vertex AI 순위 지정 모델을 사용하여 검색 결과를 순위 지정하려면 다음 쿼리를 실행하세요.
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-default-003',
search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
documents =>
ARRAY[
'Alloys are made from combination of metals',
'The best enterprise-ready PostgreSQL database.',
'You can feel the heat in Alloy apartments.']);
대답은 각 문서와 검색어와의 관련성에 따른 점수를 보여주는 표입니다. 다음은 샘플 응답입니다.
index | score
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
리뷰 설명 목록이 포함된 AlloyDB 데이터베이스가 임베딩으로 변환된다고 가정해 보겠습니다. 다음 샘플 코드 스니펫은 순위 모델을 사용하여 리뷰 설명과 질문의 의미 유사성을 기반으로 순위가 가장 높은 제품의 이름을 가져오는 방법을 보여줍니다.
WITH initial_ranking AS (
SELECT product_id, name, review, review_id, ROW_NUMBER() OVER () AS ref_number
FROM user_reviews
ORDER BY
review_desc_embedding <=> google_ml.embedding(
'gemini-embedding-001', 'good desserts')::vector
LIMIT 10
), reranked_results AS (
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-512',
search_string => 'good desserts',
documents => (SELECT ARRAY_AGG(review ORDER BY ref_number) FROM initial_ranking),
top_n => 5)
)
SELECT product_id, name
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;