이 페이지에서는 모델 엔드포인트 관리에 등록된 Vertex AI 순위 모델 엔드포인트를 사용하여 애플리케이션의 검색 결과를 순위 지정하거나 점수를 매기는 방법을 설명합니다.
Vertex AI Ranking API는 문서 목록을 가져와 문서가 특정 검색어 (검색 문자열)와 얼마나 관련성이 있는지에 따라 문서의 순위를 지정합니다. ai.rank()
함수를 사용하면 문서가 지정된 쿼리에 얼마나 잘 대답하는지에 대한 점수가 반환됩니다.
이 페이지의 안내를 사용하려면 PostgreSQL용 AlloyDB를 이해하고 생성형 AI 개념에 익숙해야 합니다.
AlloyDB는 ai
스키마를 예약하고 google_ml_integration
확장 프로그램을 설치할 때 이 스키마를 만들려고 시도합니다. 스키마 생성에 실패하면 google_ml
스키마에서 이름이 같은 함수를 사용합니다.
시작하기 전에
순위 모델을 사용하여 검색 결과를 순위 지정할 수 있는 액세스 권한을 요청하고 사용 설정 확인을 받은 후에 이 페이지의 안내를 따르세요.
Vertex AI 순위 모델이 등록되어 있는지 확인합니다. 자세한 내용은 Vertex AI 순위 모델을 참고하세요.
검색 결과 순위 지정
다음 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 |
레코드를 식별하는 고유 문자열입니다. |
예시
등록된 순위 엔드포인트를 사용하여 검색 결과의 순위를 지정하려면 다음 쿼리를 실행합니다.
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-512-002',
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 데이터베이스의 예를 살펴보겠습니다. 다음 샘플 코드 스니펫은 순위 모델을 사용하여 리뷰 설명의 검색어와의 시맨틱 유사성을 기반으로 순위가 가장 높은 제품의 이름을 가져오는 방법을 보여줍니다. 여기서는 text-embedding-005
및 semantic-ranker-512@002
모델 엔드포인트가 모두 등록되었다고 가정합니다.
WITH
initial_results 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(
'text-embedding-005', 'good desserts')
LIMIT 100
),
reranked AS (
SELECT
ai.rank(
model_id => 'semantic-ranker-512@002',
search_string => 'good desserts',
documents => ARRAY_AGG(review ORDER BY ref_number))
FROM initial_results
)
SELECT product_id, name
FROM initial_results, reranked
WHERE initial_results.ref_number = reranked.index
ORDER BY reranked.score;