이 페이지에서는 embedding()
함수가 테이블에 저장된 데이터와 pgvector
쿼리 모두에서 작동하는 방식을 보여주는 워크플로 예시를 제공합니다. 이 예시에서는 일반 텍스트 입력을 사용하여 텍스트 의미의 대규모 언어 모델(LLM) 기반 시맨틱 파싱을 사용하는 데이터베이스에서 결과를 가져옵니다.
임베딩 워크플로 예시 시나리오
다음과 같은 측면에서 PostgreSQL용 Cloud SQL에서 실행되는 데이터베이스를 가정해 보세요.
데이터베이스에는
items
테이블이 포함되어 있습니다. 이 테이블의 각 행은 비즈니스에서 판매하는 상품을 설명합니다.items
테이블에는complaints
열이 포함되어 있습니다. 이 열에는 각 항목에 대해 로깅된 구매자 불만사항이 일반 텍스트로 저장됩니다.데이터베이스는
textembedding-gecko
LLM에 대한 액세스 권한을 부여하는 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 쿼리는 이 격차를 해소하는 데 도움이 될 수 있습니다. 임베딩을 적용하면 이 예시에서는 지정된 텍스트 프롬프트(예: '색상이 잘못되었습니다')와 의미론적으로 유사한 불만사항이 있는 상목의 테이블을 쿼리할 수 있습니다.
다음 단계에서는 앞에서 설명한 예시 시나리오에서 이를 사용 설정하는 방법을 보여줍니다.
테이블 준비
items
테이블의 콘텐츠에 LLM 기반 쿼리를 실행하기 전에 기존 데이터를 기반으로 임베딩을 저장하고 색인을 생성할 테이블을 준비해야 합니다.
임베딩을 저장할 열 만들기
임베딩을 저장할 테이블에 열을 추가합니다.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
이 예시에서는 768
을 인수로 지정합니다. 이는 textembedding-gecko
LLM에서 지원하는 측정기준 수이기 때문입니다. 자세한 내용은 임베딩 생성을 참조하세요.
이 예시에서는 vector
데이터 유형을 열에 적용하여 열 값과 함께 pgvector
함수와 연산자 사용을 간소화합니다.
새 열 채우기
embedding()
함수를 사용하여 complaints
열에 표시되는 각 행의 텍스트 값을 기준으로 이 새 열을 임베딩으로 채웁니다. 이 예시에서 Cloud SQL은 ID가 textembedding-gecko
이고 버전이 001
인 LLM을 사용하여 임베딩을 생성합니다.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);
이 예시에서는 embedding()
의 real[]
반환 값을 암시적으로 vector
값으로 변환하여 이 값을 임베딩을 저장할 열 만들기에서 만든 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
<-> embedding('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;