RAG 을 활용하여 LLM 만들어보기

HuggingFace 오픈소스 언어모델 활용한 RAG Pipeline 구성

몽자비루 2025. 9. 10. 00:52

저번에는 HggingFace 오픈소스를 만들어봤는데, 이번 포스팅에서는

HuggingFace 오픈소스 언어모델을 활용한 RAG Pipeline 구성을 진행해 볼 예정이다.

 

전체적인 흐름을 요약하자면, 아래와 같다.

  • Word 문서에서 소득세 관련 정보 로드
  • 문서를 작은 청크로 분할
  • 다국어 임베딩 모델로 벡터화
  • 한국어 LLM으로 질문에 답변

먼저 필요한 패키지는 아래와 같다.

pip install -q langchain langchain-huggingface langchain-community langchain-core langchain-text-splitters bitsandbytes docx2txt langchain-chroma

1. 문서 chunking 후 Database 생성.

먼저 소득세 관련 Word 문서를 로드한 뒤 700자 크기, 100자 중첩으로 문서를 분할한다.

 

이후 한국어를 처리할 수 있도록 다국어 임베딩 모델을 사용하고, 텍스트를 벡터로 변환해 의미적 검색을 가능하게 한다.

특히 한국어에 적합한 다국어 모델을 선택함으로써 질문을 한국으로 하고 답변도 한국어로 받아볼 예정이다.

 

Chroma 는 별도 서버 설치가 필요하거나 클라우드 위주로 동작하지 않는  local DB 로,

내가 HuggingFace 를 사용하고자 하는 주요 목적이 Local AI 를 만들기 위함이라서 Chroma 를 사용했다.

2. 양자화 설정 후 언어 모델 로드

다음으로 4비트 양자화함으로써 메모시 사용량 감소 및 응답 속도를 향상시킨다.

 

HuggingFace 모델을 직접 불러온 뒤 파이프라인을 생성하고, 해당 객체를 ChatHuggingFace 로 감싼다

이를 통해 LLM 대신 Chat 모델 인터페이스로 변환하고 LangChain에서 채팅형 LLM 으로 활용할 수 있다.

3. 검색 설정 및 RAG 체인 구성

이후 create_stuff_documents_chain retrieval-qa-chain 을 활용하여 같이 검색을 위한 설정을 진행한다.

즉 retriever 이 문서를 검색하고 문서를 프롬프트에 삽입한 뒤에 LLM이 답변을 생성한다.

 

연봉 5천만원인 거주지의 소득세에 대해 물어봤을 때, retriever 에서 판단한 가장 관련있는 문서를 확인할 수 있다.

즉, 사용자의 질문을 벡터로 변환한 뒤에 Chroma 벡터 DB 에서 가장 유사한 문서조각을 검색한 값이다.

4. 테스트 답변

이후에 RAG 파이프라인의 핵심 부분을 구현한 것으로, 정확히는 검색한 문서를 LLM으로 전한 뒤에

문서 검색 및 LLM 답변 생성을 위한 전체 체인을 생성하고, 전체 Pipeline 을 실행했다.

 

그리고 아래와 같이 메시지를 전송하면, 아래와 같이 답변이 오는것을 알 수 있다

다만 기존에 만들었던 문서를 기반으로 답변을 주지 못하고, AI가 가지고 있는 지식을 기반으로 대답한다.

 

다른 질문을 해봤을 때도 이런식으로 스스로 찾아서 대답하는 것을 볼 수 있다.

 

일단 이렇게 HuggingFace 를 사용해본 것을 알수 있는데, 속도에 따라 모델 크기를 조절하거나

양자화를 사용하는 방법 등을 활용하여 좀더 다양한 설정의 AI 를 만들어 볼 수 있다!