RAG - Retrieval Augmented Generation
LLM으로 구현할 수 있는 가장 강력한 애플리케이션 중 하나는 정교한 질의응답(Q&A) 챗봇입니다. 이는 특정 소스 정보에 대한 질문에 답할 수 있는 애플리케이션입니다. 이러한 애플리케이션은 Retrieval Augmented Generation(RAG)이라는 기술을 사용합니다.
간단히 말하면,
(1) 데이터 검색 + (2) 텍스트 생성 ⇒ 의 결합! 이라고 할 수 있습니다.
RAG는 자연어 처리 분야에서 언어 모델의 기능을 향상시키기 위해 검색 시스템과 결합하는 방법입니다. 이 접근법은 광범위한 외부 정보 소스에 의해 정보를 제공받아 응답이나 콘텐츠를 생성하는 데 유용합니다.
RAG는 추가 데이터로 LLM의 지식을 보강하는 기술입니다. LLM은 광범위한 주제에 대해 추론할 수 있지만, 그 지식은 학습된 특정 시점까지의 공개 데이터로 제한됩니다. 비공개 데이터나 모델의 마감일 이후에 도입된 데이터에 대해 추론할 수 있는 AI 애플리케이션을 구축하려면 모델에 필요한 특정 정보로 모델의 지식을 보강해야 합니다. 적절한 정보를 가져와 모델 프롬프트에 삽입하는 프로세스를 Retrieval Augmented Generation(RAG)이라고 합니다. LangChain에는 Q&A 애플리케이션과 보다 일반적인 RAG 애플리케이션을 구축하는 데 도움이 되도록 설계된 여러 구성 요소가 있습니다. (여기서는 비정형 데이터에 대한 Q&A에 초점을 맞춥니다)
1. Loading: 텍스트 파일, PDF, 다른 웹사이트, 데이터베이스, API 등 데이터가 있는 위치에서 파이프라인으로 데이터를 가져오는 것을 말합니다.
중요 개념: Nodes and Documents
2. Indexing: 이는 데이터를 쿼리할 수 있는 데이터 구조를 만드는 것을 의미합니다. LLM의 경우, 이는 거의 항상 벡터 임베딩, 데이터의 의미를 수치로 표현하는 것, 그리고 상황에 맞는 데이터를 쉽게 찾을 수 있도록 하는 수많은 기타 메타데이터 전략을 생성하는 것을 의미합니다.
중요 개념: Indexes, Embeddings
3. Storing: 데이터가 색인된 후에는 거의 항상 색인과 다른 메타데이터를 저장하여 다시 색인할 필요가 없도록 해야 합니다.
4. Querying: 주어진 인덱싱 전략에 따라 하위 쿼리, 다단계 쿼리, 하이브리드 전략 등 여러 가지 방법으로 LLM과 LlamaIndex 데이터 구조를 활용하여 쿼리할 수 있습니다.
중요 개념: Retrievers, Routers, Node Postprocessors, Response Synthesizers
5. Evaluation: 모든 파이프라인에서 중요한 단계는 다른 전략과 비교하여 얼마나 효과적인지 또는 변경할 때 얼마나 효과적인지 확인하는 것입니다. 평가는 쿼리에 대한 응답이 얼마나 정확하고 충실하며 빠른지에 대한 객관적인 척도를 제공합니다.
→ RAG stage와 중요 개념에 대한 것은 아래 링크 참조
High-Level Concepts - LlamaIndex
중요 개념들을 한번 짚어보겠습니다.
Load: 먼저 데이터를 로드합니다. 이 작업은 DocumentLoaders로 수행됩니다.
Split: Text splitters는 큰 문서를 작은 덩어리로 나눕니다. 큰 덩어리는 검색하기 어렵고 모델의 한정된 컨텍스트 창에 맞지 않기 때문에 데이터를 인덱싱하고 모델에 전달할 때 유용합니다.
Store: 나중에 검색할 수 있도록 분할을 저장하고 색인할 곳이 필요합니다. 이 작업은 VectorStore 과 Embeddings model을 사용해 수행됩니다.
Retrieve: 사용자의 input을 받으면, Retriever를 사용하여 스토리지에서 relevent split를 검색합니다.
Generate: A ChatModel / LLM 은 은 질문과 retrieved data가 포함된 프롬프트를 사용하여 답변을 생성합니다.
Orchestrators: LangChain, LlamaIndex 또는 FastRAG와 같은 Orchestrators를 사용해 외부 리소스, 데이터베이스 및 기타 도구와 LLM을 연결합니다. 이러한 프레임워크는 LLM의 기능을 강화하는 데 도움이 됩니다.
Retrievers: 사용자 지침은 검색에 직접적으로 최적화되어 있지 않으므로 다양한 기술을 사용하여 이러한 지침을 바꾸거나 확장하세요. 이렇게 하면 RAG 파이프라인의 성능을 향상시킬 수 있습니다. 예를 들어, 다중 쿼리 검색기나 HyDE 접근 방식을 사용하는 것을 고려할 수 있습니다.
Memory: 메모리 시스템을 구현하여 사용자 지시 및 응답과 같은 이전 상호작용을 기억하세요. 이 컨텍스트는 요약(더 작은 LLM 사용 가능) 또는 벡터 저장소와 RAG의 조합과 같은 방법을 사용하여 향상시킬 수 있습니다.
Evaluation: 문서 검색(문맥 정밀도와 리콜을 살펴봄)과 생성(답변의 충실도와 관련성 평가) 측면에서 RAG 파이프라인의 성능을 평가하는 것이 중요합니다. Ragas 및 DeepEval과 같은 도구는 이러한 평가 프로세스를 간소화할 수 있습니다.
실용적인 지침을 위해 더 자세히 알아볼 수 있는(deep dive) 몇 가지 참고 자료를 참조하세요:
LangChain Q&A with RAG: A step-by-step tutorial on building a typical RAG pipeline.
Llamaindex - High-level concepts: Understand the main concepts involved in building RAG pipelines.
Pinecone - Retrieval Augmentation: An overview of the retrieval augmentation process.
LangChain - Memory types: Explore different types of memory systems and their applications in RAG setups.
RAG pipeline - Metrics: Learn about the main metrics used to evaluate RAG pipelines.
이 포괄적인 접근 방식은 효과적인 검색 및 생성 메커니즘을 통해 LLM의 기능을 향상시키는 RAG 파이프라인을 구현하는 데 도움이 될 것입니다.
참고 사이트
https://docs.llamaindex.ai/en/stable/getting_started/concepts/#putting-it-all-together