기본적인 MVP RAG를 구현한 이후에 크롤러로 수집된 정보를 바탕으로 조회하고 생성하기 위해 정보를 임베딩하고 임베딩된 정보를 저장하고 쉽게 조회할 수 있는 Vector Store를 선정해야 했다. 먼저 임베딩 모델의 경우 추후 생성에 gpt-4.o-mini를 사용하기에 OpenAI text-embedding-large 모델을 사용했다.

그럼 ChromaDB와 Faiss 그리고 Pinecone의 차이는 어떻게 될까?

먼저 ChromaDB와 Faiss의 경우 Embedding 된 내용을 바탕으로 Index를 만들 수 있다. 그리고 둘다 Langchain 라이브러리를 통해 index만 있다면 retriever로 전환하여 사용자의 요청에 유사한 결과를 반환할 수 있다. 하지만 여기서 차이점은 Faiss의 경우 데이터와 임베딩된 데이터가 연결된 형태로 관리된다.

Pinecone의 경우 MongoDB와 같은 온라인 Vector store다. Embedding된 데이터를 바로 Pinecone에 지정한 Index에 주입할 수 있다. 그리고 해당 Index는 권한 설정만 하면 어떤 프로젝트에서도 사용할 수 있다. 하지만 이런 편리한 과정 전체가 유료다.(무료 버전의 경우 최대 5개의 Index를 만들 수 있으나 기존 Index에 대한 수정이 불가능하다.)

결론적으로 FAISS를 선택하였다. Pinecone의 경우 데이터가 계속 크롤링 되고 있는 상황이었기 때문에 Index를 처음부터 다시 만들어줘야 했는데 시간이 부족했고 동시에 Index가 대용량이지 않기 때문에 Faiss와 ChromaDB를 도커 Image에 포함 시켜도 된다고 판단했다. 그래서 결국 Faiss와 ChromaDB 중 하나를 선택해야 했는데 Faiss의 경우 데이터와 임베딩된 데이터 간의 연결된 형태 였기에 추후 확장에 좀 더 용이하다고 판단 됐다. 그리고 사용정보나 커뮤니티의 크기가 Faiss가 좀 더 규모가 컸기에 FAISS를 선택했다.