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

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

시작하기 전에

확장 프로그램 설정

  1. psql을 사용하여 데이터베이스에 연결하거나 postgres 사용자를 사용하여 PostgreSQL용 AlloyDB Studio에 연결합니다.

  2. 선택사항: 멀티모달 모델, 순위 지정 모델, 연산자 함수 지원 등 PostgreSQL용 AlloyDB AI 쿼리 엔진 (미리보기) 기능과 상호작용할 수 있는 액세스 권한을 요청합니다.

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

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

    다음 변수를 바꿉니다.

    • NON_SUPER_USER: 슈퍼가 아닌 PostgreSQL 사용자 이름입니다.
  4. 아웃바운드 IP가 사용 설정되어 VPC 외부에서 호스팅되는 모델(예: 서드 파티 모델)에 액세스할 수 있는지 확인합니다. 자세한 내용은 아웃바운드 연결 추가를 참고하세요.

인증 설정

다음 섹션에서는 모델 엔드포인트를 등록하기 전에 인증을 설정하는 방법을 보여줍니다.

Vertex AI 인증 설정

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

Secret Manager를 사용하여 인증 설정

이 섹션에서는 Secret Manager를 사용하여 서드 파티 제공업체의 인증 세부정보를 저장하는 경우 인증을 설정하는 방법을 설명합니다.

모델 엔드포인트가 Secret Manager를 통한 인증을 처리하지 않는 경우(예: 모델 엔드포인트가 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우) 이 단계는 선택사항입니다.

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

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

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

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

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

    다음을 바꿉니다.

    • SECRET_NAME: Secret Manager의 보안 비밀 이름입니다.
    • SERVICE_ACCOUNT_ID: serviceAccount:service-PROJECT_ID@gcp-sa-alloydb.iam.gserviceaccount.com 형식의 IAM 기반 서비스 계정 ID입니다(예: service-212340152456@gcp-sa-alloydb.iam.gserviceaccount.com).

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

헤더를 사용하여 인증 설정

다음 예에서는 함수를 사용하여 인증을 설정하는 방법을 보여줍니다. 이 함수는 임베딩 모델에 요청을 보내는 데 필요한 헤더가 포함된 JSON 객체를 반환합니다.

  CREATE OR REPLACE FUNCTION HEADER_GEN_FUNCTION(
    model_id VARCHAR(100),
    input_text TEXT
  )
  RETURNS JSON
  LANGUAGE plpgsql
  AS $$
  #variable_conflict use_variable
  DECLARE
    api_key VARCHAR(255) := 'API_KEY';
    header_json JSON;
  BEGIN
    header_json := json_build_object(
      'Content-Type', 'application/json',
      'Authorization', 'Bearer ' || api_key
    );
    RETURN header_json;
  END;
  $$;

다음을 바꿉니다.

  • HEADER_GEN_FUNCTION: 모델을 등록할 때 사용할 수 있는 헤더 생성 함수의 이름입니다.
  • API_KEY: 모델 제공업체의 API 키입니다.

텍스트 임베딩 모델

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

모델 엔드포인트 관리는 사전 등록된 모델 엔드포인트로 일부 텍스트 임베딩 및 일반 Vertex AI 모델을 지원합니다. 모델 유형에 따라 모델 ID를 직접 사용하여 임베딩을 생성하거나 예측을 호출할 수 있습니다. 지원되는 사전 등록된 모델에 대한 자세한 내용은 사전 등록된 Vertex AI 모델을 참고하세요.

gemini-embedding-001 모델은 us-central1 리전에서만 사용할 수 있습니다.

예를 들어 사전 등록된 gemini-embedding-001 모델을 호출하려면 삽입 함수를 사용하여 모델을 직접 호출하면 됩니다.

SELECT
      embedding(
        model_id => 'gemini-embedding-001',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');

AlloyDB 클러스터와 Vertex AI 엔드포인트가 서로 다른 프로젝트에 있는 경우 model_id을 엔드포인트의 정규화된 경로(예: projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001)로 설정합니다.

마찬가지로 사전 등록된 gemini-1.5-pro:generateContent 모델을 호출하려면 예측 함수를 사용하여 모델을 직접 호출하면 됩니다.

 SELECT google_ml.predict_row(
            model_id => 'gemini-1.5-pro:generateContent',
            request_body => '{
        "contents": [
            {
                "role": "user",
                "parts": [
                    {
                        "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation. Only provide SQL query with no explanation."
                    }
                ]
            }
        ]
        }')-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';

임베딩을 생성하려면 텍스트 임베딩 생성 방법을 참고하세요. 예측을 호출하려면 예측을 호출하는 방법을 참고하세요.

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

모델 엔드포인트 관리는 Vertex AI 및 OpenAI의 일부 모델을 기본적으로 지원합니다. 기본 제공되는 지원 목록은 기본 제공되는 지원 목록을 참고하세요.

기본 지원이 있는 모델의 경우 정규화된 이름을 모델 정규화된 이름으로 설정하고 요청 URL을 지정할 수 있습니다. 모델 엔드포인트 관리는 모델을 자동으로 식별하고 기본 변환 함수를 설정합니다.

Vertex AI 임베딩 모델

다음 단계에서는 기본 지원을 사용하여 Vertex AI 모델을 등록하는 방법을 보여줍니다. gemini-embedding-001text-multilingual-embedding-002 모델 엔드포인트가 예로 사용됩니다.

쿼리하는 AlloyDB 클러스터와 Vertex AI 모델이 모두 동일한 리전에 있는지 확인하세요.

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

  2. google_ml_integration 확장 프로그램 설정

  3. create model 함수를 호출하여 모델 엔드포인트를 추가합니다.

    gemini-embedding-001

      CALL
        google_ml.create_model(
          model_id => 'gemini-embedding-001',
          model_request_url => 'publishers/google/models/gemini-embedding-001',
          model_provider => 'google',
          model_qualified_name => 'gemini-embedding-001',
          model_type => 'text_embedding',
          model_auth_type => 'alloydb_service_agent_iam');
    

    text-multilingual-embedding-002

      CALL
        google_ml.create_model(
          model_id => 'text-multilingual-embedding-002',
          model_request_url => 'publishers/google/models/text-multilingual-embedding-002',
          model_provider => 'google',
          model_qualified_name => 'text-multilingual-embedding-002',
          model_type => 'text_embedding',
          model_auth_type => 'alloydb_service_agent_iam'
          model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
          model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
    

모델이 AlloyDB 클러스터와 다른 프로젝트 및 리전에 저장된 경우 요청 URL을 projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID로 설정합니다. 여기서 REGION_ID은 모델이 호스팅된 리전이고 MODEL_ID은 정규화된 모델 이름입니다.

또한 AlloyDB가 다른 프로젝트에 호스팅된 모델에 액세스할 수 있도록 AlloyDB 인스턴스가 있는 프로젝트의 AlloyDB 서비스 계정에 Vertex AI 사용자 (roles/aiplatform.user) 역할을 부여합니다.

Open AI 텍스트 임베딩 모델

google_ml_integration 확장 프로그램은 기본 변환 함수를 자동으로 설정하고 원격 OpenAI 모델에 대한 호출을 호출합니다. 기본 제공 지원이 있는 OpenAI 모델 목록은 기본 제공 지원이 있는 모델을 참고하세요.

다음 예에서는 text-embedding-ada-002 OpenAI 모델 엔드포인트를 추가합니다. 동일한 단계를 사용하고 모델에 맞는 모델 정규화된 이름을 설정하여 OpenAI text-embedding-3-smalltext-embedding-3-large 모델 엔드포인트를 등록할 수 있습니다.

  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. create model 함수를 호출하여 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 헤더를 만드는 것과 함께 맞춤 호스팅 모델 엔드포인트를 등록하는 방법을 보여줍니다. 호스팅 위치와 관계없이 모든 커스텀 호스팅 모델 엔드포인트가 지원됩니다.

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

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

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

  2. google_ml_integration 확장 프로그램 설정

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

  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). 내부 IP 주소를 통해 모델 엔드포인트에 액세스할 수 있는지 확인합니다. 모델 엔드포인트 관리에서는 공개 IP 주소를 지원하지 않습니다.
    • MODEL_QUALIFIED_NAME: 모델 엔드포인트가 정규화된 이름을 사용하는 경우 필수입니다. 모델 엔드포인트에 버전이 여러 개 있는 경우의 정규화된 이름입니다.
    • SECRET_ID: 앞의 google_ml.create_sm_secret() 절차에서 사용한 보안 비밀 ID

기본 지원이 포함된 멀티모달 모델

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)
            

모델을 호출하여 멀티모달 임베딩 생성

모델 엔드포인트 관리는 Vertex AI의 multimodalembedding@001 모델을 기본적으로 지원하므로 모델을 직접 호출하여 멀티모달 임베딩을 생성할 수 있습니다.

다음 예시에서는 multimodalembedding@001 정규화된 모델 이름을 모델 ID로 사용하여 멀티모달 이미지 임베딩을 생성합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 설정
  3. 멀티모달 이미지 임베딩을 생성합니다.

    SELECT
      ai.image_embedding(
        model_id => 'multimodalembedding@001',
        image => 'IMAGE_PATH_OR_TEXT',
        mimetype => 'MIMETYPE');
    

다음을 바꿉니다.

  • 이미지의 Cloud Storage 경로가 있는 IMAGE_PATH_OR_TEXT(예: gs://cymbal_user_data/image-85097193-cd9788aacebb.jpeg)를 사용하여 이미지의 벡터 삽입 또는 base64 문자열로 변환합니다.
  • MIMETYPE을 이미지의 MIME 유형으로 바꿉니다.

순위 모델

Vertex AI 순위 모델

등록하지 않고도 지원되는 모델에 언급된 Vertex AI 모델을 사용할 수 있습니다.

Vertex AI 순위 지정 모델을 사용하여 검색 결과를 순위 지정하는 방법을 알아보려면 검색 결과 순위 지정을 참고하세요.

서드 파티 순위 모델 등록

다음 예에서는 Cohere의 재순위 지정 모델을 등록하는 방법을 보여줍니다.

CREATE OR REPLACE FUNCTION cohere_rerank_input_transform(
    model_id VARCHAR(100),
    search_string TEXT,
    documents TEXT[],
    top_n INT DEFAULT NULL
)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
  transformed_input JSONB;
BEGIN
  -- Basic Input Validation
  IF search_string IS NULL OR search_string = '' THEN
    RAISE EXCEPTION 'Invalid input: search_string cannot be NULL or empty.';
  END IF;

  IF documents IS NULL OR array_length(documents, 1) IS NULL OR array_length(documents, 1) = 0 THEN
    RAISE EXCEPTION 'Invalid input: documents array cannot be NULL or empty.';
  END IF;

  IF top_n IS NOT NULL AND top_n < 0 THEN
    RAISE EXCEPTION 'Invalid input: top_n must be greater than or equal to zero. Provided value: %', top_n;
  END IF;

  -- Construct the base JSON payload for Cohere Rerank API
  transformed_input := jsonb_build_object(
    'model', google_ml.model_qualified_name_of(model_id),
    'query', search_string,
    'documents', to_jsonb(documents), -- Convert TEXT[] directly to JSON array
    'return_documents', false -- Explicitly set to false (optional, as its default)
  );

  -- Add top_n to the payload only if it's provided and valid
  IF top_n IS NOT NULL THEN
     transformed_input := transformed_input || jsonb_build_object('top_n', top_n);
  END IF;

  -- Return the final JSON payload
  RETURN transformed_input::JSON;

END;
$$;

CREATE OR REPLACE FUNCTION cohere_rerank_output_transform(
    model_id VARCHAR(100),
    response_json JSON
)
RETURNS TABLE (index INT, score REAL)
LANGUAGE plpgsql
AS $$
DECLARE
  result_item JSONB;
  response_jsonb JSONB;
  cohere_index INT; -- 0-based index from Cohere response
BEGIN
  -- Validate response_json
  IF response_json IS NULL THEN
    RAISE EXCEPTION 'Invalid model response: response cannot be NULL.';
  END IF;

  -- Convert JSON to JSONB for easier processing
  response_jsonb := response_json::JSONB;

  -- Check top-level structure
  IF jsonb_typeof(response_jsonb) != 'object' THEN
    RAISE EXCEPTION 'Invalid model response: response must be a JSON object. Found: %', jsonb_typeof(response_jsonb);
  END IF;

  -- Check for the 'results' array
  IF response_jsonb->'results' IS NULL OR jsonb_typeof(response_jsonb->'results') != 'array' THEN
    -- Check for potential Cohere error structure
    IF response_jsonb->'message' IS NOT NULL THEN
       RAISE EXCEPTION 'Cohere API Error: %', response_jsonb->>'message';
    ELSE
       RAISE EXCEPTION 'Invalid model response: response does not contain a valid "results" array.';
    END IF;
  END IF;

  -- Loop through the 'results' array (JSONB array indices are 0-based)
  FOR i IN 0..jsonb_array_length(response_jsonb->'results') - 1 LOOP
    result_item := response_jsonb->'results'->i;

    -- Validate individual result item structure
    IF result_item IS NULL OR jsonb_typeof(result_item) != 'object' THEN
      RAISE WARNING 'Skipping invalid result item at array index %.', i;
      CONTINUE;
    END IF;

    IF result_item->'index' IS NULL OR jsonb_typeof(result_item->'index') != 'number' THEN
       RAISE WARNING 'Missing or invalid "index" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    IF result_item->'relevance_score' IS NULL OR jsonb_typeof(result_item->'relevance_score') != 'number' THEN
       RAISE WARNING 'Missing or invalid "relevance_score" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    -- Extract values
    BEGIN
      cohere_index := (result_item->>'index')::INT;
      -- Assign values to the output table columns
      -- Cohere returns 0-based index, map it to 1-based for consistency
      -- with input document array position
      index := cohere_index + 1;
      score := (result_item->>'relevance_score')::REAL;
      RETURN NEXT; -- Return the current row
    EXCEPTION WHEN others THEN
      RAISE WARNING 'Error processing result item at array index %: %', i, SQLERRM;
      CONTINUE; -- Skip this item and continue with the next
    END;
  END LOOP;

  RETURN; -- End of function
END;
$$;

CALL
  google_ml.create_sm_secret(
    '<SECRET_ID>',
    'projects/<PROJECT_NUMBER>/secrets/<SECRET_ID>/versions/latest');

CALL
  google_ml.create_model(
    model_id => 'cohere-reranker',
    model_type => 'reranking',
    model_provider => 'custom',
    model_request_url => 'https://api.cohere.com/v2/rerank',
    model_qualified_name => 'rerank-v3.5',
    model_auth_type => 'secret_manager',
    model_auth_id => '<SECRET_ID>',
    model_in_transform_fn => 'cohere_rerank_input_transform',
    model_out_transform_fn => 'cohere_rerank_output_transform'
  );

일반 모델

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

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

사전 등록된 일반 모델 및 기본 제공 지원 모델에 대한 자세한 내용은 지원되는 모델을 참고하세요.

일반 Gemini 모델

이 섹션에서는 일반 Gemini 모델을 등록하는 방법을 보여줍니다.

gemini-1.5-pro 모델

일부 gemini-pro 모델은 사전 등록되어 있으므로 모델 ID를 직접 호출하여 예측을 호출할 수 있습니다.

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

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 설정
  3. 사전 등록된 모델 ID를 사용하여 예측을 호출합니다.

    SELECT
        json_array_elements(
        google_ml.predict_row(
            model_id => 'gemini-1.5-pro:generateContent',
            request_body => '{
        "contents": [
            {
                "role": "user",
                "parts": [
                    {
                        "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation."
                    }
                ]
            }
        ]
        }'))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';
    

Hugging Face의 일반 모델

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

  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. create model 함수를 호출하여 facebook/bart-large-mnli 모델 엔드포인트를 등록하세요.

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'hugging_face',
        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

Anthropic 일반 모델

다음 예에서는 claude-3-opus-20240229 모델 엔드포인트를 추가합니다. 모델 엔드포인트 관리는 Anthropic 모델을 등록하는 데 필요한 헤더 함수를 제공합니다.

  1. psql를 사용하여 데이터베이스에 연결합니다.
  2. google_ml_integration 확장 프로그램 만들기 및 사용 설정

    Secret Manager

    1. 인증을 위해 Secret Manager에 베어러 토큰을 보안 비밀로 추가합니다.
    2. 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의 버전 번호
    3. create model 함수를 호출하여 claude-3-opus-20240229 모델 엔드포인트를 등록합니다.

      CALL
        google_ml.create_model(
          model_id => 'MODEL_ID',
          model_provider => 'anthropic',
          model_request_url => 'REQUEST_URL',
          model_auth_type => 'secret_manager',
          model_auth_id => 'SECRET_ID',
          generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
      

      다음을 바꿉니다.

      • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다(예: anthropic-opus). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
      • REQUEST_URL: 맞춤 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트(예: https://api.anthropic.com/v1/messages).

    인증 헤더

    1. google_ml.anthropic_claude_header_gen_fn 기본 헤더 생성 함수를 사용하거나 헤더 생성 함수를 만듭니다.

        CREATE OR REPLACE FUNCTION anthropic_sample_header_gen_fn(model_id VARCHAR(100), request_body JSON)
        RETURNS JSON
        LANGUAGE plpgsql
        AS $$
        #variable_conflict use_variable
        BEGIN
              RETURN json_build_object('x-api-key', 'ANTHROPIC_API_KEY', 'anthropic-version', 'ANTHROPIC_VERSION')::JSON;
        END;
        $$;
      

      다음을 바꿉니다.

      • ANTHROPIC_API_KEY: Anthropic API 키입니다.
      • ANTHROPIC_VERSION(선택사항): 사용할 특정 모델 버전입니다(예: 2023-06-01).
    2. create model 함수를 호출하여 claude-3-opus-20240229 모델 엔드포인트를 등록합니다.

      CALL
        google_ml.create_model(
          model_id => 'MODEL_ID',
          model_provider => 'anthropic',
          model_request_url => 'REQUEST_URL',
          generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
      

      다음을 바꿉니다.

      • MODEL_ID: 정의한 모델 엔드포인트의 고유 ID입니다(예: anthropic-opus). 이 모델 ID는 모델 엔드포인트가 임베딩을 생성하거나 예측을 호출하는 데 필요한 메타데이터에 대해 참조됩니다.
      • REQUEST_URL: 맞춤 텍스트 임베딩 및 일반 모델 엔드포인트를 추가할 때의 모델별 엔드포인트(예: https://api.anthropic.com/v1/messages).

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

다음 단계