RAG
RAG (검색 증강 생성)
RAG는 정보 검색(Retrieval)과 생성형 AI 모델(Generation)을 결합한 기법이에요. Weaviate에서는 RAG 쿼리가 검색 쿼리와 모델용 프롬프트 두 부분으로 이뤄집니다. 즉 Weaviate가 먼저 검색을 수행하고, 그 결과와 사용자 프롬프트를 생성형 AI 모델에 넘긴 뒤 생성된 응답을 돌려주는 구조예요.
상황부터 — 검색과 생성을 한 쿼리로
보통 RAG는 "벡터 DB에서 검색" → "검색 결과 + 프롬프트를 LLM에 전달" → "답변 생성"까지 애플리케이션 코드가 중간 단계를 일일이 연결해야 해요. Weaviate는 이 검색과 생성을 하나의 쿼리로 합쳐서, 근처 벡터 검색(near_text 등)에 생성형 설정을 그대로 붙이는 방식으로 처리합니다.
자연어 질문을 선호하시나요? Weaviate의 Query Agent는 평문 영어 질문을 최적화된 Weaviate 쿼리로 자동 번역해주므로, 쿼리를 직접 작성하지 않아도 돼요. (Cloud 전용)
생성형 모델 공급자 구성
v1.30부터 추가된 기능입니다. RAG를 생성형 모델 통합과 함께 쓰려면 두 가지 방법이 있어요.
- 컬렉션에 **기본 설정(default configuration)**을 두거나
- 쿼리 일부로 설정을 함께 전달하기
컬렉션에 네임드 벡터(named vectors)가 설정된 경우, 어떤 벡터 검색이든 쿼리에 target_vector(대상 벡터 이름)를 반드시 포함해야 Weaviate가 쿼리 벡터와 비교할 올바른 벡터를 찾을 수 있어요.
파이썬 예시:
from weaviate.classes.generate import GenerativeConfig
from weaviate.classes.query import MetadataQuery
reviews = client.collections.use("WineReviewNV")
response = reviews.generate.near_text(
query="a sweet German white wine",
limit=2,
target_vector="title_country",
single_prompt="Translate this into German: {review_body}",
grouped_task="Summarize these review",
generative_provider=GenerativeConfig.openai(),
)
for o in response.objects:
print(f"Properties: {o.properties}")
print(f"Single prompt result: {o.generative.text}")
print(f"Grouped task result: {response.generative.text}")
single_prompt vs grouped_task
두 가지 생성 쿼리 모드가 있어요.
- single_prompt — 검색된 객체 각각을 개별적으로 LLM에 보내면서, 객체별 프롬프트 템플릿을 적용합니다. 위 예시처럼
{review_body}같은 속성 플레이스홀더를 써서 객체마다 다른 프롬프트를 만들 수 있어요. - grouped_task — 검색된 모든 객체를 하나의 프롬프트로 묶어 보냅니다. 요약(summary)·비교(comparison) 같은 작업에 적합합니다.
타입스크립트 예시(동일한 개념):
import { generativeParameters } from 'weaviate-client';
const reviews = client.collections.use("WineReviewNV")
const searchResponse = await reviews.generate.nearText("a sweet German white wine", {
singlePrompt: {
prompt: "Translate this into German: {review_body}"
},
groupedTask: {
prompt: "Summarize these review"
},
config: generativeParameters.openAI({
model: "gpt-3.5-turbo",
}),
}, {
limit: 2,
targetVector: "title_country",
})
for (const result of searchResponse.objects) {
console.log("Properties:", result.properties)
console.log("Single prompt result:", result.generative?.text)
console.log("Grouped task result:", searchResponse.generative?.text)
}
자바 예시에서는 GenerativeProvider.openai(o -> o.temperature(1f))처럼 공급자에 온도 등 옵션을 함께 지정할 수 있어요.
요약
- Weaviate의 RAG는
generate계열 API로 검색 + 생성이 한 번에 이뤄집니다. single_prompt(객체별)와grouped_task(전체 묶음)를 상황에 맞게 선택하세요.- 네임드 벡터 컬렉션이면
target_vector지정이 필수예요. - 생성형 공급자는 컬렉션 기본값으로 두거나 쿼리마다
generative_provider로 전달할 수 있어요.