이 페이지에서는 벡터 임베딩을 생성하고 저장하는 방법을 설명합니다. 개요는 벡터 임베딩 스토리지를 참조하세요.
시작하기 전에
Cloud SQL for MySQL 8.4 이하를 사용하는 경우 벡터 임베딩을 생성하고 저장하려면
cloudsql_vector 데이터베이스 플래그가 사용 설정된 Cloud SQL 인스턴스가 필요합니다.
Cloud SQL for MySQL 9.7 이상을 사용하는 경우 Cloud SQL 인스턴스에서 cloudsql_vector 데이터베이스 플래그를 설정하지 않고도 벡터 임베딩을 생성하고 저장할 수 있습니다.
하지만 벡터 색인을 만들거나 벡터 데이터에서 ANN 검색
을 수행할 수는 없습니다.
행 데이터를 기반으로 벡터 임베딩 생성
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 문을 사용합니다.
다음 구문을 사용하여 테이블을 만듭니다.
Cloud SQL for MySQL 8.4 이하의 경우 다음 구문을 사용합니다.
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);
MySQL용 Cloud SQL 9.7 이상에서는 VARBINARY 키워드 선언이 선택사항이며 이전 버전과의 호환성을 위해 지원됩니다. 또한 벡터의 차원을 지정할 필요가 없으며 기본값은 2048입니다.
Cloud SQL for MySQL 9.7 이상에서는 다음 구문을 사용할 수 있습니다.
CREATE TABLE TABLE_NAME(
id INTEGER
PRIMARY KEY
AUTO_INCREMENT,
title VARCHAR(60),
EMBEDDING_COLUMN_NAME
VECTOR([VECTOR_DIMENSIONS])
[USING VARBINARY]);
자세한 내용은 MySQL 문서의 VECTOR 유형을 참조하세요.
기존 테이블에 벡터 임베딩 열 추가
ALTER TABLE 문을 사용하여 기존 테이블에 벡터 임베딩 열을 추가합니다. 열은 임베딩을 보관하기 위해 VECTOR 데이터 유형을 사용해야 합니다.
다음 예시에서는 차원이 3개 있는 벡터가 하나 있는 임베딩 열이 테이블에 삽입됩니다.
ALTER TABLE books
ADD COLUMN embedding
VECTOR(3)
USING VARBINARY;
MySQL 9.7의 경우:
ALTER TABLE books
ADD COLUMN embedding
VECTOR(3);
벡터 임베딩 삽입
테이블에 벡터 임베딩 값을 삽입하려면 INSERT를 string_to_vector 함수와 함께 사용합니다.
다음 예시에서는 차원 3개가 있는 벡터 하나가 임베딩 열에 삽입됩니다.
INSERT INTO books
(
title,
embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));
여러 벡터 임베딩 삽입
쉼표로 구분된 벡터 임베딩 목록을 삽입하려면 INSERT를 string_to_vector 함수와 함께 사용합니다.
다음 문에서는 각각 차원 3개가 있는 벡터 하나를 포함한 임베딩 2개가 임베딩 열에 삽입됩니다.
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 연산을 사용하고 다음 구문을 사용합니다.
다음 문에서는 차원 3개가 있는 벡터 하나가 포함된 임베딩으로 임베딩 열을 삽입하거나 업데이트하는 데 삽입/업데이트(upsert)가 사용됩니다.
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;
벡터 임베딩 삭제
테이블에서 벡터 임베딩을 삭제하려면 DELETE
string_to_vector 함수
와 함께를 사용합니다. 벡터 색인이 있는 경우 먼저 삭제해야 합니다. 자세한 내용은
벡터 색인 삭제를 참조하세요.
다음 문에서 DELETE는 임베딩 열의 값을 삭제하는 데 사용됩니다.
DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');
다음 단계
- Cloud SQL에서 벡터 개요 읽어보기
- 인스턴스에서 벡터 임베딩 사용 설정 및 사용 중지하는 방법 알아보기
- 벡터 색인 만들기 방법 알아보기
- 벡터 임베딩에서 검색을 수행하는 방법 알아보기