Search

How to choose your RAG - 1

대분류
인공지능/데이터
프레임워크
소분류
LangChain/RAG
유형
RAG
부유형
Rag Pipelines
주요 레퍼런스
https://www.linkedin.com/posts/bhavishya-pandit_25-types-of-rag-ugcPost-7261595005167796224-FjXW?utm_source=share&utm_medium=member_desktop
https://dev.to/rogiia/build-an-advanced-rag-app-query-rewriting-h3p
https://arxiv.org/pdf/2401.15884
https://arxiv.org/pdf/2305.14002
https://arxiv.org/pdf/2407.08223
https://arxiv.org/pdf/2402.03367
https://arxiv.org/pdf/2408.14484
https://arxiv.org/pdf/2408.00798
https://weaviate.io/blog/what-is-agentic-rag
최종 편집 일시
2024/11/18 07:15
생성 일시
2024/11/12 00:14
13 more properties

들어가며

해당 RAG를 사용하기 위해서 각 파이프라인이 어떤 목표를 가지고 사용되는 지 명확히 이해하자.
그런 다음 실제로 프로젝트에서 핵심 동작과정을 참고하여 다양한 방면으로 각 서비스에 맞춰 활용/개량시키는 용도로 봐주면 제대로 본거다!
본 포스트는 Bhavishya PanditBhavishya Pandit의 허락을 맡고 작성된 글입니다.

참고하기

하단 포스트는 제일 기본적으로 사용되는 RAG에 대한 컨퍼런스 노트로 작성된 글이다.
들어가기에 앞서서 RAG에 대한 지식이 적다면 간단하게 훑고 본 시리즈를 보는 것을 추천한다.
1~5번까지의 내용은 위 포스트의 내용과 거의 동일하여 간략하게 설명한 것이니 읽다가 궁금한게 생긴다면 위 포스트를 읽고 넘어가자.
5번 이후 내용에는 깊은 이해가 필요한 부분이 어느정도 있어서 직접 해당 논문 리뷰를 진행한 것과 관련 레퍼런스를 참고한 것을 바탕으로 동작 원리나 수식에 대한 구체적인 설명이 동반된다.

1. 표준(Standard) RAG

Standard RAG란? 

표준 RAG는 검색-증강 생성의 약자
정보 검색과 대규모 언어 모델 사용이라는 두 가지 중요한 기술을 결합한 방법
많은 것을 알고 있을 뿐만 아니라 올바른 정보를 빠르게 찾아 질문에 정확하게 답할 수 있는 똑똑한 비서라고 생각하면 된다.

검색과 언어 모델의 결합 

언어 모델 부분은 인간과 유사한 텍스트를 이해하고 생성할 수 있는 매우 발전된 로봇과 같다.
이 둘을 함께 사용하면 정확할 뿐만 아니라 질문하는 내용과도 관련이 있는 답변을 얻을 수 있다.
검색 부분은 시스템이 도서관에서 책을 검색하는 것과 같이 다양한 출처에서 정보를 조회할 수 있다는 것을 의미

목표

빠른 응답 시간

Standard RAG의 목표 중 하나는 1~2초 만에 답변을 제공하는 것
이는 가상 어시스턴트와 채팅할 때와 같이 실시간으로 사용하는 데 중요하다.
질문을 하고 답변을 받기 위해 오랜 시간을 기다려야 한다면 답답할 수 있다.
빠른 응답은 상호작용을 원활하고 효율적으로 만들어 준다.

답변 품질 향상

표준 RAG는 외부 데이터 소스를 사용하여 답변의 품질을 개선한다.
→ 즉, 이미 알고 있는 정보뿐만 아니라 다양한 곳에서 정보를 가져올 수 있다.
예를 들어 날씨에 대해 문의하면 날씨 웹 사이트를 확인하여 가장 정확한 최신 정보를 제공할 수 있다.
따라서 답변의 신뢰성과 유용성이 향상된다.

주요 동작

문서를 여러 조각으로 나누기 - 청킹(Chunking)

Standard RAG는 정보를 더 쉽게 찾을 수 있도록 큰 문서를 청크라고 하는 작은 조각으로 나눈다.
한 번에 큰 책을 읽으려고 한다고 상상해보면 굉장히 부담스럽다. 그래서 책을 작은 섹션으로 나누면 책에서 특정 장을 찾는 것처럼 특정 정보를 더 쉽게 빠르게 찾을 수 있다.

2. 교정(Corrective) RAG

Corrective RAG란?

RAG 기반의 생성 모델에서 잘못된 검색 결과를 교정하고, 더 정확하고 신뢰할 수 있는 답변을 생성하기 위한 자체 교정 메커니즘을 도입한 모델
목표는 생성된 응답에서 오류를 찾아 수정하는 것이다.
교사가 학생의 숙제를 점검하고 오류를 수정하도록 도와주는 것과 같다고 생각하자.
플러그 앤 플레이 방식으로 다양한 RAG 기반 접근 방식과 원활하게 결합할 수 있다.

목표

높은 정밀도

Corrective RAG는 Standard RAG에서 실수를 수정하고 답변의 질을 높이기 위해 적극적으로 노력함으로써 정밀도를 개선시킨다.
사용자의 피드백을 활용하여 수정 프로세스를 개선시킨다.

웹 검색 확장

정적이고 제한된 코퍼스가 아닌, 웹 검색을 통해 추가적인 정보를 보충하여 지식의 다양성과 범위를 확장한다.
Corrective RAG는 검색된 문서에서 핵심 정보에 선택적으로 집중하고 관련 없는 정보를 걸러낼 수 있도록 분해 후 재구성 알고리즘이 설계되어 있다.

주요 동작

Re-write Query + Web Search

사용자 쿼리에 LLM을 한번 더 적용하여, 사용자가 알고자 하는 핵심 정보로 재작성하는 것
웹 검색은 정적 코퍼스에서 유효한 결과를 얻지 못한 경우 활용된다. 이 단계에서 검색 질의를 간단한 키워드 형태로 변환한 후 검색을 수행한다.
다시 쓰기-검색-읽기 접근 방식을 사용
재작성된 질의는 검색 API를 통해 적합한 정보를 가져온다.

행동 트리거(Action Trigger)

검색 평가 단계에서 계산된 관련성 점수를 기반으로 세 가지 행동을 트리거한다.
Correct
신뢰할 수 있는 검색 결과는 내부적으로 정제(refinement) 과정을 거친다.
검색 문서에서 핵심 정보(knowledge strips)를 분리한 후 재구성하여 LLM에 전달한다.
Incorrect
검색 결과가 부정확하다고 판단될 경우, 기존 검색 결과를 폐기하고, 웹 검색을 수행하여 새로운 지식을 가져온다.
웹 검색은 검색 질의를 재작성(query rewriting)하여 수행하며, 관련 정보를 정제한다.
Ambiguous
검색 결과가 모호한 경우, 내부 정제된 지식과 웹 검색 지식을 결합하여 더 강건한 답변을 생성한다.

Multiple Passes

시스템이 답을 여러 번 검토하는 것
이야기를 더 잘 이해하기 위해 이야기를 여러 번 읽는 것이라고 생각하면 된다.
검사할 때마다 실수를 찾아내고 답을 더 명확하고 정확하게 할 수 있는 방법을 찾아낸다.

3. 추론(Speculative) RAG

Speculative RAG란?

인공 지능에서 기계가 정보를 생성하고 검증하는 방식을 개선하기 위해 사용하는 방법
검색과 대규모 언어 모델을 결합하여 정확하고 문맥을 인식하는 응답을 제공한다.
해당 접근 방식은 두 가지 유형의 모델, 즉 소규모 전문가 모델과 대규모 일반 모델을 결합한다.

목표

뛰어난 정확도

표준 RAG 시스템은 일반적으로 드래프팅과 검증 모두에 단일 모델을 사용하므로 실수가 발생하거나 응답의 정확도가 떨어질 수 있다.
Speculative RAG는 전문가 모델과 일반 모델 간에 작업을 구분하여 제공하는 정보의 정확도를 높힌다.

효율적인 처리

특수 모델을 사용하면 복잡한 작업을 줄일 수 있다.
→ 즉, 소규모 Specialist RAG Drafter는 빠른 초안 작성을 처리하는 반면 대규모 Generalist LLM은 더 복잡한 검증을 처리한다.
시스템은 작업을 분담함으로써 계산 부하를 줄여주는데, 이는 마치 무거운 배낭을 친구들과 나누어 들고 다니기 편하도록 하는 것과 같다.

주요 동작

문서 검색 및 클러스터링 (Document Retrieval and Clustering)

사용자의 질문 QQ가 주어지면, 검색 시스템이 관련 문서 집합 D={d1,d2,...,dn}D = \{d_1, d_2, ..., d_n\}을 데이터베이스에서 검색한다.
검색된 문서들은 의미적 유사성(semantic similarity)을 기준으로 kk개의 클러스터 C={c1,c2,...,ck}C = \{c_1, c_2, ..., c_k\}로 그룹화된다.
각 클러스터는 하나의 특정 주제를 반영하며, 이후 문서 서브셋 δ\delta 구성을 위한 기본 단위로 사용된다.
각 클러스터에서 대표 문서를 무작위로 샘플링하여 mm개의 문서 서브셋 Δ={δ1,δ2,...,δm}\Delta = \{\delta_1, \delta_2, ..., \delta_m\}를 생성
δj={random.sample(ci)ciC}\delta_j = \{ \text{random.sample}(c_i) \mid c_i \in C \}

병렬 초안 생성(Parallel Draft Generation)

MDrafter는 각각의 문서 서브셋 δj\delta_j와 질문 QQ를 기반으로 초안 αj\alpha_j와 근거 βj\beta_j를 생성한다.
P(αj,βjQ,δj)=P(βjQ,δj)P(αjQ,δj,βj)P(\alpha_j, \beta_j \mid Q, \delta_j) = P(\beta_j \mid Q, \delta_j) \cdot P(\alpha_j \mid Q, \delta_j, \beta_j)
각 초안은 질문에 대한 잠정적인 응답이며, 근거는 이 초안이 문서 서브셋에 기반한 신뢰할 수 있는 정보임을 설명한다.
이 때, 각 문서 서브셋에 대해 초안 생성을 병렬로 수행하므로, 생성 속도가 크게 향상된다.
서로 다른 문서 서브셋을 사용함으로써 동일 질문에 대해 다양한 관점을 반영한 초안을 생성할 수 있다.

초안 평가 및 선택 (Draft Evaluation and Selection)

Generalist LLM은 MDrafter가 생성한 초안 αj\alpha_j와 근거 βj\beta_j를 평가하고, 각 초안의 신뢰도를 점수화한다.
초안 및 근거의 신뢰도는 다음과 같이 계산된다.
ρj=P(βjQ,δj)+P(αjQ,δj,βj)\rho_j = P(\beta_j \mid Q, \delta_j) + P(\alpha_j \mid Q, \delta_j, \beta_j)
P(βjQ,δj)P(\beta_j \mid Q, \delta_j): 근거가 질문과 문서 서브셋에 대해 얼마나 일관적인지를 나타냄.
P(αjQ,δj,βj)P(\alpha_j \mid Q, \delta_j, \beta_j): 초안 자체의 신뢰도를 평가.
최종적으로 가장 신뢰할 수 있는 초안을 선택하여 사용자에게 응답으로 제공한다.
가장 높은 점수를 가진 초안이 최종 응답으로 선택된다.
α^=argmaxαjρj\hat{\alpha} = \text{argmax}_{\alpha_j} \rho_j
Generalist LLM은 MDrafter의 결과를 검증하며, 부정확하거나 불필요한 초안을 걸러내고 신뢰할 수 있는 최적의 답변만 선택한다.

4. Fusion RAG with Re-ranking

Fusion RAG란?

다중 검색 엔진의 결합과 재배열을 통해 검색 정확성과 응답 품질을 높이기 위해 설계된 RAG의 확장된 버전
기존 RAG와 달리 Fusion RAG는 Reciprocal Rank Fusion(RRF) 알고리즘을 활용하여 검색된 문서를 결합하고, 이를 바탕으로 최적의 순위를 재배치한다.
이는 문서의 개별 순위 평가, 순위 결합, 최종 응답 생성의 단계를 통해 수행된다.

다중 검색 방법(Retriever) 통합

두 가지 이상의 기술을 사용하여 정보를 찾는다.
예를 들어 키워드 검색, 시맨틱 검색 (단어의 의미를 이해함), 심지어 가장 관련성이 높은 정보를 예측할 수 있는 기계 학습 모델도 사용할 수 있다.

다중 데이터 소스 접근

여러 가지 유형의 데이터 또는 정보를 함께 활용하여 인공 지능 시스템을 구축하는 접근 방식 (Multi-modal)을 사용
데이터베이스, 웹 사이트, 문서, 심지어 사용자 제작 콘텐츠도 포함될 수 있다.
이미지, 동영상, 텍스트 등등의 다양한 유형의 데이터를 사용한다.

목표

응답 품질 향상

다양한 방법과 출처를 사용하는 목적은 답변의 질을 높이는 것
양질의 답변: 정확하고 관련성이 높으며 상세한 답변
예를 들어, 사용자가 기후 변화에 대해 질문하면 기후 변화가 무엇인지 설명할 뿐만 아니라 통계, 영향 및 가능한 해결책도 제공하는 좋은 답변이 될 수 있다.

종합 답변

다양한 데이터 입력을 활용하여 질문의 여러 측면을 포괄하는 답변을 제공할 수 있다.
시스템에서 단순히 짧은 답변을 제공하는 대신 주제를 심층적으로 설명할 수 있다.
검색 엔진 간 중복을 최소화하고, 여러 관점에서 정보를 수집함으로써 응답의 포괄성과 유용성을 증대한다.

시스템 복원력 향상

Resilience: 한 부품에 장애가 발생하더라도 시스템이 계속 정상적으로 작동할 수 있는 능력
하나의 정보 소스에만 의존하지 않기 때문에 한 소스를 사용할 수 없거나 잘못된 정보가 있는 경우에도 여전히 좋은 답을 제공할 수 있다.
한 가지 계획이 효과가 없을 경우 다른 계획으로 대체할 수 있다.

동적 검색 전략 (적응성)

시스템에서 질문의 컨텍스트를 기반으로 정보를 검색하는 방법을 변경할 수 있다.
사용자가 매우 구체적인 질문을 하는 경우 시스템은 보다 집중적인 검색 방법을 사용할 수 있다.
질문이 광범위하면 광범위한 검색 방식을 사용할 수 있다.

주요 동작

다중 검색기(Multiple Retrievers)

Fusion RAG는 하나의 검색 엔진이 아닌 다중 검색 엔진을 사용한다.
Diagram illustrating the high level process of RAG-Fusion starting with the original query ”IM72D128 IP Rating”
사용자 입력 질의 QQ를 다중 검색 엔진에 전달한다.
각 검색 엔진에서 독립적으로 관련 문서 집합 D1,D2,...,DnD_1, D_2, ..., D_n을 검색한다.
여러 검색기를 동시에 사용해 사용자 쿼리에 맞는 정보를 각각의 데이터 소스에서 수집
사용자 쿼리가 들어오면 시스템은 여러 검색 엔진(혹은 검색 알고리즘)을 통해 관련 문서를 검색한다.
이는 서로 다른 검색 알고리즘 또는 인덱스 구조를 가진 검색 엔진에서 질의에 대해 독립적으로 문서를 검색함으로써, 더 많은 정보를 포착하고 검색 다양성을 확보한다.

개별 순위 평가(Individual Rankings)

각 검색 엔진에서 반환된 문서들은 개별적으로 순위화된다.
여기서 순위는 검색된 문서가 질의에 얼마나 관련성이 높은지를 나타내며, 각 문서에 고유한 점수가 부여된다.
개별 검색 엔진RiR_i에서 문서 dd에 대한 점수는 다음과 같다.
Si(d)=1ranki(d)+kS_{i}(d) = \frac{1}{\text{rank}_{i}(d) + k}
ranki(d)\text{rank}_i(d): 검색 엔진 R_i에서 문서 d의 순위.
kk: 정규화 상수, 낮은 순위에 대한 가중치를 조정.
다중 검색기를 통해 수집된 정보들은 각각의 검색기 기준에 따라 순위가 매겨진다.
한 검색기는 텍스트 유사도를 기준으로 순위를 매기고, 다른 검색기는 키워드 매칭 빈도를 기준으로 순위를 매기는 방식이다.
검색기마다 우선 순위 기준이 다르므로 같은 결과라도 다른 검색기에서는 다른 순위를 가질 수 있다.

상호 순위 융합 (Reciprocal Rank Fusion, RRF)

각 검색기의 순위를 반영, 개별 검색기의 순위 점수를 역순으로 합산하여 최종 점수를 산출하는 방식
다중 검색 엔진에서 개별적으로 평가된 순위를 RRF 알고리즘을 통해 결합하여 최종 문서 순위를 생성한다.
RRF 알고리즘
RRF(d)=i=1n1ranki(d)+k\text{RRF}(d) = \sum_{i=1}^{n} \frac{1}{\text{rank}_{i}(d) + k}
RRF(d)\text{RRF}(d): 문서 dd의 최종 점수.
nn: 참여한 검색 엔진의 개수.
특정 결과가 여러 검색기에서 상위에 위치하면 해당 결과의 최종 점수는 높아지고, 반대로 특정 검색기에서만 높은 순위를 가지는 결과는 최종 점수에 덜 반영된다.

5. Agentic RAG

Agentic RAG란?

정보를 빠르고 효과적으로 찾고 사용하는 방법을 개선하기 위해 설계된 시스템
필요한 답변을 실시간으로 얻을 수 있도록 도와주는 스마트 어시스턴트라고 생각하자.

실시간 전략 조정을 위한 적응형 에이전트

이들은 마치 현재 상황에 따라 접근 방식을 바꿀 수 있는 작은 조력자와 같다.
질문을 했는데 상담원이 더 나은 답변을 제공하기 위해 다른 정보를 찾아야 한다는 것을 알게 되면 즉시 전략을 조정할 수 있다.
→ 즉, 요구 사항에 더 효과적이고 신속하게 대응할 수 있다는 것이다.

간편한 통합을 위한 모듈식 설계

기존 RAG는 순차적인 구조를 가진다.
순진한 RAG 파이프라인은 외부 지식 소스를 하나만 고려한다.
그러나 일부 솔루션은 두 개의 외부 지식 소스를 필요로 할 수 있으며, 일부 솔루션은 웹 검색과 같은 외부 도구 및 API를 필요로 할 수 있다.
이들은 원샷 솔루션으로, 컨텍스트가 한 번만 검색된다는 것을 의미한다. 검색된 컨텍스트의 품질에 대한 추론이나 검증은 없다.
하지만 Agentic RAG의 설계는 기본적으로 모듈식이다.
즉, 함께 작동할 수 있는 별도의 부품으로 제작된다.

목표

사용자 의도 해석

질문을 할 때 실제로 원하는 것이 무엇인지 이해할 수 있다는 것
'최고의 피자'를 입력하면 시스템은 사용자가 근처에 있는 최고의 피자 가게를 찾고 있는지, 최고의 피자 레시피를 찾고 있는지 등을 알아야 한다.
시스템에서 사용자의 의도를 정확히 이해하면 관련성이 높고 신뢰할 수 있는 응답을 제공할 수 있다.

병렬 처리 향상

Agentic RAG는 동시에 여러 에이전트를 실행할 수 있다.
이는 여러 어시스턴트가 서로 다른 작업을 동시에 처리하는 것과 같다.
한 상담원이 최고의 피자 가게를 찾고 있는 동안 다른 상담원은 피자 레시피를 찾을 수 있다.
이러한 동시 작업 기능은 특히 많은 정보가 필요한 복잡한 질문을 처리할 때 시스템 성능을 향상시키는 데 도움이 된다.

주요 동작

에이전트 (Agent)

에이전트는 사용자 쿼리를 받고, 이를 기반으로 어떤 정보가 필요한지와 어떤 방식으로 처리할지를 결정한다.
이를 위해 Task Planner(작업 계획자)에게 작업을 전달하며, 적절한 검색 및 생성 전략을 세운다.

작업 계획자 (Task Planner)

Task Planner는 사용자 쿼리에 맞는 정보 생성 또는 검색 작업을 계획한다.
여기서 작업은 두 가지로 나뉜다.
Generation Task: 새로운 응답을 생성해야 하는 경우.
생성기는 Task Planner에서 전달된 정보를 바탕으로 최종 응답의 일부 또는 전체 내용을 생성한다.
주로 텍스트 생성 모델을 사용하여 응답을 생성하며, Context(문맥)을 참고하여 사용자 쿼리에 맞는 정보를 만든다.
Retrieval Task: 기존 지식 기반에서 정보를 검색해야 하는 경우.
검색기는 사용자가 요청한 정보와 일치하는 데이터를 Knowledge Base(지식 기반)에서 검색한다.
이 정보는 사용자가 요청한 답변의 근거로 사용되며, 필요한 경우 Context에 전달되어 응답 생성에 활용된다.
Task Planner는 복잡한 작업을 더 세분화하여 효율적으로 처리할 수 있도록 돕는다.

단일/다중 에이전트 RAG

단일 에이전트 RAG(라우터)

라우터는 가장 단순한 형태의 에이전트 RAG이다.
→ 최소 두 개의 외부 지식 소스가 있으며 에이전트가 어느 소스에서 추가 컨텍스트를 검색할지 결정한다.
그러나 외부 지식 소스는 (벡터) 데이터베이스로 제한될 필요는 없다.
도구에서 추가 정보를 검색할 수도 있다.
웹 검색을 수행하거나 API를 사용하여 Slack 채널이나 이메일 계정에서 추가 정보를 검색할 수 있다.

다중 에이전트 RAG 시스템

위에서 본 단일 에이전트 시스템은 추론, 검색 및 답변 생성을 하나로 하는 단 하나의 에이전트로 제한되기 때문에 한계가 있다.
따라서 여러 에이전트를 다중 에이전트 RAG 애플리케이션으로 연결하는 것이 더 낫다.
여러 전문 검색 에이전트 간에 정보 검색을 조정하는 마스터 에이전트가 있고, 한 에이전트는 독점적인 내부 데이터 소스에서 정보를 검색할 수 있다. 그리고 다른 에이전트는 이메일이나 채팅과 같은 개인 계정에서 정보를 검색하는 데 특화될 수 있다. 또 다른 에이전트는 웹 검색에서 공개 정보를 검색하는 데 특화될 수도 있다.
이렇듯 적절하게 에이전트 모듈을 배치하여 각 용도에 맞춰서 적절히 변화시킬 수 있는 장점을 가지고 있다!