AI/Gen AI

RAG 구현 Step-by-Step Vector DB 구현 - 1: Implementation Outline

문괜 2024. 9. 16. 12:00
반응형

RAG 구현 Step-by-Step: Intro

  1. 가상환경 설정 및 MVP 구현
  2. Dataset과 Vector DB 구현
    1. Dataset 확보
    2. Vector DB 구현
  3. Embedding & Searching 구현
  4. Generation  구현

 

위의 내용을 바탕으로 현재 크롤러가 잘 작동하고 있는 상황이고 크롤러가 현재 열심히 크롤링을 하고 있다. (인간이 미안해)

 

현재 크롤러가 크롤링한 내용의 경우 간단한 json의 형태로 저장되고 있다. 그리고 json의 저장된 내용을 Vector DB에 담기 위해서는 아래와 같은 순서로 json을 변환해 주어야 한다.

  1. Json을 토큰화를 진행한다.
  2. 전환된 토큰을 바탕으로 Embedding을 활용해 백터화를 진행한다.
  3. 백터화된 값을 저장한다.

이렇게 간단한 로직을 바탕으로 진행하면 되나 고민해 봐야하는 문제가 있다.

  1. 어떤 방식으로 Tokenization과 Embedding을 진행할지
  2. 어떤 Vector Store를 사용할 지

이 문제들을 공통적으로 해결 할 수 있는 방법은 LangChain의 Vector Stores 중 하나를 선택할지 혹은 LangChain과 같은 프레임워크 없이 구성하는지를 선택하면 된다.

 

물론 결론은 LangChain을 활용하는게 좋다는 판단을 하게 됐다. 프레임워크 없이 구성하는것이 어떻게 보면 좀 더 세부적인 변화에 있어 장점이 될 수 있다. 하지만, 아래와 같은 문제들이 발생하게 된다.

 

예를 들어 Json데이터를 FAISS를 활용해 Vector DB를 구성한다 했을 때

  1. 결론적으로 조회를 위해서 Json을 토큰화하고 임베딩하고 Docstore와 같은 부분들을 직접 구현하고 연결해 줘야한다.
  2. 물론 직접 할 수 있다 하지만 또다른 문제가 발생한다. 바로 토큰개수이다. Vector Stores의 경우 패키지별로 허용하는 토큰의 개수가 다르다. 그말은 Json 데이터를 변환하는 과정에서 하나의 실수만으로 1번의 과정을 다시 진행해야한다.
  3. 마지막으로 가장 중요한점은 데이터라는 것은 정확해야한다. 그런데 토큰화 임베딩 그리고 Docstore 같은 부분들을 수동으로 하게 된다면 정확성이 확실해지지 않을 수 있다는 생각이 들었다.

이와 같은 이유로 결국 Vector DB(Store)를 구성함에 있어 직접 그 과정을 다 진행하는것이 아닌 Langchain을 활용하기로 했다. 또한 결국에는 RAG를 구성함에 있어 Langchain을 사용하기에 굳이 수동으로 Vector DB를 구성할 필요가 없다고 판단된다.

 

아래의 링크로 수동으로 Vector DB를 만드는 방식을 확인 할 수 있다. 하지만 절대로 추천하지 않는다.

수동으로 Vector DB 구현: MVP RAG + DB

 

RAG/rag-practice/mvp-rag-db at main · jwywoo/RAG

1. RAG Practice. Contribute to jwywoo/RAG development by creating an account on GitHub.

github.com

 

 

그래서 다음 포스트는 LangChain을 활용하여 Vector Store를 구성하는 특히, 그 중에서도 FAISS를 사용하는 방식이다.

 

RAG 구현 Step-by-Step Vector DB 구현 - 2: Faiss with LangChain

 

 

반응형