최적화된 함수를 사용하면 더 작고 빠른 프록시 모델을 사용하여 대부분의 쿼리를 처리한 다음 필요한 경우에만 더 큰 LLM으로 대체할 수 있습니다. 이 접근 방식을 사용하면 운영 비용이 절감되고 쿼리 응답성이 향상됩니다. 최적화된 함수는 프록시 모델에서 더 잘 처리할 수 있는 행별 분류 또는 필터링 작업에 LLM을 사용하는 것을 최소화합니다.
ai.if()와 같은 AlloyDB AI 함수는 대규모 언어 모델 (LLM)에 대한 원격 호출로 인해 지연 시간이 길 수 있습니다. 최적화된 함수는 더 작은 로컬 학습 프록시 모델을 사용하여 쿼리를 처리함으로써 이 지연 시간 문제를 해결합니다. 이러한 모델은 LLM의 출력을 신뢰할 수 있는 소스로 사용하여 데이터 샘플을 기반으로 학습됩니다.
정확성 검사는 LLM을 사용하여 행 샘플에 대해 런타임에 실행됩니다. 이 검사를 실행하기 위해 AlloyDB는 LLM을 사용하여 샘플 행의 라벨을 생성하고 이를 프록시 모델의 예측과 비교하여 정확성을 확인합니다. 정확성 검사에 실패하면 쿼리가 LLM을 사용하는 것으로 대체됩니다.
최적화된 함수를 사용하면 AlloyDB에서 다음 작업을 실행합니다.
- 프록시 모델 학습: AlloyDB는 데이터 샘플을 기반으로 경량 프록시 모델을 학습시킵니다. 이는 최적화된 쿼리를 위해 모델을 학습시킬 때
ai.if()함수와 함께PREPARE문을 사용하는 경우 백그라운드에서 발생합니다. - 쿼리 실행:
EXECUTE문을 사용하면 AlloyDB는 학습된 프록시 모델을 사용하여 쿼리를 로컬로 처리합니다. - LLM으로 대체: 모델의 정확도가 낮거나 AlloyDB에서 모델을 찾을 수 없는 경우 AlloyDB는 자동으로 LLM 사용으로 대체됩니다.

시작하기 전에
최적화된 함수를 사용하기 전에 다음을 수행하세요.
postgres사용자 또는 데이터가 있는 테이블에 액세스할 수 있는 사용자로 psql을 사용하여 데이터베이스에 연결하거나 AlloyDB Studio에 연결합니다.google_ml_integration확장 프로그램이 설치되어 있고 버전 1.5.8 이상에서 사용할 수 있는지 확인합니다.SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.8 (1 row)Vertex AI와 호환되도록 AlloyDB를 구성합니다. 자세한 내용은 Vertex AI와 데이터베이스 통합을 참고하세요.
다음 데이터베이스 플래그가 사용 설정되어 있는지 확인합니다. 자세한 내용은 인스턴스의 데이터베이스 플래그 구성을 참조하세요.
google_ml_integration.enable_model_supportgoogle_ml_integration.enable_ai_query_enginegoogle_ml_integration.enable_cost_optimized_ai_functions
쿼리할 테이블의 임베딩을 생성합니다. 자세한 내용은 표의 자동 임베딩 생성 및 관리를 참고하세요.
다음 사항을 고려하세요.
- 소스 데이터 열은
TEXT또는VARCHAR유형이어야 합니다. - 최적화된 AI 함수에 입력을 제공하는 임베딩 열은
REAL[]또는VECTOR유형이어야 합니다. - 최적화된 함수는 Vertex AI 생성형 모델을 사용할 수 있는 리전에서만 사용할 수 있습니다. 사용 가능한 리전 목록은 생성형 AI 위치를 참고하세요.
- 소스 데이터 열은
최적화된 함수 사용
최적화된 함수를 사용하려면 ai.if() 함수와 함께 PREPARE 및 EXECUTE 문을 사용하세요. 다음은 최적화된 함수를 사용하는 방법의 예시입니다.
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.if()함수와 함께PREPARE문을 사용하여 쿼리에서 최적화된 함수를 사용해야 함을 나타냅니다. 이 문은 백그라운드에서 모델의 비동기 학습을 트리거합니다.모델은 다음 조건에서만 학습됩니다.
- 쿼리에
ai.if()함수가 정확히 하나 있습니다. ai.if()이 서브 쿼리 내부에 있지 않습니다.
PREPARE positive_reviews_query AS SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;- 쿼리에
EXECUTE문을 사용하여 쿼리를 실행합니다.PREPARE문은 현재 세션에만 적용되므로 동일한 연결에서EXECUTE문을 실행해야 합니다.EXECUTE positive_reviews_query;conn2=> SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;다음 조건 중 하나라도 충족되면 학습된 프록시 모델이 사용되지 않습니다.
ai.if()에서 참조되는 콘텐츠 또는 삽입 열이 변경됩니다. 두 열 모두 동일한 테이블에 속해야 합니다.- 콘텐츠 열에 제공된 프롬프트가 변경됩니다.
- 쿼리 구조가 변경되어
query_id이 달라집니다. - 쿼리 시작 시 쿼리가 정확성 확인 기준을 충족하지 않습니다.
이 경우 쿼리는 LLM을 사용하도록 대체되고 AlloyDB는 경고를 반환합니다.
선택사항입니다. 모델 학습 중에도 정확도 검사가 실행되므로 필요한 전체 데이터베이스 환경의 정확도 검사를 사용 중지하려면 다음 명령어를 실행하세요.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;DATABASE_NAME을 데이터베이스 이름으로 바꿉니다.
프록시 모델 재학습
기본 테이블 데이터가 크게 변경되면 PREPARE 문을 다시 실행하여 프록시 모델을 재학습시킬 수 있습니다. 쿼리를 다시 준비하면 새 학습 요청이 시작되어 기존 프록시 모델이 대체됩니다.
제한사항
소스 콘텐츠 열, 임베딩 열 또는 ai.if() 함수에 제공된 프롬프트를 변경하는 경우 새 PREPARE 문을 실행해야 합니다.
AlloyDB는 프롬프트와 입력 데이터의 고유한 조합의 동작을 근사하도록 최적화된 함수를 학습시킵니다.