퀵스타트: 벡터 직접 가져오기
퀵스타트: 벡터 직접 가져오기 (Bring Your Own Vectors)
Weaviate는 벡터 데이터베이스라서 데이터 객체와 그 객체를 표현하는 벡터(임베딩)를 함께 저장합니다. 데이터를 가져올 때 기존에 만든 벡터를 넘기거나 새로 생성할 수 있는데, "Bring Your Own Vectors" 는 데이터 업로드 시점에 이미 만들어진 벡터 임베딩을 직접 제공하는 방식을 말해요. 사용자가 만든 커스텀 벡터나 모델 프로바이더로 미리 생성한 벡터를 그대로 넘길 수 있습니다.
출처: 공식문서
가이드 순서
기존 벡터가 있는 데이터를 가져오려면 다음 순서를 따르면 돼요.
- 설정 단계 확인
- Weaviate 인스턴스에 연결
- 자기 벡터를 지정한 데이터 가져오기
- 벡터 검색 수행
설정
예시 데이터
예시 데이터는 미국 퀴즈 프로그램 "Jeopardy!"의 질문 10개 기반입니다. 가져오기 데이터 파일은 벡터와 원본 데이터가 함께 담긴 JSON 문서이고, 벡터 임베딩은 OpenAI API의 text-embedding-ada-002 모델로 생성됐어요.
클라이언트 라이브러리
Python 클라이언트는 Weaviate v1.23.7 이상이 필요합니다.
pip install -U weaviate-client
Weaviate에 연결하기
REST Endpoint와 Admin 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가 그 벡터라이저로 쿼리 벡터 임베딩을 생성
- 벡터라이저가 없으면 검색할 때 쿼리 벡터를 직접 제공