AlloyDB AI 쿼리 엔진을 사용하여 지능형 SQL 쿼리 실행

이 페이지에서는 AlloyDB AI 쿼리 엔진에서 제공하는 AI 기반 SQL 연산자를 사용하여 쿼리하는 방법을 설명합니다. 필터, ai.rank, ai.generate 연산자에 ai.if를 사용하여 자연어와 SQL 쿼리를 결합할 수 있습니다.

이 페이지의 안내를 사용하려면 AlloyDB를 이해하고 생성형 AI 개념을 잘 알고 있어야 합니다.

AlloyDB AI는 ai 스키마를 예약하고 만듭니다.

시작하기 전에

SQL 연산자에서 자연어를 사용하기 전에 다음을 수행하세요.

Vertex AI와 통합하고 확장 프로그램 설치

  1. Vertex AI와 통합
  2. 최신 버전의 google_ml_integration가 설치되어 있는지 확인합니다.
    1. 설치된 버전을 확인하려면 다음 명령어를 실행합니다.

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. 확장 프로그램이 설치되어 있지 않거나 설치된 버전이 1.4.3 이전인 경우 다음 명령어를 실행하여 확장 프로그램을 업데이트합니다.

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      위 명령어를 실행할 때 문제가 발생하거나 위 명령어를 실행한 후 확장 프로그램이 버전 1.4.3으로 업데이트되지 않으면 AlloyDB 지원팀에 문의하세요.

    3. 버전이 최신인지 확인한 후 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.ifai.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;

다음 단계