임베딩 워크플로 예시

이 페이지에서는 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개의 불만사항을 반환합니다. 쿼리에는 정렬된 첫 번째 행의 idname 값이 표시됩니다.

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('text-embedding-005', 'It was the wrong color') LIMIT 10;

다음 단계