AlloyDB Omni에서 원격 AI 모델 등록 및 호출

모델을 사용하여 예측을 호출하거나 임베딩을 생성하려면 모델 엔드포인트 관리에 모델 엔드포인트를 등록합니다.

google_ml.create_model() 함수에 관한 자세한 내용은 모델 엔드포인트 관리 참조를 참고하세요.

모델 엔드포인트 관리에 모델 엔드포인트를 등록하기 전에 google_ml_integration 확장 프로그램을 사용 설정하고 모델 엔드포인트에 인증이 필요한 경우 모델 제공업체를 기반으로 인증을 설정해야 합니다.

postgres 기본 사용자 이름으로 데이터베이스에 액세스해야 합니다.

확장 프로그램 사용 설정

연결된 함수를 사용하려면 먼저 google_ml_integration 확장 프로그램을 추가하고 사용 설정해야 합니다. 모델 엔드포인트 관리를 사용하려면 google_ml_integration 확장 프로그램이 설치되어 있어야 합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.

  2. 선택사항: google_ml_integration 확장 프로그램이 이미 설치된 경우 최신 버전으로 업데이트하도록 변경합니다.

        ALTER EXTENSION google_ml_integration UPDATE;
    
  3. psql을 사용하여 google_ml_integration 확장 프로그램을 추가합니다.

      CREATE EXTENSION google_ml_integration;
    
  4. 선택사항: 모델 메타데이터를 관리할 수 있는 권한을 최고 관리자가 아닌 PostgreSQL 사용자에게 부여합니다.

      GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
    

    NON_SUPER_USER를 수퍼가 아닌 PostgreSQL 사용자 이름으로 바꿉니다.

  5. 데이터베이스에서 모델 엔드포인트 관리를 사용 설정합니다.

      ALTER SYSTEM SET google_ml_integration.enable_model_support=on;
      SELECT pg_reload_conf();
    

인증 설정

다음 섹션에서는 Vertex AI 모델 엔드포인트 또는 다른 제공업체의 모델 엔드포인트를 추가하기 전에 인증을 설정하는 방법을 보여줍니다.

Vertex AI 인증 설정

Google Vertex AI 모델 엔드포인트를 사용하려면 AlloyDB Omni를 설치할 때 사용한 서비스 계정에 Vertex AI 권한을 추가해야 합니다. 자세한 내용은 클라우드 기반 모델을 쿼리하도록 AlloyDB Omni 설치 구성을 참고하세요.

다른 모델 제공업체의 인증 설정

Vertex AI 모델을 제외한 모든 모델의 경우 API 키 또는 보유자 토큰을 Secret Manager에 저장할 수 있습니다. 모델 엔드포인트가 Secret Manager를 통해 인증을 처리하지 않는 경우 이 단계는 선택사항입니다. 예를 들어 모델 엔드포인트가 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우입니다.

이 섹션에서는 Secret Manager를 사용하는 경우 인증을 설정하는 방법을 설명합니다.

API 키 또는 보유자 토큰을 만들고 사용하려면 다음 단계를 완료하세요.

  1. Secret Manager에서 보안 비밀을 만듭니다. 자세한 내용은 보안 비밀 만들기 및 보안 비밀 버전 액세스를 참고하세요.

    보안 비밀 이름과 보안 비밀 경로는 google_ml.create_sm_secret() SQL 함수에 사용됩니다.

  2. AlloyDB 클러스터에 보안 비밀에 액세스할 권한을 부여합니다.

      gcloud secrets add-iam-policy-binding 'SECRET_ID' \
          --member="serviceAccount:SERVICE_ACCOUNT_ID" \
          --role="roles/secretmanager.secretAccessor"
    

    다음을 바꿉니다.

    • SECRET_ID: Secret Manager의 보안 비밀 ID입니다.
    • SERVICE_ACCOUNT_ID: 이전 단계에서 만든 서비스 계정의 ID입니다. AlloyDB Omni 설치 시 사용한 계정과 동일한 계정인지 확인합니다. 여기에는 전체 PROJECT_ID.iam.gserviceaccount.com 접미사가 포함됩니다. 예를 들면 my-service@my-project.iam.gserviceaccount.com입니다.

      프로젝트 수준에서 서비스 계정에 이 역할을 부여할 수도 있습니다. 자세한 내용은 ID 및 액세스 관리 정책 바인딩 추가를 참고하세요.

기본 지원되는 텍스트 임베딩 모델

이 섹션에서는 모델 엔드포인트 관리에서 기본적으로 지원하는 모델 엔드포인트를 등록하는 방법을 보여줍니다.

Vertex AI 임베딩 모델

모델 엔드포인트 관리는 Vertex AI의 모든 버전의 text-embedding-gecko 모델을 기본적으로 지원합니다. 정규화된 이름을 사용하여 모델 버전을 textembedding-gecko@001 또는 textembedding-gecko@002로 설정합니다.

textembedding-geckotextembedding-gecko@001 모델 엔드포인트 ID는 모델 엔드포인트 관리에 사전 등록되어 있으므로 이를 모델 ID로 직접 사용할 수 있습니다. 이러한 모델의 경우 확장 프로그램이 기본 변환 함수를 자동으로 설정합니다.

textembedding-gecko@002 모델 엔드포인트 버전을 등록하려면 다음 단계를 완료하세요.

AlloyDB Omni의 경우 AlloyDB Omni가 클라우드 기반 Vertex AI 모델을 쿼리하도록 설정해야 합니다.

  1. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.

  2. psql를 사용하여 데이터베이스에 연결합니다.

  3. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.

  4. create model 함수를 호출하여 textembedding-gecko@002 모델 엔드포인트를 추가합니다.

    CALL
      google_ml.create_model(
        model_id => 'textembedding-gecko@002',
        model_provider => 'google',
        model_qualified_name => 'textembedding-gecko@002',
        model_type => 'text_embedding',
        model_auth_type => 'alloydb_service_agent_iam');
    
      The request URL that the function generates refers to the project associated with the AlloyDB Omni service account. If you want to refer to another project, then ensure that you specify the `model_request_url` explicitly.
    

Open AI 텍스트 임베딩 모델

모델 엔드포인트 관리는 OpenAI의 text-embedding-ada-002 모델을 위한 기본 제공 지원을 제공합니다.google_ml_integration 확장 프로그램은 기본 변환 함수를 자동으로 설정하고 원격 모델 호출을 호출합니다.

다음 예에서는 text-embedding-ada-002 OpenAI 모델 엔드포인트를 추가합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.
  3. 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다.
  4. Secret Manager에 저장된 보안 비밀을 호출합니다.

    CALL
    google_ml.create_sm_secret(
      secret_id => 'SECRET_ID',
      secret_path => 'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    다음을 바꿉니다.

    • SECRET_ID: 설정하고 나중에 모델 엔드포인트를 등록할 때 사용하는 보안 비밀 ID입니다(예: key1).
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호입니다.
  5. 모델 만들기 함수를 호출하여 text-embedding-ada-002 모델 엔드포인트를 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'open_ai',
        model_type => 'text_embedding',
        model_qualified_name => 'text-embedding-ada-002',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다. 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID입니다.

임베딩을 생성하려면 기본 제공 지원을 통해 모델 엔드포인트의 임베딩을 생성하는 방법을 참고하세요.

기타 텍스트 임베딩 모델

이 섹션에서는 맞춤 호스팅 텍스트 임베딩 모델 엔드포인트 또는 모델 호스팅 제공업체에서 제공하는 텍스트 임베딩 모델 엔드포인트를 등록하는 방법을 보여줍니다. 모델 엔드포인트 메타데이터에 따라 변환 함수를 추가하거나 HTTP 헤더를 생성하거나 엔드포인트를 정의해야 할 수 있습니다.

커스텀 호스팅 텍스트 임베딩 모델

이 섹션에서는 변환 함수 만들기와 함께 맞춤 호스팅 모델 엔드포인트와 선택적으로 맞춤 HTTP 헤더를 등록하는 방법을 보여줍니다. AlloyDB Omni는 호스팅 위치와 관계없이 모든 맞춤 호스팅 모델 엔드포인트를 지원합니다.

다음 예에서는 Cymbal에서 호스팅하는 custom-embedding-model 맞춤 모델 엔드포인트를 추가합니다. cymbal_text_input_transformcymbal_text_output_transform 변환 함수는 모델의 입력 및 출력 형식을 예측 함수의 입력 및 출력 형식으로 변환하는 데 사용됩니다.

맞춤 호스팅 텍스트 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 완료하세요.

  1. psql를 사용하여 데이터베이스에 연결합니다.

  2. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.

  3. 선택사항: 인증을 위해 API 키를 Secret Manager에 보안 비밀로 추가

  4. Secret Manager에 저장된 보안 비밀을 호출합니다.

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    다음을 바꿉니다.

    • SECRET_ID: 설정하고 나중에 모델 엔드포인트를 등록할 때 사용하는 보안 비밀 ID입니다(예: key1).
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호입니다.
  5. 텍스트 임베딩 모델 엔드포인트의 예측 함수에 관한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만듭니다. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예를 참고하세요.

    다음은 custom-embedding-model 텍스트 임베딩 모델 엔드포인트에만 해당하는 변환 함수의 예입니다.

    -- Input Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT json_build_object('prompt', json_build_array(input_text))::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    -- Output Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON)
    RETURNS REAL[]
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_output REAL[];
    BEGIN
      SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  6. create model 함수를 호출하여 맞춤 임베딩 모델 엔드포인트를 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_request_url => 'REQUEST_URL',
        model_provider => 'custom',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_in_transform_fn => 'cymbal_text_input_transform',
        model_out_transform_fn => 'cymbal_text_output_transform');
    

    다음을 바꿉니다.

    • MODEL_ID: 필수 항목입니다. 정의한 모델 엔드포인트의 고유 ID입니다(예: custom-embedding-model). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • REQUEST_URL: 필수 항목입니다. 맞춤 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트입니다(예: https://cymbal.com/models/text/embeddings/v1).
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트에서 정규화된 이름을 사용하는 경우 필요합니다. 모델 엔드포인트에 여러 버전이 있는 경우의 정규화된 이름입니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID입니다.

OpenAI 텍스트 임베딩 3 소형 및 대형 모델

모델 엔드포인트에 관한 임베딩 예측 함수와 변환 함수를 사용하여 OpenAI text-embedding-3-smalltext-embedding-3-large 모델 엔드포인트를 등록할 수 있습니다. 다음 예는 OpenAI text-embedding-3-small 모델 엔드포인트를 등록하는 방법을 보여줍니다.

text-embedding-3-small 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 따르세요.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.
  3. 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다. 다른 OpenAI 모델에 대해 이미 보안 비밀을 만든 경우 동일한 보안 비밀을 재사용할 수 있습니다.
  4. Secret Manager에 저장된 보안 비밀을 호출합니다.

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',_
        secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    다음을 바꿉니다.

    • SECRET_ID: 사용자가 설정하고 이후 모델 엔드포인트를 등록할 때 사용되는 비밀 ID입니다.
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호입니다.
  5. 텍스트 임베딩 모델의 예측 함수에 관한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만듭니다. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예를 참고하세요. OpenAI 모델 엔드포인트에서 예상하는 입력 및 출력 형식에 대한 자세한 내용은 임베딩을 참고하세요.

    다음은 text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large OpenAI 텍스트 임베딩 모델 엔드포인트의 변환 함수 예입니다.

    -- Input Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    #variable_conflict use_variable
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT google_ml.model_qualified_name_of(model_id) INTO model_qualified_name;
      SELECT json_build_object('input', input_text, 'model', model_qualified_name)::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    
    -- Output Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_text_output_transform(model_id VARCHAR(100), response_json JSON)
    RETURNS REAL[]
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_output REAL[];
    BEGIN
      SELECT ARRAY(SELECT json_array_elements_text(response_json->'data'->0->'embedding')) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  6. create model 함수를 호출하여 text-embedding-3-small 임베딩 모델 엔드포인트를 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'open_ai',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'text-embedding-3-small',
        model_in_transform_fn => 'openai_text_input_transform',
        model_out_transform_fn => 'openai_text_output_transform');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다(예: openai-te-3-small). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID입니다.

자세한 내용은 다른 텍스트 임베딩 모델 엔드포인트의 임베딩을 생성하는 방법을 참고하세요.

일반 모델

이 섹션에서는 Hugging Face, OpenAI, Vertex AI 또는 기타 제공업체와 같이 호스팅된 모델 제공업체에서 사용할 수 있는 일반 모델 엔드포인트를 등록하는 방법을 보여줍니다. 이 섹션에서는 Hugging Face에 호스팅된 일반 모델 엔드포인트와 Vertex AI Model Garden의 내장 지원이 없는 일반 gemini-pro 모델을 등록하는 예를 보여줍니다.

입력과 출력이 JSON 형식인 경우 모든 일반 모델 엔드포인트를 등록할 수 있습니다. 모델 엔드포인트 메타데이터에 따라 HTTP 헤더를 생성하거나 엔드포인트를 정의해야 할 수 있습니다.

Hugging Face의 일반 모델

다음 예에서는 Hugging Face에 호스팅된 facebook/bart-large-mnli 맞춤 분류 모델 엔드포인트를 추가합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.
  3. 인증을 위해 Secret Manager에 보안 비밀로 bearer 토큰을 추가합니다.
  4. Secret Manager에 저장된 보안 비밀을 호출합니다.

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRE_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    다음을 바꿉니다.

    • SECRET_ID: 사용자가 설정하고 이후 모델 엔드포인트를 등록할 때 사용되는 비밀 ID입니다.
    • SECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 ID입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • VERSION_NUMBER: 보안 비밀 ID의 버전 번호입니다.
  5. 모델 만들기 함수를 호출하여 facebook/bart-large-mnli 모델 엔드포인트를 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'custom',
        model_request_url => 'REQUEST_URL',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다(예: custom-classification-model). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • REQUEST_URL: 커스텀 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트입니다(예: https://api-inference.huggingface.co/models/facebook/bart-large-mnli).
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트 버전의 정규화된 이름입니다(예: facebook/bart-large-mnli).
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID입니다.

Gemini 모델

클라우드 기반 Vertex AI 모델을 쿼리하도록 AlloyDB Omni를 설정해야 합니다.

다음 예에서는 Vertex AI Model Garden의 gemini-1.0-pro 모델 엔드포인트를 추가합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램을 만들고 사용 설정합니다.
  3. create model 함수를 호출하여 gemini-1.0-pro 모델을 등록합니다.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:streamGenerateContent',
        model_provider => 'google',
        model_auth_type => 'alloydb_service_agent_iam');
    

    다음을 바꿉니다.

    • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다(예: gemini-1). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.

자세한 내용은 일반 모델 엔드포인트의 예측을 호출하는 방법을 참고하세요.

다음 단계