Search

에이전트 기반 RAG전략

대분류
기타
소분류
컨퍼런스 기록
설명
올거나이즈 - 이창수님 세션
유형
SK AI SUMMIT
주요 레퍼런스
https://g3lu.tistory.com/42
https://devocean.sk.com/blog/techBoardDetail.do?ID=165968&boardType=techBlog
https://www.skelterlabs.com/blog/rag-vs-finetuning
https://velog.io/@euisuk-chung/%EC%83%9D%EC%84%B1-AI%EC%9D%98-%ED%95%99%EC%8A%B5-%EB%B0%A9%EC%8B%9D-%EC%A0%9C%EB%A1%9C%EC%83%B7%EC%9B%90%EC%83%B7%ED%93%A8%EC%83%B7-%EB%9F%AC%EB%8B%9D
최종 편집 일시
2024/11/09 14:56
생성 일시
2024/11/06 06:19
13 more properties

RAG

LLM의 할루시네이션을 최소화하는 가장 좋은 방법
Retrieveal Augmented Generation
LLM의 외부지식을 잘 알맞게 맞춰서 LLM에게 Feeding하는 기술

RAG를 사용하는 이유

LLM은 결국 AI 학습 모델이기 때문에 학습되지 않은 거 모른다. 그래서 LLM이 모든 것을 알 수는 없다.
이 때 LLM이 모르는 것을 LM에게 동적으로 잘 전달해 주는 기술이 바로 RAG이다.
사용자가 말한 의도를 잘 파악해서 그때 필요한 LLM이 모르는 자료들을 그게 문서가 되었건 외부의 웹이 되었건 데이터베이스가 되었건 어떤 다른 서버의 API를 통해서 가지고 오는 게 되었건 LM의 외부의 지식을 가장 잘 다이내믹하게 구성해서 유저 의도에 맞춰서 LLM에게 Feeding하는 기술로 만들어 진게 RAG이다.
예제 : LLM이 2024년 1월까지 학습된 경우 2024년 10월에 개정된 법령을 요약해서 알려줘.에 대한 답변을 할 수 없다. 이 때 RAG로 개정된 법령에 대해서 학습을 시켜줘야만 LLM이 이를 알 수 있다.

Naive RAG (단순 튜토리얼)

RAG의 컨셉을 그냥 그대로 구현한 것
현재(2024.11 기준) 기업들이 가장 많이 사용하고 있는 RAG.
생각보다 성능이 잘 안나온다며 해당 RAG에 대해 문의하는 경우가 많다.

동작 과정

Indexing - 청킹

1.
RAW Data 추출
2.
다양한 파일 형식을 표준화된 Plain Text로 변환
3.
청킹(Chunking)
LLM은 한 번에 처리할 수 있는 텍스트의 최대 길이에 제한이 있기 때문에 청크로 나누게 된다.
올거나이즈사에서 가장 좋다고 느껴진 청킹 사이즈는 페이지 단위이다.
4.
Vector Store
청킹을 하였다면 다음 잘라진 청크는 다시 Vector로 바꾼다.
Vector화 된 청크는 Vector DB에 키-값 쌍으로 저장된다.
이 과정에서 생긴 Vector DB는 이후 Retreival 단계에서 Efficient하고 Scalable search capabilities(효율적이고 확장 가능) 기능을 제공한다.

Retrieval

이후 사용자 쿼리는 외부 지식 소스인 Vector DB로부터 관련 문맥을 검색하는데 활용이 된다.
유저가 질문을 한다면 사용자 쿼리는 인코딩 모델에 의해 처리되어 의미적으로 관련된 임베딩을 생성하게 된다.
그다음 벡터화된 쿼리는 Vector DB에서 유사성 검색을 수행하여 가장 비슷한 데이터를 찾게 된다.

Generation (prompt → LLM → Output)

사용자의 쿼리와 검색된 추가 정보는 프롬프트에 입력되고 LLM을 거쳐 답변을 생성하게 된다.

문제점

Indexing

정보 추출의 불안정성
PDF와 같은 비정형 파일 내 이미지와 표에 있는 유용한 정보를 효과적으로 처리하지 못한다.
청킹 방법
청킹 과정에서 파일 유형의 특성을 고려하지 않고 "one-size-fits-all" 을 사용하는 것이 다반사
이는 각 청크에 일관성과 불필요한 의미 정보가 포함될 가능성이 크며, 기존 텍스트의 문단 구분과 중요한 세부 사항을 놓치게 된다.
비최적화 인덱싱 구조
인덱싱 구조가 최적화되지 않아 비효율적인 검색 기능을 초래하게 되며, 이는 검색 속도를 현저하게 느리게 만들고 검색 결과의 정확성을 떨어지게 만든다.
임베딩 모델의 의미 표현 능력
임베딩 모델이 텍스트의 의미를 제대로 파악하지 못해, 검색된 정보의 관련성이 낮아진다.
이는 중요한 정보를 놓칠 수 있게 된다.

Retrieval

제한된 검색 알고리즘
키워드, 의미, 벡터 검색을 결합하지 않은 등 다양한 검색이나 알고리즘의 통합이 제한적이며, 이는 검색 결과의 다양성과 정확성을 저하시킨다.
쿼리 및 임베딩 모델의 한계
쿼리가 부족하거나 임베딩 모델의 의미 표현 성능이 낮아 유용한 정보를 검색하지 못한다.
답변 정보 중복

Generation

잘못된 응답 생성
잘못된 정보 제공

Advanced RAG

대체로 할루시네이션은 Retriever 문제이다.
Retriever에서 틀린 정보를 준다면 LLM의 고조증조할아버지가 와도 잘못된 정보를 반환함
근본적으로 Retriever가 잘못된 정보를 넘겨주면LLM이 답을 맞출 수 없다.
할루시네이션을 최소화하려면 프롬프트 엔지니어링이 적절히 나와야 함

동작 과정

Pre-Retrieval (Optimization)

사용 이유
회사마다 문서의 스타일이 되게 다르고 문서의 제목을 붙이는 스타일조차 회사가 되게 다르다.
어디는 되게 특이한 DRM 시스템을 써서 뭔가 내가 저장을 하면 그 뒤에 고유한 아이디 같은 게 붙고 의미를 알 수 없는 숫자가 이렇게 막 들어가 있으면 이 벡터들을 잘 못 찾는다.
그래서 해당 회사(프로젝트)의 문서 스타일에 맞게 Optimize하는 것이 중요하다.
색인 구조와 사용자 쿼리를 개선하는 목적의 용도
특히 RAG에 들어가는 프롬프트 들은 할루시네이션을 최소화해야 되기 때문에 “컨텍스트에 주어진 대로 컨텍스트에 기반해서만 답해”, “너의 지식에 기반해서 답하면 안 돼”라고 명시하는 것이 중요하다.
예를 들어 B2B 프로덕트에서 혹시라도 틀린 정보를 그럴 듯하게 직원에게 알려줘서 직원이 그 틀린 정보를 가지고 고객에게 안내해서 가입할 경우 소송이 되고 이런 문제는 의료나 법률 같은 경우로 가면 훨씬 더 크리티컬한 문제가 된다.
종류
데이터 인덱싱 최적화(Optimizing Data Indexing)
임베딩(Embedding)
HyDE(Hypothetical Document Embedding)
사용자 query를 Vector DB와 같은 지식 검색소 검색 전, LLM에 주입하여 가상의 답변을 얻고,query 대신 가상 답변으로 검색하여 Context를 얻는 기술
가상 답변은 query 대비, 풍부한 정보를 담고 있어 지식 검색 시, 더 많은 정보를 담은 context를 얻을 수 있다.
Multi-query
LLM을 사용하여 주어진 사용자 입력 쿼리에 대해 다양한 관점에서 여러 쿼리로 생성하여 검색함으로써 기존 단일 검색의 한계를 극복하고 더 풍부한 결과를 얻을 수 있는 기술
Text-to-SQL
LLM을 사용하여 주어진 입력 쿼리를 SQL로 변환함으로써 Vector DB 외에도 RDBMS를 검색 가능하게 만드는 기술

Post-Retrieval

데이터베이스에서 검색된 중요한 문맥을 질의와 결합하여 LLM에 입력하는 과정
관련된 정보(청크)들을 Vector Database 내에서 검색한 후, 쿼리와 함께 LLM에 입력된다.
하지만 문제는 검색된 청크들이 간혹 중복이 되거나 의미 없는 정보를 담는 경우 발생하게 되는데, 이는 LLM이 주어진 컨텍스트를 처리하는 방식에 영향을 미칠 수 있다.
또한 LLM의 컨텍스트 윈도우(context window) 크기를 초과할 수도 있고 비효율적이다.
그래서 “어떻게 Retriever가 틀린 거를 그 자리에서 고칠 수 있냐”에서 고안된 게 바로 Post-Retrieval이다.
Re-ranking
검색된 정보를 재순위하여 가장 관련성 높은 답변을 우선시하는 것.
이에 검색된 청크를 재정렬하고 Top-K 가장 관련성 높은 청크를 식별하여 LLM에 사용할 컨텍스트로 제공한다.
기존에는 후보를 예를 들면 5개를 뽑아서 그 컨텍스에 5개를 준다고 할 때,
Re-ranking에선 10개 20개를 뽑은 다음에 이제 틀렸던 것들에 대한 거를 뭔가 사용자가 피드백을 줬다거나 하면 거기에 다시 또 Vector 유사도를 비교해서 랭킹을 다시 올리는 방식이다.
처음엔 틀렸더라도 두 번째부터는 이게 바로 반영되게 하는 게 포스트 리트리벌에 들어가는 가장 중요한 테크닉이다.

RAG and LLM Finetuning

모든 도메인에서 RAG가 필요하지는 않음
조건에 맞춰서 사용해야함

RAG, Fine Tuning이 필요한 경우

1.
외부 지식(LLM한테 가르치지 않은 지식)이 필요한 경우
LLM한테 가르치지 않은 지식이 필요하면 무조건 RAG를 해야한다.
2.
Model Adaptation이 필요한 경우
a.
LLM이 이미 알고 있는 뭔가의 지식이 우리랑 다를 때 회사랑 다를 때 LLM이 잘못된 지식을 알고 있을 때 → 모델 Fine Tuning이 필요
b.
LLM이 뱉어내는 어떤 텍스트의 스타일이 우리 회사와 크게 다를 때
ex) 약관 문서가 LLM이 트레이닝에 쓰여지긴 했지만 LLM 트레이닝에 쓰여진 다른 텍스트 대비 엄청나게 적을 때 우리 회사 스타일대로 보험 약관을 만들어내야 될 경우 → 모델 Fine Tuning이 필요

프롬프트 엔지니어링만 필요한 경우

위에 설명한 두 경우가 아닐 경우
특별히 LLM이 가지고 있는 거에서 Adaptation할 필요는 없을 경우
우리 회사의 지식을 LLM이 잘 알기만 하면 될 경우 대체로 RAG로 대부분 해결이 된다.

금융이나 공공기관 같은 경우

문서 스타일이 우리가 보는 스타일과 다른 경우가 많다.
복잡하게 표가 많이 있는 경우도 많이 있고 그다음에 수식이 되게 많이 들어가야 되는 경우도 있고 보험 약관 같이 우리가 일반적으로 모르는 문서들 아니 변리사가 쓴 특허 문서들 이런 걸 다룰 경우
→ RAG랑 LLM Fine Tuning 전부 필요하다.

베스핀 글로벌사의 전략

Generative Answer

단계
문서
활용방안
특징
RAG
1단계
10개 내외
회사의 HR 규정 문서를 업로드하고, 사내 직원의 HR Assistant로 활용
문서의 수가 제한적이고, 모두 최신 버전이다.
Naive RAG
2단계
수백~수천 개
주요 직군(보험업의 Underwriter, 여신 관리 업무 매니저, 콜센터 상담원 등)이 사용하는 상품 매뉴얼, 규제 문서, 관련 법령 등에 기반해서 AI를 Work Assistant로 활용
현업의 사용자가 실제 업무중에 Assistant로 활용한다. 문서는 모두 최종 버전
Advanced RAG / Agent RAG
3단계
수 만개 이상
회사 내에서 생상되는 모든 문서를 연동하여, 넓은 직군의 많은 수의 직원이 Work Assistant로 활용한다.
문서의 수가 수만 - 수백만 개가 되며, Ver 0.1, Ver 0.2, 최종, 최최종 등 최종 버전이 아닌 문서가 많다.
Agent RAG
HR : Human Resources - 인적 자원
문서가 많지 않을 경우 → Naive RAG만 구현해도 웬만큼의 성과를 볼 수 있다. 80~90%의 정확도
문서 폴더가 많고 다양한 폴더 안의 문서들에 비슷한 내용이 엄청 많을 경우 → Advanced RAG 더 가면 Agent RAG까지 고려
회사 안의 거의 모든 게 다 들어가 있는 경우 → Agent RAG

최적화 전략

Single Turn VS Multi Turn

에이전트 RAG가 필요함
여러번의 인터럭션을 걸쳐서 더 정확한 정보를 반환하는 방법

One Way VS Interactive

One Way

생성 모델이 외부 데이터 소스를 한 번 조회(retrieve)한 후, 그 정보를 바탕으로 응답을 생성하는 방식
정보 검색과 응답 생성이 분리된 단순한 구조
주로 사전 처리 단계에서 필요한 정보를 수집
장점
구현이 비교적 간단하고, 처리 속도가 빠르다.
외부 데이터 소스와의 상호작용이 최소화되어 보안 측면에서 유리할 수 있다.
단점
사용자의 추가 질문이나 피드백에 실시간으로 반응하기 어렵다.
데이터가 고정되어 있기 때문에 변화에 유연하지 않다.

Interactive

생성 모델이 사용자와의 상호작용을 통해 지속적으로 외부 데이터 소스를 조회하고, 실시간으로 응답을 생성하는 방식
대화 중에 사용자의 추가 질문이나 피드백에 따라 동적으로 정보를 검색하고 응답을 조정한다.
장점
유연한 응답
정확성과 관련성이 높아진다.
단점
구현이 복잡하며, 실시간으로 데이터 조회와 생성이 필요하여 시스템 자원이 많이 소모될 수 있다.
외부 데이터 소스와의 지속적인 상호작용으로 인해 보안 측면에서 많은 고려가 필요할 수 있다.

Zero-shot & One-shot & Few-shot

Zero-shot learning (ZSL)

모델이 학습 과정에서 본 적 없는 새로운 클래스를 인식할 수 있도록 하는 학습 방법
모델이 클래스 간의 관계나 속성을 통해 일반화하는 능력을 활용한다.
예제
새로운 클래스에 대한 설명 정보를 입력으로 제공해야 한다.
이미지 인식에서는 이미지의 특징을 설명하는 텍스트 정보를 사용하여 이전에 본 적이 없던 이미지더라도 해석이 가능하게 된다.

One-shot learning (OSL)

각 클래스에 대해 단 하나의 예시만 제공될 때 모델이 그 클래스를 인식할 수 있도록 하는 학습 방법
유사도 학습이나 메타 학습 등의 기법을 활용하여 구현된다.
예제
고양이를 인식하는 딥러닝 모델에게 "스핑크스"라는 새로운 종류의 고양이를 인식하도록 요청한다면, 모델은 이전에 본 적이 없는 스핑크스 고양이 사진 하나만으로도 인식을 수행할 수 있어야 한다.
이것은 학습 데이터가 매우 제한적인 경우에 유용

Few-shot learning (FSL)

극소량의 데이터만을 이용하여 새로운 작업이나 클래스를 빠르게 학습하도록 설계된 알고리즘
이 방법은 메타 러닝(meta-learning)이나 학습 전략의 최적화 등을 통해 적은 데이터로도 효과적인 일반화(generalization) 능력을 갖추도록 한다.
예제
연구자들이 아주 드문 종류의 식물 사진 몇 장을 확보했다고 할 때, 전통적인 지도학습 모델은 이 식물을 학습하기에 충분한 데이터가 없다는 문제에 직면한다.
하지만 Few-shot learning을 사용하면, 소수의 이미지만으로도 모델은 새로운 식물 종을 인식하고 분류하는 방법을 학습할 수 있다.
이러한 상황에서는 다양한 사전 훈련된 모델과 조합하여 적은 데이터로도 높은 정확도를 달성할 수 있는 전략이 중요하게 작용한다.

Agent RAG

사용자와 적절히 인터렉션하면서, 질문과 관련 있는 폴더만을 대상으로 Retriever를 실행한다.
Multi Turn이며 Interactive하게 동작한다.

필요한 이유

질문을 한 번에 제대로 하는 사람은 별로 없다.
대부분의 사용자들은 자기가 물어보고 답을 듣고 그걸 수정하는 형태로 진행해서 원하는 답을 얻는 경우가 많다.
처음에 물어볼 때 자기가 물어볼 게 명확하게 형성이 안 된 경우가 대단히 많기 때문
나이브나 어드벤스 라그는 전부 One Way이다. → 한 번에 답이 나오는 형식