소개
지난 강의를 듣다가 듣게된 "모듈러 RAG" 란 단어를 듣고 이건 뭐지라는 생각에 찾다가 알게 되어 사용해 보게 되었네요.
진행 방법
우선 Modular RAG 에 대해서 찾아보게 되었습니다.
'''
모듈러 RAG는 “Retrieval Augmented Generation”의 모듈화된 접근 방식을 의미해요. 기본적으로 RAG는 정보 검색(리트리벌) 모듈과 자연어 생성(제너레이션) 모듈을 결합한 시스템인데, 모듈러 RAG는 이 두 부분을 별개의 모듈로 분리해서 독립적으로 개발하고 최적화할 수 있도록 설계된 아키텍처예요.
주요 특징
독립적인 모듈 구성:
정보 검색 모듈은 외부 데이터베이스나 문서 저장소에서 관련 정보를 찾아내고, 생성 모듈은 이를 바탕으로 자연어 응답을 만들어내요. 각 모듈이 독립적으로 업데이트되거 나 교체될 수 있어요.
유연성과 확장성:
모듈러 구조 덕분에, 특정 부분(예를 들어 검색 알고리즘이나 생성 모델)을 개선하거나 다른 도메인에 맞게 맞춤 설정하기가 쉬워요. 이는 최신 정보 반영이나 도메인 특화 응답 제공에 유리해요.
효율적인 협업:
두 모듈 간의 협력이 체계적으로 이루어지며, 이를 통해 보다 정확하고 풍부한 정보를 제공할 수 있어요. 예를 들어, 검색 모듈이 최신 정보를 제공하면 생성 모듈이 그 정보를 바탕으로 자연스러운 언어로 답변을 구성하는 방식으로 작동해요.
이와 같이, 모듈러 RAG는 기존의 단일 모델 기반 생성 방식보다 더 높은 유연성과 정확도를 목표로 한 접근 방식이라고 볼 수 있어요.
'''
구분
Native RAG
Advanced RAG
Modular RAG
구현 난이도
낮음
중간~높음
높음
정확도/성능
보통
높음
높음
구성 복잡도
단순
복잡
복잡하나 구조적으로 정리됨
유지보수/확장성
낮음
중간
높음
사용 목적
빠른 프로토타입 제작
정밀한 RAG 서비스 개발
대규모 서비스, 실시간 운영
역할별로 Module 를 만들어서 구성한다. 그래서 Module 별로 최적화를 할 수 있다... 라지만 잘 체감은 안됨
그래서 아키텍처에 대하여도 찾아봄
'''
다음은 모듈러 RAG 아키텍처에 관한 다양한 자료들을 요약한 내용입니다. 여러 자료에서 설명하는 공통된 핵심 요소는 아래와 같습니다:
1. 모듈러 RAG의 기본 개념
모듈화된 구성:
전통적인 RAG가 인덱싱, 검색, 생성이라는 단계를 하나의 흐름으로 처리하는 반면, 모듈러 RAG는 각 단계(예: 검색 모듈, 생성 모듈, 평가 모듈 등)를 독립적인 블록처럼 구성하여 필요에 따라 교체 및 확장이 가능하도록 설계되어 있습니다.
2. 주요 모듈 및 패턴
검색 모듈:
기존의 임베딩 기반 검색뿐만 아니라, LLM이 생성한 코드나 SQL을 활용해 다양한 데이터 소스를 검색할 수 있습니다.
메모리 모듈:
LLM의 메모리 기능을 활용하여 이전 질의나 검색 결과를 저장하고 반복 활용, 추론 성능을 향상시킵니다.
추가 생성 및 태스크 적응 모듈:
잡음 제거와 중복을 줄여 더 정확한 답변 생성을 돕고, 특정 작업에 맞춰 쿼리와 프롬프트를 자동 생성하는 기능을 포함합니다.
정렬 및 검증 모듈:
검색된 결과를 재정렬(re-ranking)하고, 프롬프트 압축 등을 통해 입력 정보를 최적화하여 LLM이 보다 신뢰성 있는 답변을 생성할 수 있도록 지원합니다.
3. 모듈 간 상호작용의 최적화
유연한 인터페이스:
각 모듈은 동일한 인터페이스를 통해 연결되므로, 필요에 따라 모듈을 추가, 교체, 제거하는 것이 쉽습니다.
동적 흐름 구성:
모듈러 RAG는 특정 시나리오나 작업에 따라 동적으로 모듈의 순서를 재구성할 수 있어, 복잡한 질의에도 효과적으로 대응할 수 있습니다.
4. 모듈러 RAG의 장점
확장성과 유연성:
새로운 기술이나 도메인에 맞게 각 모듈을 독립적으로 최적화할 수 있어, 전체 시스템의 개선이 용이합니다.
효율적인 문제 해결:
단일 RAG 시스템에서 발생할 수 있는 검색 품질, 정보 노이즈, 그리고 환각 문제 등을 모듈 단위로 개선할 수 있습니다.
이러한 아키텍처적 접근 방식은 최근 AI 애플리케이션의 다양한 문제들을 해결하는 데 중요한 역할을 하며, 특히 검색과 생성의 품질을 높이고 사용자 맞춤형 응답을 제공하는 데 효과적입니다.
'''
그래도 잘 몰라서 RAG 구현사례들을 찾아봄.
그러나 "I Built the ULTIMATE n8n RAG AI Agent Template" 라는 영상을 보게됨
https://www.youtube.com/watch?v=mQt1hOjBH9o
템플릿 소스를 얻어서 내용을 살펴봄
https://github.com/coleam00/ottomator-agents/tree/main/n8n-agentic-rag-agent
Postgresql 에 대해서도 설정해 볼 겸 해당 템플릿으로 동작하는지 구현해 봄.
잘 안되어서 동작할 수 있게 하면서 나의 사용법에 맞게 수정함.
이 아키텍처가 Modular RAG 방식인지 JSON 을 Claude 한테 던져서 물어보니 전형적인 Modular RAG 라고 함.
기존의 챗봇은 어떤지도 확인해보고 싶어서 물어보았더니 Native RAG 와 Advanced RAG, Modular RAG 가 섞여 있는 Hybrid RAG 라고 답해줌.
Modular RAG 에 대하여 확실히 이해함.
결과와 배운 점
RAG 의 종류에 대 하여 이해하게 되었습니다.
내부 비즈니스 용도로 사용한다면 여러가지 경우가 생길 수 있기 때문에 Modular RAG 를 구축하는 것이 유리할 것으로 생각됩니다.
마침 여러 형태의 자료를 가지고 있는 가이드라인에 대하여 검토해 볼 예정이었는데 이것을 통해서 하면 편리하겠다는 생각이네요.
Postgresql 를 설치하면서 Local 상의 n8n 과 연결하기 위하여 docker network 설정하는 법을 배웠네요.
추가
LightRAG (GraphRAG)
Native RAG처럼 문서를 벡터화(VectorRAG)할 뿐만 아니라 문서에서 주제, 아이디어, 개념 등을 연결하는 지식 그래프도 구축하여 성능을 개선한 RAG
https://www.youtube.com/watch?v=Fx3J8k--U3E
나의 질문 . n8n 으로 LightRAG를 구현할 수 있을까?
n8n으로 LightRAG를 보조 도구로 통합하는 것은 가능하지만, 핵심 처리 로직은 별도의 Python 기반 LightRAG 서버에서 수행해야 한다.
https://github.com/HKUDS/LightRAG
Claude 를 통해 LightRAG 를 이용하여 ChatBot를 구현해 봄
나의 질문. LightRAG 의 핵심이 Vector 와 Graph 라면 Vector DB 와 Graph DB 를 이용해서 n8n 으로 구축할 수 있지 않을까?
유사한 시스템 구축이 가능하다!!
n8n 구현 예시 (ChatGPT)
단계
노드 유형
설명
문서 수집
Google Docs, Notion 등
문서 데이터를 수집합니다.
전처리
Function
텍스트로 변환하고 전처리합니다.
임베딩 생성
HTTP Request
OpenAI Embedding API를 호출합니다.
VectorDB 저장
HTTP Request
Pinecone 등 VectorDB에 임베딩을 저장합니다.
엔터티 추출
HTTP Request
OpenAI GPT API를 호출하여 엔터티를 추출합니다.
GraphDB 저장
HTTP Request
Neo4j 등 GraphDB에 엔터티 및 관계를 저장합니다.
사용자 질의 수신
Webhook
사용자의 질문을 수신합니다.
질의 임베딩 생성
HTTP Request
질문의 임베딩을 생성합니다.
VectorDB 검색
HTTP Request
유사한 문서 조각을 검색합니다.
GraphDB 검색
HTTP Request
관련 엔터티 및 관계를 조회합니다.
프롬프트 구성
Function
검색된 정보를 기반으로 프롬프트를 구성합니다.
응답 생성
HTTP Request
LLM을 호출하여 응답을 생성합니다.
응답 제공
HTTP Response
사용자에게 응답을 제공합니다.
응답 저장
Notion, Slack 등
응답을 저장하거나 공유합니다.