벡터 임베딩 생성 및 관리

이 페이지에서는 벡터 임베딩을 생성하고 저장하는 방법을 설명합니다. 개요는 벡터 임베딩 스토리지를 참고하세요.

시작하기 전에

벡터 데이터베이스 플래그가 사용 설정된 Cloud SQL 인스턴스가 있어야 합니다.

행 데이터를 기반으로 벡터 임베딩 생성

Vertex AI 또는 OpenAI와 같은 텍스트 임베딩 API를 사용하여 지정된 행 데이터에 대해 벡터 임베딩을 생성할 수 있습니다. Cloud SQL 벡터 임베딩에는 모든 텍스트 임베딩 API를 사용할 수 있습니다. 하지만 쿼리 문자열 벡터 생성을 위해 동일한 텍스트 임베딩 API를 사용해야 합니다. 소스 데이터 및 쿼리 벡터화에 대해 서로 다른 API를 조합할 수 없습니다.

예를 들어 다음과 같이 Vertex AI에서 벡터 임베딩을 생성할 수 있습니다.

from vertexai.language_models import TextEmbeddingModel

def text_embedding() -> list:
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("text-embedding-004")
    embeddings = model.get_embeddings(["What is life?"])
    for embedding in embeddings:
        vector = embedding.values
        print(f"Length of Embedding Vector: {len(vector)}")
    return vector

if __name__ == "__main__":
    text_embedding()

벡터 임베딩 저장

이 섹션에서는 Cloud SQL에 벡터 임베딩을 저장하기 위한 예시 문을 제공합니다.

벡터 임베딩 열로 새 테이블 만들기

VECTOR 데이터 유형을 사용하는 열에 CREATE TABLE 문을 사용합니다.

다음 구문을 사용하여 테이블을 만듭니다.

CREATE TABLE TABLE_NAME(
  id INTEGER
  PRIMARY KEY
    AUTO_INCREMENT,
    title VARCHAR(60),
    EMBEDDING_COLUMN_NAME
      VECTOR(VECTOR_DIMENSIONS)
  USING VARBINARY);

다음 매개변수를 바꿉니다.

  • TABLE_NAME: 임베딩을 저장할 테이블의 이름입니다.
  • EMBEDDING_COLUMN_NAME: 임베딩을 저장하는 열의 이름입니다.
  • VECTOR_DIMENSIONS: 임베딩에 사용할 차원 수입니다.

다음 예에서 임베딩 열에는 3개의 측정기준이 있는 벡터가 있습니다. 이 열에 저장된 데이터의 데이터 유형은 VARBINARY입니다.

CREATE TABLE books(
  id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);

기존 테이블에 벡터 임베딩 열 추가

ALTER TABLE 문을 사용하여 기존 테이블에 벡터 임베딩 열을 추가합니다. 열은 VECTOR 데이터 유형을 사용하여 임베딩을 저장해야 합니다.

다음 예에서는 3차원 벡터가 있는 임베딩 열이 테이블에 삽입됩니다. 이 열에 저장된 데이터의 데이터 유형은 VARBINARY입니다.

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3)
USING VARBINARY;

벡터 임베딩 삽입

INSERTstring_to_vector 함수와 함께 사용하여 테이블에 벡터 임베딩 값을 삽입합니다.

다음 예에서는 3차원 벡터가 임베딩 열에 삽입됩니다.

INSERT INTO books
  (
    title,
    embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));

여러 벡터 임베딩 삽입

string_to_vector 함수와 함께 INSERT를 사용하여 쉼표로 구분된 벡터 임베딩 목록을 삽입합니다.

다음 문에서 각 임베딩은 3차원 벡터를 포함하고 있으며 임베딩 열에 삽입됩니다.

INSERT INTO books
  (
    title,
    embedding)
VALUES
  (
    (
      'book title',
      string_to_vector('[1,2,3]')),
    ('book title', string_to_vector('[4,5,6]')));

벡터 임베딩 삽입/업데이트(upsert)

string_to_vector 함수를 사용하여 테이블에 INSERT 또는 UPDATE 연산을 적용하여 다음 문법을 사용하여 벡터 임베딩 열을 추가합니다.

다음 문에서 upsert는 3차원 벡터가 포함된 임베딩으로 임베딩 열을 삽입하거나 업데이트하는 데 사용됩니다.

INSERT INTO books
  (
    id,
    title,
    embedding)
VALUES
  (
    (
      1,
      'book title',
      string_to_vector('[1,2,3]')))
ON DUPLICATE KEY UPDATE embedding = string_to_vector('[1,2,3]');

벡터 임베딩 업데이트

string_to_vector 함수와 함께 UPDATE를 사용하여 벡터 임베딩을 업데이트합니다.

다음 문에서 UPDATE는 임베딩 열을 3차원 벡터로 업데이트하는 데 사용됩니다.

UPDATE books
SET embedding = string_to_vector('[7,8,9]')
WHERE id = 1;

벡터 임베딩 검색

벡터 임베딩을 검색하려면 임베딩 이름과 함께 Cloud SQL vector_to_string 함수를 사용합니다.

다음 문에서는 임베딩 열을 가져와 확인합니다.

SELECT vector_to_string(embedding) FROM books WHERE id = 1;

벡터 임베딩 삭제

string_to_vector 함수와 함께 DELETE를 사용하여 테이블에서 벡터 임베딩을 삭제합니다. 벡터 색인이 있는 경우 먼저 삭제해야 합니다. 자세한 내용은 벡터 색인 삭제를 참고하세요.

다음 문에서 DELETE는 임베딩 열의 값을 삭제하는 데 사용됩니다.

DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');

다음 단계