Jump to content

(​2부) RAG 구현 단계 알아보기


Recommended Posts

이번 포스팅은 'RAG(Retrieval-Augmented Generation)'을 주제로 한 3부작 시리즈의 두 번째 글입니다.

1부에서 RAG(Retrieval-Augmented Generation)의 개념과 핵심 구성 요소에 대해 살펴보았다면, 이번 2부에서는 RAG를 실제로 구현하는 과정을 단계별로 상세히 파헤쳐 보겠습니다.

또한, 각 단계에서 CLOVA Studio의 다양한 기능들이 어떻게 활용될 수 있는지 면밀히 분석해 보는 시간을 갖도록 하겠습니다.

 
RAG 3부작 시리즈
✔︎ (1부) RAG란 무엇인가 링크
✔︎ (2부) RAG 구현 단계 알아보기
✔︎ (3부) CLOVA Studio를 이용해 RAG 구현하기 Cookbook 링크
 
 
notice_4_contents.png.e2c5bc2ef5c13d1eb18bd7d1288c7b33.png
 

1부에서 소개한 RAG 구조를 자세히 들여다보면, CLOVA Studio는 RAG의 핵심 기능 3가지를 효과적으로 지원하고 있습니다.

첫째, 방대한 텍스트를 적절한 크기로 분할하는 데 사용되는 문단 나누기 API.

둘째, 분할된 데이터와 사용자의 질문을 벡터로 변환할 때 사용되는 임베딩 API.

셋째, 사용자에게 최종 답변을 제공할 때 활용되는 하이퍼클로바X의 Chat Completion API.

이제 RAG의 작동 과정을 살펴보면서, CLOVA Studio의 API들이 어떻게 유기적으로 연계되어 활용될 수 있는지 알아보겠습니다.

 

1. Raw Data → Connecting

데이터 소스를 가져오는 과정은 RAG 구조를 적용하기 위한 첫 단계입니다. HTML이나 PDF 등 원본 데이터의 형식을 컴퓨터가 처리 가능한 형태로 변환해야 합니다. 이렇게 로딩된 데이터는 문단 나누기 API와 임베딩 API 등을 거쳐 최종적으로 HyperCLOVA X에 전달되어 활용됩니다. 이번 Cookbook에서는 네이버 클라우드 플랫폼의 CLOVA Studio 사용 가이드에 포함된 '개요', '사용 준비', '개념', '시나리오' 4개 페이지의 HTML 형식 데이터를 Raw Data로 사용하였습니다.

그리고 데이터를 효과적으로 연결하고 처리하기 위해 Langchain 라이브러리의 몇 가지 모듈을 활용하였습니다. 이를 통해 원활한 데이터 처리 및 RAG 구조 적용이 가능해졌습니다.

 

2. Connecting → Embedding

현존하는 모델들은 대용량 데이터를 한 번에 처리하기 어렵기 때문에, 데이터를 모델이 처리 가능한 작은 단위로 나누는 과정이 필요합니다. 이를 일반적으로 Chunking이라고 하며, CLOVA Studio 익스플로러의 문단 나누기 API가 이 기능을 지원합니다.

RAG에 활용할 데이터 가져오기에 성공했다면, 문단 나누기 API를 통해 데이터를 적절한 크기로 분할할 수 있습니다. 이 API는 모델이 문장 간 유사도를 파악하여 나누거나, 사용자가 직접 원하는 크기를 설정해서 글을 나눌 수도 있습니다. 문단 나누기 API를 활용하면, 긴 텍스트 데이터를 작은 단위로 효과적으로 분할할 수 있습니다. 이렇게 분할된 데이터는 RAG 구조에서 효율적으로 활용될 수 있습니다.

 

3. Embedding

임베딩은 자연어를 벡터로 변환하는 과정입니다. RAG(Retrieval-Augmented Generation)에서는 작은 덩어리로 나누어진 데이터와 사용자의 질문을 모두 임베딩해야 하는데, CLOVA Studio의 임베딩 API를 통해 입력한 텍스트를 1024차원의 벡터로 변환할 수 있습니다.

데이터와 질문을 효과적으로 관리하고 검색을 구현하기 위해서는 임베딩이 필수적입니다. CLOVA Studio의 임베딩 API는 RAG 구현에 있어 중요한 역할을 할 것입니다.

 

4. Vector DB

벡터 DB는 임베딩으로 변환된 벡터를 저장하는 데이터베이스로, 고차원 벡터 데이터를 효율적으로 관리하고 검색하는 데 특화되어 있습니다.

현재 다양한 기업에서 벡터 DB를 지원하고 있어, 사용자는 목적에 맞는 벡터 DB를 선택할 수 있습니다. 벡터 DB에 임베딩된 데이터와 질문을 저장하면 대규모 데이터 세트에서도 유사도 검색을 통해 정확한 결과를 얻을 수 있습니다.

 

5. Retrieval

이 단계에서는 벡터 데이터베이스(DB)에 저장된 데이터와 사용자의 질문을 매칭하여, 질문에 가장 적합한 데이터를 검색합니다. 검색 로직은 직접 구현하거나, 벡터 DB에서 제공하는 기능을 활용할 수 있습니다. 이렇게 선정된 후보 데이터들은 HyperCLOVA X에 전달되어 최종 답변 생성에 활용됩니다.

 

6. 하이퍼클로바 X의 답변

HyperCLOVA X는 Retrieval 단계에서 선정된 후보 데이터를 참고하여 사용자에게 제공할 최종 답변을 생성합니다. 이 과정에서 CLOVA Studio의 Chat Completion API가 활용되는데, 이는 RAG 구현에 있어 핵심적인 역할을 합니다. 

앞선 과정들을 아무리 잘 구현하더라도 우수한 LLM이 없다면 RAG를 완성할 수 없습니다. CLOVA Studio의 장점 중 하나는 시스템 프롬프트 팔로잉 능력이 뛰어나고 한글 성능이 우수한 HyperCLOVA X 모델을 API로 연결하여 활용할 수 있다는 점입니다. 

CLOVA Studio의 플레이그라운드에서와 마찬가지로 파라미터를 자유롭게 설정하고 시스템 프롬프트를 원하는 대로 작성함으로써 답변의 품질을 더욱 높일 수 있습니다. 이는 RAG 구현 과정에서 개발자에게 큰 유연성과 편의성을 제공합니다.

 

이번 예제에서 활용한 시스템 프롬프트는 다음과 같습니다.

- 너의 역할은 사용자의 질문에 reference 바탕으로 답변하는거야.
- 너가 가지고있는 지식은 모두 배제하고, 주어진 reference 내용만을 바탕으로 답변해야해.
- 만약 사용자의 질문이 reference 관련이 없다면, {제가 가지고 있는 정보로는 답변할  없습니다.}라고만 반드시 말해야해.

여기서 'reference'는 Retrieval 단계에서 추출한 몇 개의 후보 데이터들을 모아놓은 리스트를 의미합니다.

 

이제 CLOVA Studio와 함께 활용한 RAG의 작동 방식을 보여드리겠습니다.

1132190297__.png.9c457c8f1c350f377105e77481bb8fe7.png

▲ CLOVA Studio 사용 가이드 페이지에 수록된 내용을 활용해서 똑똑하게 답변하는 것을 알 수 있습니다.

 

▼ 반면, 사용 가이드 페이지에 있지 않은 질문들을 했을 때 어떻게 답변하는지 살펴볼까요?

888686979__.png.3fad87b8b3aa28b7c58e0c96f4ab8269.png

 

CLOVA Studio의 사용 가이드에서 다루지 않은 CLOVA X의 기능에 대해서는 답변할 수 없다고 답변하고 있습니다.

심지어 RAG 구조를 사용하지 않았다면 완벽하게 대답했을 법한 '부산 1박 2일 여행 계획'에 대해서도 응답을 자제하는 태도는 시스템 프롬프트를 충실히 따르는 HyperCLOVA X의 특징을 엿볼 수 있게 해줍니다.

 

CLOVA Studio가 제공하는 다양한 API와 무한한 잠재력을 지닌 HyperCLOVA X를 활용해 RAG를 구현해 보는 것은 매우 흥미로운 도전이 될 것입니다.

3부에서는 CLOVA Studio를 활용한 RAG의 각 단계를 코드와 함께 알아보며, 더욱 구체적으로 살펴보는 시간을 갖겠습니다!

 

RAG 3부작 시리즈
✔︎ (1부) RAG란 무엇인가 링크
✔︎ (2부) RAG 구현 단계 알아보기
✔︎ (3부) CLOVA Studio를 이용해 RAG 구현하기 Cookbook 링크
 
 
image.png.cce0af6d1c35fd880f3e543c1150aa73.png
 
  • Thanks 1
링크 복사
다른 사이트에 공유하기

게시글 및 댓글을 작성하려면 로그인 해주세요.



로그인
×
×
  • Create New...