6️⃣Advanced RAG

Advanced RAG with LlamaIndex, Weaviate

LlamaIndex와 Weaviate를 사용한 Advanced RAG 파이프라인을 안내합니다.

Prerequisites

#%pip5 install -U weaviate-client
#%pip install llama-index-vector-stores-weaviate

import llama_index
import weaviate
from importlib.metadata import version
import os
from dotenv import load_dotenv,find_dotenv

!echo "OPENAI_API_KEY=<Your OpenAI Key>" >> .env # 최초 한번만 설정

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
True

Embedding Model and LLM

먼저 글로벌 설정 개체에서 임베딩 모델과 LLM을 정의할 수 있습니다. 이렇게 하면 코드에서 모델을 다시 명시적으로 지정할 필요가 없습니다.

  • Embedding model: 쿼리뿐만 아니라 문서 청크에 대한 벡터 임베딩을 생성하는 데 사용됩니다.

  • LLM: 사용자 쿼리와 관련 컨텍스트를 기반으로 답변을 생성하는 데 사용됩니다.

  • Weaviate에서도 임베딩 모델(벡터화 모듈)과 LLM(생성 모듈)을 지정할 수 있지만 이 경우에는 Llamaindex에 정의된 LLM과 임베딩 모델이 사용됩니다.

Load data

Step 3: Chunk to Nodes

  • 전체 문서가 너무 커서 LLM의 컨텍스트 창에 맞지 않으므로 이를 작은 텍스트 덩어리로 분할해야 하며, 이를 LlamaIndex에서 nodes라고 합니다.

  • SentenceWindowNodeParser를 사용하면 각 문장은 메타데이터로 원래 문장을 둘러싼 더 큰 텍스트 창과 함께 청크로 저장됩니다.

Building index

  • 모든 외부 지식을 Weaviate 벡터 데이터베이스에 저장하는 인덱스를 구축합니다.

  • 먼저 Weaviate 인스턴스에 연결해야 합니다. 여기서는 Weaviate Embedded를 사용합니다.

  • 임베디드 인스턴스는 부모 애플리케이션이 실행되는 한 계속 유지된다는 점에 유의하세요. 보다 영구적인 솔루션을 원한다면 관리형 Weaviate 클라우드 서비스(WCS) 인스턴스를 사용하는 것이 좋습니다. 여기에서 14일 동안 무료로 사용해 볼 수 있습니다여기arrow-up-right.*

데이터를 저장하고 상호 작용할 Weaviate 클라이언트에서 VectorStoreIndex를 빌드합니다.

Query Engine

마지막으로 인덱스를 쿼리 엔진으로 설정합니다.

Build Metadata Replacement Post Processor

Advanced RAG에서는 문장 창 검색 메서드의 일부로 MetadataReplacementPostProcessor를 사용하여 각 노드의 문장을 주변 컨텍스트로 대체할 수 있습니다.

Add Re-ranker

Advanced RAG의 경우 검색된 컨텍스트의 쿼리와의 관련성에 따라 다시 순위를 매기는 re-ranker를 추가할 수도 있습니다. similarity_top_k를 더 많이 검색해야 하며, 이는 top_n으로 줄어든다는 점에 유의하세요.

마지막으로 모든 구성 요소를 쿼리 엔진에 통합할 수 있습니다!

또한, 의미 기반 검색과 키워드 기반 검색 간의 가중치를 제어하기 위해 추가 알파 파라미터를 사용하여 하이브리드 검색을 활성화하기 위해 vector_store_query_mode"hybrid"로 설정합니다.

Run Advanced RAG Query

Last updated