검색 증강 생성
검색 증강 생성 (RAG)
LLM은 학습 시점 이후의 최신 정보나 사내 문서를 모르기 때문에, 검색으로 관련 데이터를 먼저 뽑아 온 뒤 그 데이터와 사용자 질문을 함께 LLM에 주는 방식이 RAG(검색 증강 생성) 예요. Weaviate는 검색과 생성이 하나의 쿼리로 합쳐진 통합형 RAG를 제공해서, 검색으로 데이터를 뽑는 동시에 같은 데이터로 LLM을 프롬프트할 수 있습니다.
출처: 공식문서
왜 RAG를 쓰나요
RAG는 두 단계로 동작합니다. 첫 단계에서 쿼리로 관련 데이터를 검색하고, 두 번째 단계에서 검색된 데이터에 사용자 질문을 합쳐 LLM에 프롬프트해요. Weaviate는 유사도·키워드·하이브리드 검색과 필터링을 모두 지원하므로, 필요한 정보를 찾는 쉽고 빠른 방법을 제공합니다.
RAG를 위한 Weaviate 구성
먼저 컬렉션에서 사용할 벡터라이저와 생성형 모듈을 활성화해야 해요. 아래는 Cohere·HuggingFace·OpenAI·Google의 벡터라이저와 생성형 모듈을 켜는 예시입니다.
services:
weaviate:
environment:
ENABLE_MODULES: "text2vec-cohere,text2vec-huggingface,text2vec-openai,text2vec-google,generative-cohere,generative-openai,generative-google"
데이터베이스 채우기
컬렉션 정의 만들기
아래 GitBookChunk 컬렉션 정의는 text2vec-openai를 벡터라이저로, generative-openai를 생성형 모듈로 지정합니다. 생성형 파라미터에 빈 딕셔너리를 주면 기본 파라미터를 쓰겠다는 의미예요.
import weaviate.classes as wvc
collection_name = "GitBookChunk"
if client.collections.exists(collection_name): # In case we've created this collection before
client.collections.delete(collection_name) # THIS WILL DELETE ALL DATA IN THE COLLECTION
client.collections.create(
collection_name,
vector_config=wvc.config.Configure.Vectors.text2vec_openai(), # Use `text2vec-openai` as the vectorizer
generative_config=wvc.config.Configure.Generative.openai(), # Use `generative-openai` with default parameters
)
생성형 쿼리
RAG는 내부적으로 "객체 검색 → 텍스트 생성"이라는 두 단계로 동작합니다. 검색으로 뽑은 객체를 그대로 LLM 생성에 사용하기 때문에, Weaviate 검색의 전체 기능을 활용해 최신 정보를 맥락으로 LLM에 제공할 수 있어요.
모범 사례와 팁
청크 단위로 검색·필터링할 수 있도록 데이터를 구조화하고, 소스 문서에 나타나는 순서대로 청크를 LLM에 프롬프트하면 생성 품질을 높일 수 있습니다.
Wrap-up
Weaviate에서 RAG가 LLM을 어떻게 강화하는지 살펴봤어요. 검색 기능을 자세히 보려면 How-to: search 가이드를, 개별 모듈은 모델 프로바이더 통합 문서를 참고하세요.