Modular RAG

Modular RAG

레고와 같이 재구성이 용이하고 보다 유연한 흐름을 만들 수 있는 프레임워크

  • 독립적(Independant) - 기능 위주로 세분화
  • 유연하고 확장성(flexable & scalable) - 모듈의 추가 및 변경이 쉬움
  • 동적(dynamic) - 그래프 형식의 흐름 구성, 상황에 따른 분기 처리

 

모듈

모듈, 하위 모듈 및 운영자로 구성된 아키텍처 설계를 통해 통합되고 구조화된 방식으로 RAG 시스템을 정의

  • 각 단계(Step)를 모듈(Module) 별로 정의
    • 각 모듈은 하위 모듈(Sub Module)로 구성
  • 하위 모듈은 플러그인 형식의 독립된 구조
    • 독립 구조
      • 각 모듈은 조립형으로 설계(레고 블록)
    • 병렬 구조
      • 여러 하위 모듈을 동시실행 후 병합 가능
    • 분기 구조
      • 상황에 따른 분기 처리가 가능

 

독립적인 모듈 구성

동일한 형태입력과 출력을 반환하는 Interface

  • 레고 방식의 조립이 가능한 Module 설계
  • 내부 구현은 모듈 별 목적에 따라 다르게 구현

예)

def custom_retriever(data: RagData) -> RagData:
    # 커스텀 retriever 로직 구현
    ...
    return data

def request_private_api(data: RagData) -> RagData:
    # API 호출 로직 구현
    ...
    return data

 

조립형 모듈

마치 레고 블록처럼 세부 모듈(Sub-Module)연결하여 구성

  • 모듈의 추가/변경 용이

독립적인 모듈의 장점을 활용

  • 각 Sub-Module의 교체가 쉬움
  • 단계의 전/후에 Sub-Module을 추가

 

그래프 형식의 동적 흐름 구성

평가자 -> "문서 검색"에 대한 평가(Score) - 문서에 Query에 대한 답변을 위한 정보가 충분한지 판단

  • Success: 답변 생성
  • Fail
    • 검색된 문서의 정보가 불충분한 경우
      • 문서 검색을 위한 Query Rewrite
    • 질문이 모호한 경우
      • 보다 명확한 질문 or Query Decomposition을 통한 세부 질문으로 구성 후 검색

 

Query -> 문서 검색 -> 답변 생성 -> 평가자 -> "답변"에 대한 평가(Score) - Query에 대한 답변이 충분한지 평가

  • Success: 답변 생성
  • Fail
    • 질문이 모호한 경우
      • Query Rewrite
    • 정보가 불충분한 경우
      • 추가 검색 모듈(Web Search)을 활용하여 문맥(Context) 보강

 

질문에 문서 검색이 필요한지 판단하여 Routing

  • YES: 문서 검색 -> 답변 생성
  • NO
    • 즉각 답변 생성: 토큰 비용의 절약
    • 예) "대한민국의 수도는 어디입니까?" -> 즉각 답변
  • 평가자 2는 RAG 답변에 대한 평가

*평가자 : LLM에게 평가 기준을 프롬프트로 제공하여 구현


 

출처