퀵스타트: 벡터 직접 가져오기

퀵스타트: 벡터 직접 가져오기 (Bring Your Own Vectors)

Weaviate는 벡터 데이터베이스라서 데이터 객체와 그 객체를 표현하는 벡터(임베딩)를 함께 저장합니다. 데이터를 가져올 때 기존에 만든 벡터를 넘기거나 새로 생성할 수 있는데, "Bring Your Own Vectors" 는 데이터 업로드 시점에 이미 만들어진 벡터 임베딩을 직접 제공하는 방식을 말해요. 사용자가 만든 커스텀 벡터나 모델 프로바이더로 미리 생성한 벡터를 그대로 넘길 수 있습니다.

출처: 공식문서

가이드 순서

기존 벡터가 있는 데이터를 가져오려면 다음 순서를 따르면 돼요.

  1. 설정 단계 확인
  2. Weaviate 인스턴스에 연결
  3. 자기 벡터를 지정한 데이터 가져오기
  4. 벡터 검색 수행

설정

예시 데이터

예시 데이터는 미국 퀴즈 프로그램 "Jeopardy!"의 질문 10개 기반입니다. 가져오기 데이터 파일은 벡터와 원본 데이터가 함께 담긴 JSON 문서이고, 벡터 임베딩은 OpenAI API의 text-embedding-ada-002 모델로 생성됐어요.

클라이언트 라이브러리

Python 클라이언트는 Weaviate v1.23.7 이상이 필요합니다.

pip install -U weaviate-client

Weaviate에 연결하기

REST EndpointAdmin API 키를 환경 변수로 저장해 연결합니다.

import weaviate
from weaviate.classes.init import Auth

# Best practice: store your credentials in environment variables
weaviate_url = os.environ["WEAVIATE_URL"]
weaviate_api_key = os.environ["WEAVIATE_API_KEY"]

# Connect to Weaviate Cloud
client = weaviate.connect_to_weaviate_cloud(
    cluster_url=weaviate_url,
    auth_credentials=Auth.api_key(weaviate_api_key),
)

컬렉션 정의

컬렉션 만들기

self_provided 벡터 설정으로 컬렉션을 만들면, 직접 제공한 벡터를 받을 수 있어요.

import weaviate.classes as wvc

# Create the collection. Weaviate's autoschema feature will infer properties when importing.
questions = client.collections.create(
    "Question",
    vector_config=wvc.config.Configure.Vectors.self_provided(),
)

(선택) 호환 벡터라이저 설정

커스텀 벡터를 만드는 데 쓴 벡터라이저에 Weaviate 통합이 있다면 컬렉션 정의에 그 벡터라이저를 추가하는 걸 고려하세요. 벡터라이저를 지정하면 Weaviate가 필요할 때 새 벡터를 만들어낼 수 있습니다.

이 예시의 벡터는 OpenAI ada-002 모델로 생성됐는데, Weaviate의 text2vec-openai 통합이 ada-002 모델에 접근할 수 있으므로 컬렉션 정의에 text2vec-openai를 지정하면 됩니다.

데이터와 벡터 가져오기

import requests

fname = "jeopardy_tiny_with_vectors_all-OpenAI-ada-002.json"  # This file includes pre-generated vectors
url = f"https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/{fname}"
resp = requests.get(url)

가져온 데이터에 포함된 벡터를 vector 파라미터로 함께 넘기면 Weaviate가 그 벡터를 그대로 저장합니다.

쿼리하기

저장된 벡터를 검색하려면 Weaviate가 쿼리의 벡터 임베딩이 필요해요.

  • 컬렉션 정의에 벡터라이저가 있으면 Weaviate가 그 벡터라이저로 쿼리 벡터 임베딩을 생성
  • 벡터라이저가 없으면 검색할 때 쿼리 벡터를 직접 제공

더 알아보기 (Learn more)