모델 엔드포인트 관리를 사용하여 원격 AI 모델 등록 및 호출

이 페이지에서는 모델을 사용하여 예측을 호출하거나 임베딩을 생성한 다음 모델 엔드포인트를 모델 엔드포인트 관리에 등록하는 방법을 설명합니다.

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

시작하기 전에

  • 모델 공급자별로 인증을 설정하세요.

인증 설정

다음 섹션에서는 Vertex AI 모델 엔드포인트 또는 Google Cloud내에서 호스팅되는 모델 엔드포인트를 추가하기 전에 인증을 설정하는 방법을 보여줍니다.

Vertex AI 인증 설정

Google Vertex AI 모델 엔드포인트를 사용하려면 데이터베이스에 연결하는 데 사용하는 IAM 기반 Cloud SQL 서비스 계정에 Vertex AI 권한을 추가해야 합니다. Vertex AI와의 통합에 대한 자세한 내용은 Vertex AI와 Cloud SQL 통합을 참고하세요.

커스텀 호스팅 모델의 인증 설정

이 섹션에서는 Secret Manager를 사용하는 경우 인증을 설정하는 방법을 설명합니다. Vertex AI 모델 엔드포인트를 제외한 모든 모델의 경우 API 키 또는 Bearer 토큰을 Secret Manager에 저장할 수 있습니다.

모델 엔드포인트가 Secret Manager를 통한 인증을 처리하지 않는 경우 이 섹션은 선택사항입니다. 예를 들어 모델 엔드포인트가 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우 이 섹션의 단계를 완료하지 마세요.

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

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

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

  2. Cloud SQL 인스턴스에 보안 비밀에 액세스할 수 있는 권한을 부여합니다.

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

    다음을 바꿉니다.

    • SECRET_ID: Secret Manager의 보안 비밀 ID
    • SERVICE_ACCOUNT_EMAIL: IAM 기반 Cloud SQL 서비스 계정의 이메일 주소입니다. 이 이메일 주소를 찾으려면 gcloud sql instances describe INSTANCE_NAME 명령어를 사용하고 INSTANCE_NAME을 인스턴스의 이름으로 바꿉니다. serviceAccountEmailAddress 매개변수 옆에 표시되는 값은 이메일 주소입니다.

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

이 섹션에서는 모델 엔드포인트 관리를 위해 모델 엔드포인트를 등록하는 방법을 보여줍니다.

Vertex AI 임베딩 모델

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

Vertex AI 임베딩 모델 엔드포인트 ID는 모델 엔드포인트 관리에서 기본적으로 지원되므로 모델 ID로 직접 사용할 수 있습니다. 이러한 모델의 경우 임베딩 함수가 입력 및 출력 변환을 자동으로 실행합니다.

쿼리하는 Cloud SQL 인스턴스와 Vertex AI 모델이 모두 동일한 리전에 있는지 확인하세요.

gemini-embedding-001 모델 엔드포인트를 등록하려면 ml_create_model_registration 함수를 호출하세요.

  CALL
    mysql.ml_create_model_registration(
      'gemini-embedding-001',
      'publishers/google/models/gemini-embedding-001',
      'google','text_embedding', 'gemini-embedding-001',
      'AUTH_TYPE_CLOUDSQL_SERVICE_AGENT_IAM',
       NULL,
      'mysql.cloudsql_ml_text_embedding_input_transform',
      'mysql.cloudsql_ml_text_embedding_output_transform', NULL);

맞춤 호스팅 텍스트 임베딩 모델

이 섹션에서는 Google Cloud내 네트워크에서 호스팅되는 맞춤 모델 엔드포인트를 등록하는 방법을 보여줍니다.

맞춤 호스팅 텍스트 임베딩 모델 엔드포인트를 추가하려면 변환 함수와 선택적으로 맞춤 HTTP 헤더를 만들어야 합니다. 반면, 커스텀 호스팅 일반 모델 엔드포인트를 추가하는 경우 선택적으로 커스텀 HTTP 헤더를 생성하고 모델 요청 URL을 설정해야 합니다.

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

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

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

    CALL
      mysql.ml_create_sm_secret_registration(
        'SECRET_ID',
        '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의 버전 번호
  2. 텍스트 임베딩 모델 엔드포인트의 예측 함수에 대한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만듭니다. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예시를 참조하세요.

    다음은 custom-embedding-model 텍스트 임베딩 모델 엔드포인트에 특화된 변환 함수의 예입니다.

    -- Input Transform Function corresponding to the custom model endpoint
    DELIMITER $$
    CREATE FUNCTION IF NOT EXISTS cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    DETERMINISTIC
    
    BEGIN
      RETURN JSON_OBJECT('prompt', JSON_ARRAY(input_text));
    END $$
    
    -- Output Transform Function corresponding to the custom model endpoint
    CREATE FUNCTION IF NOT EXISTS cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON)
    RETURNS BLOB
    DETERMINISTIC
    
    BEGIN
      RETURN STRING_TO_VECTOR(
             JSON_EXTRACT(
                  content,
                  '$.predictions[0].embeddings.values'
                )
         );
    
    END $$
    DELIMITER ;
    
  3. create model 함수를 호출하여 맞춤 임베딩 모델 엔드포인트를 등록하세요.

   CALL
      mysql.ml_create_model_registration(
        'MODEL_ID',
        'REQUEST_URL',
        'custom',
        'text_embedding',
        'MODEL_QUALIFIED_NAME',
        'auth_type_secret_manager',
        'SECRET_ID'
        'database_name.cymbal_text_input_transform',
        'database_name.cymbal_text_output_transform', NULL);

다음을 바꿉니다.

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

일반 모델

이 섹션에서는 Vertex AI Model Garden에서 일반 gemini-flash 모델 엔드포인트를 등록하는 방법을 보여줍니다. 이 엔드포인트는 기본적으로 카탈로그에 사전 등록되어 있습니다. Google Cloud내에서 호스팅되는 일반 모델 엔드포인트를 등록할 수 있습니다.

Cloud SQL은 Vertex AI Model Garden을 통해 사용할 수 있는 모델 엔드포인트와 Google Cloud내 네트워크에 호스팅된 모델 엔드포인트만 지원합니다.

Gemini 모델

다음 예에서는 Vertex AI Model Garden의 gemini-2.5-flash 모델 엔드포인트를 사용합니다.

gemini-2.5-flash 모델 엔드포인트를 등록하려면 mysql.ml_create_model_registration 함수를 호출하세요.

    CALL
      mysql.ml_create_model_registration(
        'MODEL_ID',
        'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-2.5-flash:streamGenerateContent',
        'google',
        'auth_type_cloudsql_service_agent_iam',
        NULL, NULL, NULL, NULL);

다음을 바꿉니다.

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

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

다음 단계