PostgreSQL용 AlloyDB에서 최적화된 AI 함수를 사용하여 운영 비용을 줄이고 쿼리 응답성을 개선할 수 있습니다. 최적화된 AI 함수는 더 작고 빠른 프록시 모델로 대부분의 쿼리를 처리하고 필요한 경우에만 더 큰 LLM으로 대체하여 행별 분류 또는 필터링 작업에 대규모 언어 모델(LLM) 사용을 최소화합니다.
ai.if()와 같은 AlloyDB AI 함수는 LLM에 대한 원격 호출로 인해 지연 시간이 길어질 수 있습니다. 최적화된 함수는 더 작고 로컬에서 학습된 프록시 모델(예: 로지스틱 회귀 모델)을 사용하여 쿼리를 처리함으로써 이 지연 시간 문제를 해결합니다. 이러한 모델은 LLM의 출력을 정답 소스로 사용하여 데이터 샘플을 기반으로 학습됩니다.
google_ml_integration.proxy_models_enable_accuracy_check 플래그를 사용하여 런타임에 정확성 검사를 수행하도록 구성할 수 있습니다. 이 플래그는 기본적으로 off로 설정됩니다. 정확성 검사는 기준 LLM을 사용하여 쿼리의 행 샘플을 평가하여 정확성이 google_ml_integration.proxy_models_f1_score_threshold 플래그로 정의된 기준점을 충족하는지 확인합니다. 정확성 검사가 실패하면 쿼리는 LLM을 사용하도록 대체됩니다(또는 대체가 사용 중지된 경우 오류가 발생함).
최적화된 AI 함수 워크플로
최적화된 AI 함수를 사용하고 google_ml_integration.proxy_models_enable_accuracy_check 플래그를 true로 설정하면 AlloyDB는 다음을 수행합니다.
학습 예약: 테이블에서
ai.if()함수가 포함된 쿼리를 실행하면 AlloyDB가 백그라운드에서 경량 프록시 모델의 학습을 자동으로 예약합니다.LLM으로 대체: 프록시 모델이 학습 중이거나 프록시 모델을 사용할 수 없는 경우 AlloyDB는 원격 LLM을 사용하여 쿼리를 평가합니다(대체가 사용 중지되지 않은 경우).
최적화된 쿼리 실행: 모델이 학습된 후 AlloyDB는 학습된 프록시 모델을 사용하여 후속 쿼리를 로컬에서 처리하므로 성능이 향상됩니다.
다음 다이어그램은 최적화된 AI 함수를 사용하여 쿼리를 처리하는 로직 흐름을 보여줍니다.
시작하기 전에
최적화된 AI 함수를 사용하기 전에 다음을 수행하세요.
- psql을 사용하여 데이터베이스에 연결
postgres사용자 또는 데이터가 있는 테이블에 액세스할 수 있는 사용자로 AlloyDB Studio를 사용하여 연결할 수도 있습니다. google_ml_integration확장 프로그램 버전 1.6.3 이상이 설치되어 있는지 확인합니다.SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';출력은 다음과 비슷합니다.
extversion ------------ 1.6.3 (1 row)확장 프로그램이 설치되지 않았거나 버전 1.6.3 이전인 경우 확장 프로그램을 업데이트합니다.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;Gemini Enterprise Agent Platform과 호환되도록 AlloyDB를 구성합니다. 자세한 내용은 Agent Platform과 통합을 참조하세요.
다음 인스턴스 수준 데이터베이스 플래그가 사용 설정되어 있는지 확인합니다. 자세한 내용은 지원되는 데이터베이스 플래그, 최적화된 AI 함수에 대한 데이터베이스 플래그, 인스턴스의 데이터베이스 플래그 구성을 참조하세요.
SQL(
SET또는ALTER DATABASE)을 사용하여 세션 또는 데이터베이스 수준에서 구성할 수 있는 대체 및 정확성 검증 데이터베이스 플래그를 검토합니다.google_ml_integration.proxy_models_enable_llm_fallback: 프록시 모델을 사용할 수 없는 경우 쿼리가 원격 LLM으로 대체되는지 여부를 제어합니다. 이 플래그는 기본적으로on로 설정됩니다.off로 설정하면 데이터베이스가 원격 LLM으로 대체되는 대신 오류를 발생시킵니다.google_ml_integration.proxy_models_enable_accuracy_check: 기준 LLM에 대한 런타임 정확성 검사를 사용 설정합니다. 이 플래그는 기본적으로off로 설정됩니다.
정기 재학습 데이터베이스 플래그를 검토합니다.
google_ml_integration.proxy_models_retraining_interval_minutes: 백그라운드 재학습 작업의 빈도를 분 단위로 제어합니다. 기본값은1440(24시간)입니다.0로 설정하면 주기적 재학습이 사용 중지됩니다.google_ml_integration.proxy_models_retraining_batch_size: 단일 반복에서 재학습되는 모델 수를 제어합니다(기본값은1).
AlloyDB Omni의 경우 다음 확장 프로그램이
shared_preload_libraries에 로드되었는지 확인합니다.google_job_schedulergoogle_ml_integration
쿼리하려는 테이블의 임베딩을 생성합니다. 자세한 내용은 대규모 테이블의 자동 벡터 임베딩 생성 및 관리를 참조하세요.
다음 요구사항을 고려하세요.
- 소스 데이터 열은
TEXT또는VARCHAR유형이어야 합니다. - 최적화된 AI 함수에 입력을 제공하는 임베딩 열은
REAL[]또는VECTOR유형이어야 합니다. - 최적화된 AI 함수는 Agent Platform 생성 모델을 사용할 수 있는 리전에서만 사용할 수 있습니다. 사용 가능한 리전 목록은 배포 및 엔드포인트를 참조하세요.
- 소스 데이터 열은
최적화된 쿼리 실행
이 예시에 따라 ai.if() 함수를 사용하여 표준 SELECT 문을 실행합니다.
restaurant_reviews테이블을 만듭니다. 소스 데이터를 보유하는review열은TEXT유형이고 쿼리에 사용되는review_embedding열은VECTOR(768)유형입니다.CREATE TABLE restaurant_reviews ( id SERIAL, name VARCHAR(64), city VARCHAR(64), review TEXT, review_embedding VECTOR(768) );ai.initialize_embeddings()프로시져를 사용하여 소스 데이터의 벡터 임베딩을 생성합니다.CALL ai.initialize_embeddings( model_id => 'text-embedding-005', table_name => 'restaurant_reviews', content_column => 'review', embedding_column => 'review_embedding' );최적화된 AI 함수는 경량 프록시 모델을 학습시키고 평가하기 위해 벡터 임베딩을 특성 입력으로 사용하므로 임베딩을 생성해야 합니다. 모든 행에 대해 원시 텍스트를 원격 LLM에 전송하는 대신 프록시 모델은 벡터 표현에서 직접 빠른 로컬 추론을 수행합니다. 임베딩이 생성되지 않으면 AlloyDB는 프록시 모델을 학습시킬 수 없으며 원격 LLM으로 모든 행을 평가하는 방식으로 대체됩니다.
다음 임베딩 요구사항에 유의하세요.
- 임베딩 열에
NULL값이 포함된 경우ai.if()출력은NULL로 평가됩니다. 모델 학습과 추론 모두 유효한 임베딩이 필요합니다. - 쿼리 임베딩 차원이 학습된 프록시 모델에 저장된 차원과 일치하지 않으면
ai.if()함수에서 오류가 발생합니다.
임베딩 옵션 및 증분 새로고침에 대한 자세한 내용은 대규모 테이블의 자동 벡터 임베딩 생성 및 관리를 참조하세요.
- 임베딩 열에
ai.if()함수를 사용하여SELECT문을 실행합니다. 이 쿼리는 백그라운드에서 최적화된 AI 함수를 위한 프록시 모델 학습을 자동으로 예약합니다.SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding, 'gemini-3.5-flash-lite') GROUP BY r.name, r.city HAVING COUNT(*) > 500;첫 번째 쿼리 실행은 비동기식으로 학습을 트리거합니다. 프록시 모델이 학습하는 동안
google_ml_integration.proxy_models_enable_llm_fallback플래그가on(기본값)로 설정된 경우 AlloyDB는 원격 LLM으로 쿼리를 평가하는 방식으로 대체하고 최적화된 AI 함수를 아직 사용할 수 없다는 경고를 반환합니다.google_ml_integration.proxy_models_enable_llm_fallback가off로 설정된 경우 쿼리는 대체되지 않고 오류를 반환합니다.동일한 콘텐츠 표현식(
content_expr), 임베딩 열, 테이블과 일치하는 후속 쿼리는 학습된 프록시 모델을 사용하여 가속화합니다. 행 값을 업데이트하거나 행을 삭제하거나 테이블에 데이터를 추가해도 AlloyDB가 LLM으로 대체되지 않습니다. 프록시 모델은 로컬에서 데이터를 계속 처리하며 데이터 드리프트는 주기적인 백그라운드 재학습으로 해결됩니다.프록시 모델은 함수 유형, 테이블 OID, 콘텐츠 표현식, 임베딩 열(
func_type,table_oid,content_expr,embedding_column)로 고유하게 식별됩니다. 이 아키텍처를 사용하면ai.if()에 대한 입력이 변경되지 않는 한 여러 SQL 쿼리에서 모델을 공유할 수 있습니다.AlloyDB는 기존 프록시 모델을 사용하지 않고 대신 새 프록시 모델에 대한 백그라운드 학습을 시작하고 다음 시나리오에서 원격 LLM으로 대체합니다(
google_ml_integration.proxy_models_enable_llm_fallback플래그에 따라 다름).ai.if()내부의CONTENT표현식이 변경됩니다(예: 프롬프트 문자열 또는 연결된 열 표현식이 수정됨).ai.if()내부의EMBEDDING_COLUMN이름이 변경됩니다.llm_model_id매개변수가 변경됩니다.- 런타임 정확성 검사가 사용 설정되어 있고 프록시 모델이 쿼리 시작 시 정확성 검사에 실패하는 경우
온라인 학습 및 실행 차단
AlloyDB는 google_ml_integration.proxy_models_enable_online_training 데이터베이스 플래그로 제어되는 최적화된 함수를 위한 온라인 학습 워크플로를 지원합니다. 기본적으로 이 플래그는 off으로 설정됩니다.
이 플래그가 사용 설정되고 학습되지 않은 ai.if() 함수가 실행되면 쿼리가 학습 프로세스를 트리거하고 차단 실행을 사용합니다. 초기 쿼리는 계속 진행하기 전에 백그라운드 프록시 모델 학습이 완료될 때까지 적극적으로 차단하고 기다립니다. 이렇게 하면 쿼리가 최적화된 프록시 모델을 즉시 활용하여 초기 실행 시 원격 LLM 추론 비용을 방지할 수 있습니다.
쿼리가 온라인 학습이 완료될 때까지 차단하고 기다리는 최대 시간은 google_ml_integration.proxy_models_training_wait_timeout 플래그로 제어됩니다(초 단위, 기본값은 60). 이 간격 내에 학습이 완료되지 않으면 대체 설정에 따라 쿼리가 타임아웃되거나 대체됩니다.
온라인 학습을 사용 설정하려면 다음 안내를 따르세요.
-- Enable online training (blocking execution)
SET google_ml_integration.proxy_models_enable_online_training = on;
-- Set the maximum wait timeout in seconds (default is 60)
SET google_ml_integration.proxy_models_training_wait_timeout = 30;
원격 LLM 대체 구성
기본적으로 원격 LLM으로의 대체가 사용 설정되어 있습니다. 프록시 모델이 학습되지 않았거나, 학습 중이거나, 정확성 검사에 실패하면 쿼리가 원격 LLM으로 대체되고 표준 Agent Platform API 비용이 발생합니다.
google_ml_integration.proxy_models_enable_llm_fallback 데이터베이스 플래그를 사용하여 대체 동작을 구성할 수 있습니다.
대체 사용 설정(
on, 기본값): 프록시 모델을 사용할 수 없는 경우 AlloyDB는 원격 LLM을 사용하여 쿼리를 평가하고 경고를 반환합니다.WARNING: Optimized AI Function is unavailable. Expect reduced performance.대체 사용 중지(
off): 프록시 모델을 사용할 수 없거나 정확성 검증에 실패하면 쿼리가 원격 LLM을 호출하는 대신 즉시 오류를 발생시킵니다.ERROR: Optimized AI Function: Optimized model fallback to LLM prevented by GUC google_ml_integration.proxy_models_enable_llm_fallback
현재 세션에서 LLM 대체 기능을 사용 중지하려면 다음 안내를 따르세요.
SET google_ml_integration.proxy_models_enable_llm_fallback = off;
전체 데이터베이스에 대해 LLM 대체 기능을 사용 중지하려면 다음 안내를 따르세요.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_llm_fallback = off;
DATABASE_NAME을 데이터베이스 이름으로 바꿉니다.
런타임 정확도 검사 구성
런타임 정확성 검사는 원격 LLM을 사용하여 쿼리의 행 샘플을 평가하여 프록시 모델이 실행 전에 기준 정확성 요구사항을 충족하는지 확인합니다.
정확성 검사는 google_ml_integration.proxy_models_enable_accuracy_check 데이터베이스 플래그로 제어됩니다(기본적으로 사용 중지됨).
현재 세션의 정확성 검사를 사용 설정하려면 다음 단계를 따르세요.
SET google_ml_integration.proxy_models_enable_accuracy_check = on;
현재 세션의 정확성 검사를 사용 중지하려면 다음 단계를 따르세요.
SET google_ml_integration.proxy_models_enable_accuracy_check = off;
전체 데이터베이스에 대한 정확성 검사를 사용 설정하려면 다음 안내를 따르세요.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_accuracy_check = on;
기존 프록시 모델 보기
기존 프록시 모델을 검사하고, 학습 상태를 확인하고, 모델 메타데이터를 검토하려면 google_ml.optimized_functions_view 뷰(또는 ai 스키마의 별칭인 ai.optimized_functions_view)를 쿼리합니다.
sql
SELECT * FROM ai.optimized_functions_view;
이 뷰의 열에 대한 설명은 ai.optimized_functions_view 뷰를 참조하세요.
table_name 또는 status로 이 뷰를 필터링하여 모델이 학습을 완료했는지(READY) 확인하거나 수동 재학습에 필요한 정확한 content_expr 및 embedding_column 값을 식별할 수 있습니다.
프록시 모델 재학습 및 관리
프록시 모델은 초기 학습 시 테이블에 있는 데이터를 기반으로 학습됩니다. 새로운 데이터가 테이블에 추가되거나 행이 수정 또는 삭제되면 시간이 지남에 따라 프록시 모델이 오래될 수 있습니다. 데이터가 변경될 때 정확성을 유지하기 위해 프록시 모델은 백그라운드에서 주기적으로 또는 필요에 따라 수동으로 자동 재학습될 수 있습니다.
주기적인 백그라운드 재학습
기본 구성 설정이 있는 vCPU가 32개 이상인 인스턴스에서 AlloyDB는 백그라운드에서 주기적으로 프록시 모델을 재학습시킬 수 있습니다.
주기적 재학습은 다음 데이터베이스 플래그로 제어됩니다.
google_ml_integration.proxy_models_retraining_interval_minutes: 백그라운드 재학습 작업의 빈도를 분 단위로 제어합니다. 기본값은1440(24시간)입니다.0로 설정하면 주기적인 재학습이 사용 중지됩니다.google_ml_integration.proxy_models_retraining_batch_size: 단일 반복에서 재학습되는 모델 수를 제어합니다(기본값은1).
수동 재학습
ai 스키마의 함수(또는 google_ml 스키마의 상응하는 함수)를 사용하여 프록시 모델을 수동으로 재학습시킬 수 있습니다.
테이블의 모든 모델 재학습
특정 테이블과 연결된 모든 프록시 모델을 재학습시키거나 테이블의 필터링된 모델 하위 집합을 재학습시키려면 ai.retrain_optimized_models()를 호출합니다.
SELECT ai.retrain_optimized_models(
table_name => 'restaurant_reviews',
embedding_column => 'review_embedding', -- Optional
content_expr => '(''Is the following a positive review? Review: ''::text || review)', -- Optional
llm_model_id => 'LLM_MODEL_ID' -- Optional
);
파라미터 설명은 ai.retrain_optimized_models() 함수를 참조하세요.
모델 ID로 특정 모델 재학습
고유 모델 식별자를 사용하여 특정 프록시 모델을 재학습시키려면 model_id 매개변수를 사용하여 ai.retrain_optimized_model()를 호출합니다.
SELECT ai.retrain_optimized_model(model_id => 'MODEL_ID');
파라미터 설명은 ai.retrain_optimized_model() 함수를 참조하세요.
모델 학습 파라미터로 특정 모델 재학습
테이블 이름, 콘텐츠 표현식, 임베딩 열을 사용하여 특정 프록시 모델을 재학습시키려면 ai.retrain_optimized_model()를 호출합니다.
SELECT ai.retrain_optimized_model(
table_name => 'restaurant_reviews',
embedding_column => 'review_embedding',
content_expr => '(''Is the following a positive review? Review: ''::text || review)',
llm_model_id => 'LLM_MODEL_ID' -- Optional
);
파라미터 설명은 ai.retrain_optimized_model() 함수를 참조하세요.
프록시 모델 삭제
다음 함수를 사용하여 개별 프록시 모델 또는 모든 모델을 삭제할 수 있습니다. 이러한 작업은 alloydbsuperuser 권한이 있거나 관리자가 부여한 권한이 있는 사용자가 수행해야 합니다.
특정 프록시 모델을 삭제하는 데 필요한 내부 model_id를 찾으려면 google_ml.proxy_models_expr_mapping 테이블을 쿼리합니다.
SELECT model_id, table_oid::regclass, content_expr
FROM google_ml.proxy_models_expr_mapping;
-- Delete a specific proxy model
SELECT ai.delete_optimized_model('com_if_12345_67890');
-- Delete all proxy models and stop the background automated retraining job
CALL ai.delete_all_optimized_models();
모니터링
백그라운드 작업자 학습 작업을 모니터링하고 모델 운영 상태를 확인할 수 있습니다.
모델 학습 상태 및 기록 확인
프록시 모델이 학습을 완료했는지, 실패했는지, 재학습 중인지 확인하려면 ai.optimized_functions_view를 쿼리합니다.
SELECT table_name, content_expr, status, last_trained_at, training_duration
FROM ai.optimized_functions_view;
status 열은 모델의 현재 운영 상태를 나타내며 다음 값을 제공합니다.
READY: 프록시 모델이 학습을 완료했으며 수신 쿼리를 가속화할 준비가 되었습니다.UNTRAINED: 모델이 등록되거나 예약되었지만 백그라운드 학습이 아직 완료되지 않았습니다. 초기 백그라운드 학습이 실패하면 모델은UNTRAINED상태로 유지되고 쿼리는 원격 LLM으로 대체됩니다(대체가 사용 중지된 경우 오류 발생).RETRAINING_IN_PROGRESS: 백그라운드 재학습이 진행 중입니다.RETRAINING_FAILED: 가장 최근의 백그라운드 또는 수동 재학습 실행이 실패했습니다. 대부분의 시나리오에서 재학습 전 모델 가중치가 있는 경우 AlloyDB는 추론에 기존 모델 가중치를 계속 사용합니다. 기존 모델 가중치를 사용할 수 없거나 런타임 정확성 검사가 실패하면 AlloyDB는 모델이 성공적으로 재학습될 때까지 원격 LLM(google_ml_integration.proxy_models_enable_llm_fallback에 따라 다름)을 사용하여 쿼리를 평가합니다.
이 뷰에서 사용할 수 있는 모든 열에 대한 자세한 내용은 기존 프록시 모델 보기를 참조하세요.
제한사항
- 최적화된 AI 함수는
ai.if()함수만 지원합니다. - vCPU가 32개 미만인 데이터베이스 인스턴스에서는 프록시 모델의 주기적인 백그라운드 자동 재학습이 지원되지 않습니다.
- 행 수준 보안(RLS): 행 수준 보안(RLS) 정책을 사용하여 테이블에서 학습된 모델은 특정 시작 사용자의 권한으로 학습하여 보안 정보를 유출할 수 있습니다. RLS 정책이 있는 테이블에서 프록시 모델을 학습시키는 것은 사용 중지됩니다.
- 입력 수정: 소스 콘텐츠 열, 임베딩 열, 프롬프트 문자열 또는
ai.if()에 제공된 기본 LLM 모델 ID를 수정하면 기존 프록시 모델이 우회되고 해당 조합에 대해 새로운 백그라운드 학습 요청이 시작됩니다. - SQL 제한사항:
- 쿼리에 유효한
FROM절이 포함되어야 합니다. - AI 함수의 모든 인수는 동일한 테이블 별칭에서 가져와야 합니다.
ai.if()표현식의 열을 임베딩의 소스 열로 포함합니다.ai.if()함수를 하위 쿼리 또는 공통 테이블 표현식(CTE) 내에 배치하지 마세요.
- 쿼리에 유효한