이 페이지에서는 AlloyDB를 대규모 언어 모델(LLM) 도구로 사용하고 LLM을 기반으로 벡터 임베딩을 생성하는 방법을 보여줍니다.
AlloyDB Omni에서 ML 모델을 사용하는 방법에 관한 자세한 내용은 생성형 AI 애플리케이션 빌드를 참고하세요.
AlloyDB를 사용하면 Vertex AI에서 호스팅하는 LLM을 사용하여 텍스트 문자열을 임베딩으로 변환할 수 있습니다. 임베딩은 지정된 텍스트의 의미론적 의미를 숫자 벡터로 나타내는 모델 표현입니다. Vertex AI의 텍스트 임베딩 지원에 관한 자세한 내용은 텍스트 임베딩을 참고하세요.
시작하기 전에
AlloyDB에서 임베딩을 생성하도록 하려면 다음 요구사항을 충족해야 합니다.
리전별 제한사항
Vertex AI의 생성형 AI를 사용할 수 있는 리전에서 임베딩을 생성할 수 있습니다. 리전 목록은 Vertex AI의 생성형 AI 위치 를 참고하세요.
AlloyDB의 경우 쿼리하는 AlloyDB 클러스터와 Vertex AI 모델이 모두 동일한 리전에 있어야 합니다.
필수 데이터베이스 확장 프로그램
AlloyDB 데이터베이스에
google_ml_integration
확장 프로그램이 설치되어 있는지 확인합니다.CREATE EXTENSION google_ml_integration;
이 확장 프로그램은 AlloyDB에 포함되어 있습니다. 클러스터의 모든 데이터베이스에 설치할 수 있습니다.
google_ml_integration.enable_model_support
데이터베이스 플래그를off
로 설정합니다.
모델 액세스 설정
AlloyDB 데이터베이스에서 임베딩을 생성하려면 먼저 텍스트 임베딩 모델을 사용하도록 AlloyDB를 구성해야 합니다.
클라우드 기반 textembeddings-gecko
모델을 사용하려면 데이터베이스를 Vertex AI와 통합해야 합니다.
데이터베이스 사용자에게 임베딩을 생성할 수 있는 액세스 권한 부여
데이터베이스 사용자가 embedding
함수를 실행하여 예측을 실행할 수 있는 권한을 부여합니다.
psql
클라이언트를 인스턴스에 연결에 설명된 대로psql
클라이언트를 클러스터의 기본 인스턴스에 연결합니다.psql 명령 프롬프트에서 데이터베이스에 연결하고 권한을 부여합니다.
\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
다음을 바꿉니다.
DB_NAME: 권한을 부여할 데이터베이스의 이름
USER_NAME: 권한을 부여할 사용자의 이름입니다.
임베딩 생성
AlloyDB는 텍스트를 벡터 임베딩으로 변환할 수 있는 함수를 제공합니다. 그런 다음 임베딩을 벡터 데이터로 데이터베이스에 저장하고 선택적으로 pgvector
함수를 사용하여 쿼리를 실행할 수 있습니다.
AlloyDB를 사용하여 임베딩을 생성하려면 google_ml_integration
확장 프로그램에서 제공하는 embedding()
함수를 사용합니다.
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
다음을 바꿉니다.
MODEL_ID
: 쿼리할 모델의 ID입니다.Vertex AI Model Garden을 사용하는 경우
textembedding-gecko@003
을 모델 ID로 지정합니다. AlloyDB에서 텍스트 임베딩에 사용할 수 있는 클라우드 기반 모델입니다. 자세한 내용은 텍스트 임베딩을 참고하세요.선택사항:
VERSION_TAG
: 쿼리할 모델의 버전 태그입니다. 태그 앞에@
를 추가합니다.Vertex AI에서
textembedding-gecko
영어 모델 중 하나를 사용하는 경우 모델 버전에 나열된 버전 태그 중 하나(예:textembedding-gecko@003
)를 지정합니다.항상 버전 태그를 지정하는 것이 좋습니다. 버전 태그를 지정하지 않으면 AlloyDB는 항상 최신 모델 버전을 사용하므로 예기치 않은 결과가 발생할 수 있습니다.
TEXT
: 벡터 임베딩으로 변환할 텍스트입니다.
다음 예에서는 textembedding-gecko
영어 모델의 003
버전을 사용하여 제공된 리터럴 문자열을 기반으로 임베딩을 생성합니다.
SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
임베딩 저장
google_ml_integration
확장 프로그램을 사용하여 생성된 임베딩은 real
값 배열로 구현됩니다.
생성된 이러한 임베딩은 pgvector
확장 함수의 입력으로 전달됩니다.
이 값을 테이블에 저장하려면 real[]
열을 추가합니다.
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
임베딩을 저장할 열을 만든 후 같은 테이블의 다른 열에 이미 저장된 값을 기준으로 열을 채울 수 있습니다.
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
다음을 바꿉니다.
TABLE
: 테이블 이름EMBEDDING_COLUMN
: 임베딩 열의 이름입니다.
MODEL_ID
: 쿼리할 모델의 ID입니다.Vertex AI Model Garden을 사용하는 경우
textembedding-gecko@003
을 모델 ID로 지정합니다. AlloyDB에서 텍스트 임베딩에 사용할 수 있는 클라우드 기반 모델입니다. 자세한 내용은 텍스트 임베딩을 참고하세요.선택사항:
VERSION_TAG
: 쿼리할 모델의 버전 태그입니다. 태그 앞에@
를 추가합니다.Vertex AI에서
textembedding-gecko
영어 모델 중 하나를 사용하는 경우 모델 버전에 나열된 버전 태그 중 하나(예:textembedding-gecko@003
)를 지정합니다.항상 버전 태그를 지정하는 것이 좋습니다. 버전 태그를 지정하지 않으면 AlloyDB는 항상 최신 모델 버전을 사용하므로 예기치 않은 결과가 발생할 수 있습니다.
SOURCE_TEXT_COLUMN
: 임베딩으로 변환할 텍스트를 저장하는 열의 이름입니다.
유사성 검색 수행
embedding()
함수를 사용하여 텍스트를 벡터로 변환할 수도 있습니다. 벡터를 pgvector
최근접 이웃 연산자인 <->
에 적용하여 의미상 가장 유사한 임베딩이 있는 데이터베이스 행을 찾습니다.
embedding()
에서 real
배열을 반환하므로 pgvector
연산자와 함께 이러한 값을 사용하려면 embedding()
호출을 vector
으로 명시적으로 변환해야 합니다.
CREATE EXTENSION google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
모델 버전 태그를 사용하여 오류 방지
항상 선택한 임베딩 모델의 안정화 버전을 사용하는 것이 좋습니다. 즉, 대부분의 모델에서 버전 태그를 명시적으로 설정합니다.
모델의 버전 태그를 지정하지 않고 embedding()
함수를 호출하면 구문적으로는 유효하지만 오류가 발생하기 쉽습니다.
Vertex AI Model Garden에서 모델을 사용할 때 버전 태그를 생략하면 Vertex AI에서 모델 최신 버전을 사용합니다. 이 버전은 최신 안정화 버전이 아닐 수 있습니다. 사용 가능한 Vertex AI 모델 버전에 대한 자세한 내용은 모델 버전을 참조하세요.
지정된 Vertex AI 모델 버전은 동일한 embedding()
응답을 항상 지정된 텍스트 입력에 반환합니다. embedding()
호출 시 모델 버전을 지정하지 않으면 새로 게시된 모델 버전에서 지정된 입력에 반환된 벡터를 갑자기 변경하여 애플리케이션에 오류나 기타 예기치 않은 동작을 일으킬 수 있습니다.
이러한 문제를 방지하려면 항상 모델 버전을 지정합니다.
문제 해결
오류: model_id에 대한 모델을 찾을 수 없음
오류 메시지
embedding()
또는 google_ml.embedding()
함수를 사용하여 임베딩을 생성하려고 하면 다음 오류가 발생합니다.
ERROR: 'Model not found for model_id:
권장 해결 방법
google_ml_integration
확장 프로그램을 업그레이드하고 임베딩을 다시 생성해 보세요.ALTER EXTENSION google_ml_integration UPDATE;
확장 프로그램을 삭제한 다음 다시 만들 수도 있습니다.
DROP extension google_ml_integration; CREATE EXTENSION google_ml_integration;
google_ml.embedding()
함수를 사용하여 임베딩을 생성하는 경우 모델이 등록되어 있고 쿼리에서 올바른model_id
를 사용하고 있는지 확인합니다.