이 페이지에서는 모델 엔드포인트를 모델 엔드포인트 관리에 등록하여 모델을 사용해 예측을 호출하거나 임베딩을 생성하는 방법을 설명합니다.
시작하기 전에
확장 프로그램 설정
psql을 사용하여 데이터베이스에 연결하거나postgres사용자를 사용하여 PostgreSQL용 AlloyDB Studio에 연결합니다.선택사항: 멀티모달 모델, 순위 지정 모델, 연산자 함수 지원을 포함한 PostgreSQL용 AlloyDB AI 함수(프리뷰)와 상호작용할 수 있는 액세스 권한을 요청합니다.
(선택사항) 모델 메타데이터를 관리할 수 있는 권한을 최고 관리자가 아닌 PostgreSQL 사용자에게 부여합니다.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;다음 변수를 바꿉니다.
NON_SUPER_USER: 슈퍼가 아닌 PostgreSQL 사용자 이름
아웃바운드 IP가 사용 설정되어 VPC 외부에서 호스팅되는 모델(예: 서드 파티 모델)에 액세스할 수 있는지 확인합니다. 자세한 내용은 아웃바운드 연결 추가를 참고하세요.
인증 설정
다음 섹션에서는 모델 엔드포인트를 등록하기 전에 인증을 설정하는 방법을 보여줍니다.
Vertex AI와 통합 및 확장 프로그램 설치
Vertex AI 모델 엔드포인트를 사용하려면 데이터베이스에 연결하는 데 사용하는 IAM 기반 AlloyDB 서비스 계정에 Vertex AI 권한을 추가해야 합니다.
- Vertex AI 모델에 대한 사용자 액세스 권한을 구성합니다.
- 최신 버전의
google_ml_integration이 설치되어 있는지 확인합니다.설치된 버전을 확인하려면 다음 명령어를 실행합니다.
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
확장 프로그램이 설치되지 않았거나 설치된 버전이 1.5.2 이전이면 확장 프로그램을 업데이트합니다.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
위 명령어를 실행할 때 문제가 발생하거나 위 명령어를 실행한 후에도 확장 프로그램이 1.5.2 버전으로 업데이트되지 않으면 Google Cloud 지원팀에 문의하세요.
AlloyDB AI 쿼리 엔진 기능을 사용하려면
google_ml_integration.enable_ai_query_engine플래그를true로 설정합니다.SQL
- 현재 세션에 AI 쿼리 엔진을 사용 설정합니다.
SET google_ml_integration.enable_ai_query_engine = true;
- 세션 간에 특정 데이터베이스 기능을 사용 설정합니다.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- 세션과 데이터베이스 전반에서 특정 사용자에 AI 쿼리 엔진을 사용 설정합니다.
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
콘솔
google_ml_integration.enable_ai_query_engine플래그 값을 수정하려면 인스턴스의 데이터베이스 플래그 구성의 단계를 수행합니다.gcloud
gcloud CLI를 사용하려면 Google Cloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.
google_ml_integration.enable_ai_query_engine플래그 값을 수정할 수 있습니다. 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_ml_integration.enable_ai_query_engine=on \ --region=REGION_ID \ --cluster=CLUSTER_ID \ --project=PROJECT_ID
- 현재 세션에 AI 쿼리 엔진을 사용 설정합니다.
Secret Manager를 사용하여 인증 설정
이 섹션에서는 Secret Manager를 사용하여 서드 파티 제공업체의 인증 세부정보를 저장하는 경우 인증을 설정하는 방법을 설명합니다.
모델 엔드포인트에서 Secret Manager를 통한 인증을 처리하지 않는 경우(예: 모델 엔드포인트에서 HTTP 헤더를 사용하여 인증 정보를 전달하거나 인증을 전혀 사용하지 않는 경우) 이 단계는 선택사항입니다.
API 키 또는 Bearer 토큰을 만들고 사용하려면 다음 단계를 완료하세요.
Secret Manager에서 보안 비밀을 만듭니다. 자세한 내용은 보안 비밀 만들기 및 보안 비밀 버전 액세스를 참조하세요.
보안 비밀 경로는
google_ml.create_sm_secret()SQL 함수에서 사용됩니다.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)프로젝트 수준에서 서비스 계정에 이 역할을 부여할 수도 있습니다. 자세한 내용은 Identity and Access Management 정책 바인딩 추가를 참조하세요.
헤더를 사용하여 인증 설정
다음 예시에서는 함수를 사용하여 인증을 설정하는 방법을 보여줍니다. 이 함수는 임베딩 모델에 요청을 보내는 데 필요한 헤더가 포함된 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-001 및 text-multilingual-embedding-002 모델 엔드포인트가 예시로 사용됩니다.
AlloyDB 클러스터와 쿼리 대상 Vertex AI 모델이 동일한 리전에 있어야 합니다.
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) 역할을 부여합니다.
개방형 AI 텍스트 임베딩 모델
google_ml_integration 확장 프로그램은 기본 변환 함수를 자동으로 설정하고 원격 OpenAI 모델에 대한 호출을 호출합니다. 기본 제공 지원이 포함된 OpenAI 모델 목록은 기본 제공 지원이 포함된 모델을 참조하세요.
다음 예시에서는 text-embedding-ada-002 OpenAI 모델 엔드포인트를 추가합니다.
동일한 단계를 사용하여 OpenAI text-embedding-3-small 및 text-embedding-3-large 모델 엔드포인트를 등록하고 모델에 맞는 정규화된 모델 이름을 설정할 수 있습니다.
psql을 사용하여 데이터베이스에 연결합니다.google_ml_integration확장 프로그램을 설정합니다.- 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다.
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에 설정된 보안 비밀 IDPROJECT_ID: Google Cloud 프로젝트의 IDVERSION_NUMBER: 보안 비밀 ID의 버전 번호
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_transform 및 cymbal_text_output_transform 변환 함수는 모델의 입력 및 출력 형식을 예측 함수의 입력 및 출력 형식으로 변환하는 데 사용됩니다.
커스텀 호스팅 텍스트 임베딩 모델 엔드포인트를 등록하려면 다음 단계를 완료합니다.
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에 설정된 보안 비밀 IDPROJECT_ID: Google Cloud 프로젝트의 IDVERSION_NUMBER: 보안 비밀 ID의 버전 번호
텍스트 임베딩 모델 엔드포인트의 예측 함수에 대한 다음 서명을 기반으로 입력 및 출력 변환 함수를 만드십시오. 변환 함수를 만드는 방법에 관한 자세한 내용은 변환 함수 예시를 참조하세요.
다음은
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; $$;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와 통합 및 확장 프로그램 설치
- Vertex AI 모델에 대한 사용자 액세스 권한을 구성합니다.
- 최신 버전의
google_ml_integration이 설치되어 있는지 확인합니다.설치된 버전을 확인하려면 다음 명령어를 실행합니다.
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
확장 프로그램이 설치되지 않았거나 설치된 버전이 1.5.2 이전이면 확장 프로그램을 업데이트합니다.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
위 명령어를 실행할 때 문제가 발생하거나 위 명령어를 실행한 후에도 확장 프로그램이 1.5.2 버전으로 업데이트되지 않으면 Google Cloud 지원팀에 문의하세요.
AlloyDB AI 쿼리 엔진 기능을 사용하려면
google_ml_integration.enable_ai_query_engine플래그를true로 설정합니다.SQL
- 현재 세션에 AI 쿼리 엔진을 사용 설정합니다.
SET google_ml_integration.enable_ai_query_engine = true;
- 세션 간에 특정 데이터베이스 기능을 사용 설정합니다.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- 세션과 데이터베이스 전반에서 특정 사용자에 AI 쿼리 엔진을 사용 설정합니다.
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
콘솔
google_ml_integration.enable_ai_query_engine플래그 값을 수정하려면 인스턴스의 데이터베이스 플래그 구성의 단계를 수행합니다.gcloud
gcloud CLI를 사용하려면 Google Cloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.
google_ml_integration.enable_ai_query_engine플래그 값을 수정할 수 있습니다. 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_ml_integration.enable_ai_query_engine=on \ --region=REGION_ID \ --cluster=CLUSTER_ID \ --project=PROJECT_ID
- 현재 세션에 AI 쿼리 엔진을 사용 설정합니다.
모델을 호출하여 멀티모달 임베딩 생성
모델 엔드포인트 관리는 Vertex AI의 multimodalembedding@001 모델을 기본적으로 지원하므로 모델을 직접 호출하여 멀티모달 임베딩을 생성할 수 있습니다.
다음 예시에서는 multimodalembedding@001 정규화된 모델 이름을 모델 ID로 사용하여 멀티모달 이미지 임베딩을 생성합니다.
psql을 사용하여 데이터베이스에 연결합니다.google_ml_integration확장 프로그램을 설정합니다.멀티모달 이미지 임베딩을 생성합니다.
SELECT ai.image_embedding( model_id => 'multimodalembedding@001', image => 'IMAGE_PATH_OR_TEXT', mimetype => 'MIMETYPE');
다음을 바꿉니다.
- IMAGE_PATH_OR_TEXT: 이미지의 base64 문자열 또는 벡터 임베딩으로의 변환을 위한, 이미지의 Cloud Storage 경로(예:
gs://cymbal_user_data/image-85097193-cd9788aacebb.jpeg) - 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 모델 엔드포인트를 사용합니다.
psql을 사용하여 데이터베이스에 연결합니다.google_ml_integration확장 프로그램을 설정합니다.사전 등록된 모델 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 커스텀 분류 모델 엔드포인트를 추가합니다.
psql을 사용하여 데이터베이스에 연결합니다.google_ml_integration확장 프로그램을 설정합니다.- 인증을 위해 OpenAI API 키를 Secret Manager에 보안 비밀로 추가합니다. 다른 OpenAI 모델의 보안 비밀을 이미 만든 경우 동일한 보안 비밀을 재사용할 수 있습니다.
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: 개발자가 설정하고 이후 모델 엔드포인트를 등록할 때 사용되는 보안 비밀 IDSECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 IDPROJECT_ID: Google Cloud 프로젝트의 IDVERSION_NUMBER: 보안 비밀 ID의 버전 번호
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 모델을 등록하는 데 필요한 헤더 함수를 제공합니다.
psql을 사용하여 데이터베이스에 연결합니다.google_ml_integration확장 프로그램을 만들고 사용 설정합니다.Secret Manager
- 인증을 위해 Secret Manager에 Bearer 토큰을 보안 비밀로 추가합니다.
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: 개발자가 설정하고 이후 모델 엔드포인트를 등록할 때 사용되는 보안 비밀 IDSECRET_MANAGER_SECRET_ID: 보안 비밀을 만들 때 Secret Manager에 설정된 보안 비밀 IDPROJECT_ID: Google Cloud 프로젝트의 IDVERSION_NUMBER: 보안 비밀 ID의 버전 번호
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)
인증 헤더
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)
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)
자세한 내용은 일반 모델 엔드포인트의 예측 호출 방법을 참조하세요.
Vertex AI Model Garden의 모델
일반 모델 외에도 특정 태스크에 최적화된 Vertex AI Model Garden의 모델을 등록할 수 있습니다. 일반적인 프로세스는 먼저 Model Garden에서 공개 Vertex AI 엔드포인트로 모델을 배포한 후 PostgreSQL용 AlloyDB에 해당 엔드포인트를 등록하는 것입니다. 이러한 태스크별 모델은 전용 model_type으로 등록되고 특수 SQL 함수와 함께 사용되는 경우가 많습니다.
TimesFM 모델로 시계열 예측
태스크별 모델의 일반적인 사용 사례는 TimesFM 모델로 시계열 예측을 수행하는 것입니다.
이 모델을 배포하고 등록하려면 다음 단계를 완료합니다.
TimesFM 모델을 Model Garden에서 Vertex AI 엔드포인트에 배포하여 다음과 같이 모델 요청 URL을 가져옵니다.
Google Cloud 콘솔에서 Model Garden 페이지로 이동합니다.
TimesFM모델을 찾고 배포를 선택합니다.배포 설정의 엔드포인트 액세스에서 공개(공유 엔드포인트)를 선택하여 엔드포인트가 공개적으로 액세스 가능하고 PostgreSQL용 AlloyDB에서 연결할 수 있도록 합니다.
배포가 완료되면 엔드포인트의 세부정보 페이지로 이동하고 샘플 요청 창에서 모델 요청 URL을 복사합니다.
배포된 TimesFM 모델을 PostgreSQL용 AlloyDB에 등록하려면
google_ml.create_model함수를 사용합니다. 시계열 예측의 경우model_type은ts_forecasting이어야 합니다.
CALL
google_ml.create_model(
model_id => 'vertex_timesfm',
model_qualified_name => 'timesfm_v2',
model_type => 'ts_forecasting',
model_provider => 'google',
model_request_url => 'https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID:predict',
model_auth_type => 'alloydb_service_agent_iam'
);
모델을 등록하면 ai.forecast() 또는 google_ml.forecast() 함수를 사용하여 예측을 생성할 수 있습니다.
다음 단계
- 모델 엔드포인트 관리 참조에 대해 알아보기
- 모델 엔드포인트 등록을 위한 샘플 템플릿 사용하기
- 멀티모달 임베딩 생성
- RAG의 검색 결과 순위 지정 및 점수 매기기
- SQL 연산자에서 자연어 사용