이 페이지에서는 AlloyDB AI 쿼리 엔진에서 제공하는 AI 기반 SQL 연산자를 사용하여 쿼리하는 방법을 설명합니다. 필터, ai.rank
, ai.generate
연산자에 ai.if
를 사용하여 자연어와 SQL 쿼리를 결합할 수 있습니다.
이 페이지의 안내를 사용하려면 AlloyDB를 이해하고 생성형 AI 개념을 잘 알고 있어야 합니다.
AlloyDB AI는 ai
스키마를 예약하고 만듭니다.
시작하기 전에
SQL 연산자에서 자연어를 사용하기 전에 다음을 수행하세요.
google_ml_integration
확장 프로그램이 설치되어 있는지 확인합니다.google_ml_integration.enable_model_support
플래그가on
로 설정되어 있는지 확인합니다.- Vertex AI와 통합
- 거주 지역에서 지원되는 Gemini 모델을 사용하세요.
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)
거주 지역에서 지원되는 Gemini 모델 사용
PostgreSQL용 AlloyDB 클러스터가 gemini-2.0-flash
가 지원되지 않는 리전에 있는 경우 model_id parameter
를 사용하여 해당 리전에서 사용할 수 있는 다른 Gemini 모델 중 하나를 사용할 수 있습니다.
또는 Gemini 모델 엔드포인트를 등록하고 AI 운영자에게 해당 모델 ID를 제공할 수 있습니다. 자세한 내용은 모델 엔드포인트 관리를 사용하여 원격 AI 모델 등록 및 호출을 참고하세요.
다음 예에서는 다른 Gemini 엔드포인트를 등록하는 방법을 보여줍니다. 이 예에서 두 번째 Gemini 엔드포인트는 gemini-2.0-flash
의 전역 엔드포인트입니다. model_id =>
gemini-2.0-flash-global` 을 추가 인수로 전달하여 AI 연산자와 함께 이 등록된 모델을 사용할 수 있습니다.
CALL
google_ml.create_model(
model_id => 'gemini-2.0-flash-global',
model_type => 'llm',
model_provider => 'google',
model_qualified_name => 'gemini-2.0-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<project_id>/locations/global/publishers/google/models/gemini-2.0-flash:generateContent',
model_auth_type => 'alloydb_service_agent_iam'
);
쿼리에서 필터 사용하기
AlloyDB AI는 ai.if
및 ai.rank
연산자를 비롯하여 데이터베이스 쿼리 내에서 자연어 처리 및 LLM을 직접 사용할 수 있는 여러 AI 기반 SQL 함수를 제공합니다.
필터
자연어로 명시된 조건이 충족되는지 평가하려면 ai.if
/google_ml.if
연산자를 사용합니다. 이 함수는 불리언 true 또는 false 값을 반환하며, 출력이 명확하게 감지되지 않으면 false
를 반환합니다.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
다음 예시는 ai.if
연산자를 필터로 사용하여 긍정적 리뷰가 500개를 초과하고 인구가 100,000명을 초과하는 도시에 있는 레스토랑을 찾는 방법을 보여줍니다. 이 예에서는 restaurant_reviews
을 사용하며 리뷰, 도시 위치와 같은 데이터가 포함되어 있습니다. ai.if
연산자를 사용하면 리뷰 감정을 파악하고 데이터베이스의 위치를 해당 위치의 인구에 관한 Gemini 일반 지식과 결합할 수 있습니다.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population OF more than 100,000 AND the following is a positive review; Review: ' || r.review)
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
다음은 내 지역에서 지원되는 Gemini 모델 사용에 등록한 모델을 사용하여 동일한 예를 보여줍니다.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population of more than 100,000 AND the following is a positive review; Review: ' || r.review, model_id => 'gemini-2.0-flash-global')
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
if 연산자를 사용하는 쿼리에서 조인 실행
조인 작업을 실행하려면 조인과 함께 ai.if
/google_ml.if
연산자를 사용합니다. 다음 샘플 쿼리는 레스토랑 메뉴에서 각 메뉴 항목을 언급하는 리뷰 수를 찾습니다.
SELECT item_name, COUNT(*)
FROM menu_items JOIN user_reviews
ON ai.if(
prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
GROUP BY item_name;
텍스트 생성 및 요약
ai.generate
함수는 제공된 데이터와 사용자의 프롬프트를 결합하여 텍스트를 생성합니다.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
예를 들어 다음 쿼리를 사용하여 각 사용자 리뷰의 간결한 요약을 생성할 수 있습니다.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews
쿼리 결과 점수 매기기
맞춤 자연어 요청 사항을 사용하여 쿼리 결과를 정렬해야 하는 경우 ai.rank
연산자를 사용하세요. 이 함수를 사용하면 순위 지정 기준을 설명하는 프롬프트를 제공하고 각 항목의 점수를 반환할 수 있습니다.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
예를 들어 다음 쿼리는 LLM의 점수를 사용하여 가장 긍정적인 상위 20개 레스토랑 리뷰를 가져옵니다.
SELECT review AS top20
FROM user_reviews
ORDER BY ai.rank(
'Score the following review according to these rules:
(1) Score OF 8 to 10 IF the review says the food IS excellent.
(2) 4 to 7 IF the review says the food is ok.
(3) 1 to 3 IF the review says the food is not good. Here is the review:' || review) DESC
LIMIT 20;