이 페이지에서는 embedding()
함수가 테이블에 저장된 데이터 및 pgvector
지형지물과 함께 작동하는 방식을 보여주는 워크플로 예시를 제공합니다. 이 예시에서는 일반 텍스트 입력을 사용하여 텍스트 의미의 대규모 언어 모델(LLM) 기반 시맨틱 파싱을 사용하는 데이터베이스에서 결과를 가져옵니다.
예시 시나리오
다음과 같은 측면에서 AlloyDB에서 실행되는 데이터베이스를 가정해 보세요.
데이터베이스에는
items
테이블이 포함되어 있습니다. 이 테이블의 각 행은 비즈니스에서 판매하는 상품을 설명합니다.items
테이블에는complaints
열이 포함되어 있습니다. 이TEXT
열에는 각 항목에 대해 로깅된 구매자 불만사항이 저장됩니다.데이터베이스는
text-embedding-005
영어 모델에 대한 액세스 권한을 부여하는 Vertex AI Model Garden과 통합됩니다.
이 데이터베이스에 항목에 대한 불만사항이 저장되어 있지만 이러한 불만사항은 일반 텍스트로 저장되므로 쿼리하기가 어렵습니다. 예를 들어 잘못된 색상의 상품을 받은 고객이 불만사항을 가장 많이 제기한 상품이 무엇인지 확인하려면 테이블에서 일반 SQL 쿼리를 수행하여 다양한 키워드 검색 유형을 찾으면 됩니다. 하지만 이 방법은 정확한 키워드가 포함된 행만 일치시킵니다.
예를 들어 SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
와 같은 기본 SQL 쿼리는 The picture shows a blue one, but the one I received was red
만 포함된 complaints
필드가 있는 행을 반환하지 않습니다.
LLM 기반 임베딩을 사용하는 SQL 쿼리는 이 격차를 해소하는 데 도움이 될 수 있습니다. 임베딩을 적용하면 이 예시에서는 지정된 텍스트 프롬프트(예: '색상이 잘못되었습니다')와 의미론적으로 유사한 불만사항이 있는 상목의 테이블을 쿼리할 수 있습니다.
다음 단계에서는 앞에서 설명한 예시 설정에서 이를 사용 설정하는 방법을 보여줍니다.
시작하기 전에
다음 요구사항을 충족해야 합니다.
필수 데이터베이스 확장 프로그램
AlloyDB 데이터베이스에 다음 확장 프로그램이 설치되어 있는지 확인합니다.
google_ml_integration
확장 프로그램, 버전1.2
이상vector
확장 프로그램, 버전0.5.0.google-1
이상
확장 프로그램 설치 및 관리에 관한 자세한 내용은 데이터베이스 확장 프로그램 구성을 참고하세요.
google_ml_integration.enable_model_support
데이터베이스 플래그를off
로 설정합니다.
모델 액세스 설정
AlloyDB 데이터베이스에서 임베딩을 생성하려면 먼저 텍스트 임베딩 모델을 사용하도록 AlloyDB를 구성해야 합니다.
클라우드 기반 text-embedding-005
모델을 사용하려면 데이터베이스를 Vertex AI와 통합해야 합니다.
테이블 준비
items
테이블의 콘텐츠에 LLM 기반 쿼리를 실행하기 전에 기존 데이터를 기반으로 임베딩을 저장하고 색인을 생성할 테이블을 준비해야 합니다.
임베딩을 저장할 열 만들기
임베딩을 저장할 테이블에 열을 추가합니다.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
이 예시에서는 768
을 인수로 지정합니다. 이는 text-embedding-005
영어 모델에서 지원하는 측정기준 수이기 때문입니다. 자세한 내용은 임베딩 생성을 참조하세요.
이 예에서는 pgvector
함수와 연산자를 값과 함께 쉽게 사용할 수 있도록 vector
데이터 유형을 열에 적용합니다.
새 열 채우기
CSV 형식의 임베딩이 이미 있는 경우 벡터 임베딩 저장의 단계에 따라 임베딩을 저장합니다.
원하는 경우 complaints
열에 텍스트가 저장된 경우 embedding()
함수를 사용하여 이 새 열을 임베딩으로 채웁니다. 이 예시 설정에서 AlloyDB는 text-embedding
모델 버전 005
을 사용하여 임베딩을 생성합니다.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
이 예에서는 이전에 만든 vector
열에 값을 저장하기 위해 embedding()
의 real[]
반환 값을 암시적으로 vector
값으로 변환합니다.
색인 만들기
성능을 개선하려면 스칼라 정규화 기법을 사용하는 색인을 items
에 추가합니다.
CREATE INDEX complaint_embed_idx ON items
USING ivf (complaint_embedding vector_l2_ops)
WITH (lists = 20, quantizer = 'SQ8');
대략적인 최근접 이웃 색인을 만드는 방법에 대한 자세한 내용은 색인 생성을 참고하세요.
제공된 텍스트로 LLM 기반 쿼리 실행
이제 items
테이블에서 의미론적 최근접 이웃 쿼리를 수행할 수 있습니다. 다음 쿼리는 pgvector
에서 제공하는 <->
연산자를 사용하여 텍스트 It was the wrong color
와의 시맨틱 근접성에 따라 테이블의 행을 정렬하고 상위 10개의 불만사항을 반환합니다. 쿼리에는 정렬된 첫 번째 행의 id
및 name
값이 표시됩니다.
SELECT id, name FROM items
ORDER BY complaint_embedding::vector
<-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;
다음 단계
- Google Cloud 데이터베이스에서 pgvector, LLM, LangChain을 사용하여 AI 기반 앱을 빌드하는 방법을 알아봅니다.
- AlloyDB, pgvector, 모델 엔드포인트 관리를 사용하여 스마트 쇼핑 어시스턴트를 빌드하는 방법을 알아봅니다.