RAG의 성능을 개선하는 비법, 모듈화
지금까지 검색증강생성(RAG, Retrieval Augmented Generation)을 구성하는 핵심적인 요소들에 대해 배워보았습니다. RAG 파이프라인을 구성하는 요소인 임베딩 모델과 벡터 DB 그리고 최종적인 LLM 답변의 전체적인 톤 앤 매너와 제약사항 등을 통해 답변을 제어하는 시스템 프롬프트(System Prompt)까지 검색증강생성 파이프라인에는 정말 다양한 요소들이 있었습니다.
여태껏 배운 것들을 정리해 봅시다. 생성형 AI도 구글링을 한다? 에서 살펴보았던 것처럼 결국 RAG는 LLM이 양질의 정보를 '검색'하기 위한 일종의 파이프라인입니다. LLM에게 검색하게 하고자 하는 텍스트 데이터를 질서 정연하게 인덱싱(Indexing) 및 청킹(Chunking) 해준 뒤에 '임베딩 모델'에 제공해 주면 Token ID와 함께 숫자로 된 벡터들을 얻을 수 있습니다. 그 벡터들을 chromaDB나 Elasic Search와 같은 여러 벡터 DB에 저장해 두었다가 LLM이 프롬프트와 함께 관련된 질문을 받으면 꺼내다 쓸 수 있도록 해주는 것이지요.
이때 RAG 파이프라인의 각 요소들은 하나의 시스템으로 유기적으로 작용하는 것처럼 보이지만 각각의 요소를 떼어놓고 살펴보면 마치 레고 블록처럼 분리하고 갈아 끼울 수도 있습니다. 이번에 새로 나온 어느 '임베딩 모델'이 좋다고 하면 해당 부분만 갈아 끼울 수도 있고, 우리 회사의 데이터에 더 적합한 '벡터 DB'를 발견하면 마찬가지로 그 부분만 교체할 수도 있지요.
이러한 블록 작업들을 용이하게 하고, 보다 뛰어난 성능을 구현해 내는 방법으로 제안된 모듈러 RAG라는 개념이 있습니다. 이번 시간에는 Modular RAG: A Reconfigurable Framework for Retrieval-Augmented Generation라는 논문을 리뷰하며 모듈러 RAG의 개념에 대해 소개호도록 하겠습니다.
지난 몇 주에 걸쳐 RAG 파이프라인을 구성하는 임베딩 모델, 벡터 DB, 그리고 LLM의 최종 답변을 제어하는 시스템 프롬프트까지, 이 모든 요소들이 어떻게 유기적으로 작동하는지에 대해 살펴봤습니다. 그런데 이러한 요소들이 각각 독립적으로 존재하면서도 쉽게 교체될 수 있다는 사실을 알고 계셨나요?
이번에 소개할 '모듈러 RAG'는 바로 이러한 교체 가능성을 극대화하고, 성능을 더욱 향상할 수 있는 새로운 접근법입니다. 모듈러 RAG는 복잡한 RAG 시스템을 마치 레고 블록처럼 여러 개의 독립적인 모듈로 나누어, 필요에 따라 각 모듈을 교체하거나 조합할 수 있게 만들어 줍니다. 이로 인해 시스템의 유연성은 물론, 확장성까지 한층 강화됩니다.
모듈러 RAG는 RAG 시스템을 여러 개의 독립적인 모듈로 나누어 구성하는 방식을 제안합니다. 이를 통해 각 모듈은 다른 모듈과 독립적으로 동작하면서도, 서로 필요한 정보를 교환하며 전체 시스템을 구성할 수 있습니다. 여기서 핵심은 '모듈화'입니다. 각 모듈은 특정한 역할을 담당하며, 해당 모듈을 다른 모듈로 교체하거나 조합함으로써 다양한 작업을 처리할 수 있습니다.
모듈러 RAG는 크게 세 가지 주요 수준으로 나누어집니다. 첫 번째는 모듈로, RAG 시스템의 핵심 프로세스를 담당합니다. 예를 들어, 데이터 인덱싱, 검색 전후 처리, 생성 과정 등이 모듈에 해당합니다. 두 번째는 하위 모듈로, 각 모듈 내의 세부 기능을 세분화하고 최적화하는 역할을 합니다. 예를 들어, 쿼리 확장이나 검색기 선택 등이 하위 모듈에 해당합니다. 세 번째는 연산자로, 하위 모듈 내에서 실제 기능을 수행하는 기본 단위입니다. 예를 들어, 슬라이딩 윈도나 메타데이터 첨부 같은 기능이 연산자에 해당합니다.
모듈러 RAG는 각 모듈을 독립적으로 설계하고 이를 필요에 따라 교체하거나 결합할 수 있도록 합니다. 예를 들어, 새로운 임베딩 모델이 등장하거나 기존의 벡터 DB가 성능을 더 높일 수 있다고 판단되면, 해당 모듈만 교체하는 방식으로 시스템을 최적화할 수 있습니다. 이렇게 모듈화 된 시스템은 단순히 기존의 시스템을 확장하거나 개선하는 것에 그치지 않고, 다양한 시나리오에 맞게 빠르게 적응할 수 있습니다.
모듈러 RAG는 또한 동적이고 적응 가능한 시스템을 가능하게 만듭니다. 예를 들어, 특정 작업이나 데이터 소스에 맞는 모듈을 선택하고, 이를 조합함으로써 효율적인 RAG 시스템을 구성할 수 있습니다. 또한, 모듈러 RAG는 각 모듈이 독립적으로 유지보수되고 개선될 수 있기 때문에, 시스템의 유지 관리가 용이하고, 새로운 기술이나 방법론을 도입하는 데에도 유리하지요.
모듈러 RAG의 가장 큰 장점은 바로 유연성과 확장성입니다. 특정 작업에 맞는 모듈을 자유롭게 선택하고 교체함으로써 시스템을 최적화할 수 있고, 새로운 기술이나 방법론을 빠르게 적용할 수 있습니다. 또한, 각 모듈은 독립적으로 유지 관리되기 때문에, 시스템 전체의 안정성을 높이는 데에도 유리합니다.
또한, 모듈러 RAG는 시스템의 복잡도를 낮추고, 성능을 더욱 향상할 수 있는 가능성을 제공합니다. 예를 들어, 특정 데이터 소스에 더 적합한 벡터 DB를 찾거나, 최신의 임베딩 모델을 도입하는 등의 작업을 통해 성능을 지속적으로 개선할 수 있습니다. 이는 빠르게 변화하는 기술 환경에 적응하는 데 큰 이점이 됩니다.
모듈러 RAG는 기존의 RAG 시스템을 보다 유연하고 확장 가능한 형태로 발전시킨 혁신적인 접근법입니다. 이를 통해 각 요소를 독립적으로 조정하고 최적화할 수 있어, 다양한 작업 시나리오에 맞는 맞춤형 시스템을 구축할 수 있습니다. 모듈러 RAG는 계속해서 발전하는 AI 환경에서 더 나은 성능과 효율성을 제공합니다.
이처럼 생성형 AI 기술의 최신 트렌드는 수직적인 시스템 구조에서 탈피해 극도의 '유연성'을 추구하는 방향으로 나아가고 있습니다. 생성형 AI는 수개월 주기로 워낙 기술이 빠르게 바뀌고 있는 분야이기 때문에, 각 요소를 개별적으로 조정하고 교체할 수 있는 유연한 시스템은 필수적이기 때문이죠.
예를 들어 RAG의 각 구성 요소를 활용할 수 있는 대표적인 라이브러리인 랭체인(Langchain)과 랭그래프(Langgraph)를 보아도 알 수 있습니다. 다음 시간에는 랭체인과 랭그레프의 기초 개념과 왜 랭그래프가 최근 랭체인보다 더 각광받고 있는지 그 이유에 대해 생각해 볼 수 있는 시간을 가져보도록 하겠습니다.