RAG-minimal-example#

모든것에 On-Premise에서 작동하는 Retrival Argmented Generation의 최소 예제입니다.
회사내의 워크스테이션에서 작동하는 vLLM서버를 통하여 언어모델을 작동하고, 개인 컴퓨터에서 임베딩 모델이 작동됩니다.
vector db 는 postgresql 의 extension인 pgvector를 사용하고 있으며 이에 대한 설치 방법은 해당 프로젝트 github 페이지를 참고하시길 부탁드립니다. https://github.com/pgvector/pgvector
데이터 베이스 설정은 db_config.json을 수정하여 진행합니다.
data 폴더에 넣고 싶은 파일(pdf, word, hwp)를 넣고 document_embedding.py를 실행하면 서버위에 data 폴더 안에 있는 파일의 텍스트를 모두 임베딩합니다. 실행시마다 설정된 table을 리셋하고 새로 임베딩을 빌드하는 방식이기 때문에 파일이 많으면 오래 걸릴 수 있습니다. vector db의 특성상 하나의 새로운 element를 삽입하면 search tree를 다시 지어야 하기 때문에 프로토타입단계에서는 이것으로 마무리하고, 차후 Cassnadra 5.X로 넘어가 고도화 할 계획입니다. (PG vector는 임베딩을 relational 처럼 다룰 수 있게 하지만, 이때문에 상당한 성능의 희생을 감수하였습니다.)
또한 document_load_embedding.py 는 새로 임베딩을 실행하지 않고 vector db에서 임베딩을 불러와 검색하는 방식입니다.
기본 설정된 embedding 파일은 한국어를 지원합니다. LLM(Mixtral)또한 한국어를 지원하지만 때때로 영어로 대답하는 문제가 있으며 이는 LLAMA INDEX상에서 기본적으로 하고 있는 프롬프트 엔지니어링이 모두 영어여서 그럴 수 있습니다. (이 문제는 gpt3.5-turbo도 가지고 있는 문제입니다)
또한 Mixtral의 근본적인 한계로써, 영단어의 한국어 음차를 이상하게 읽는 문제가 있습니다.
한국어의 완벽한 지원을 위해서는 상당히 많은 수의 LLAMA INDEX 프롬프트 엔지니어링을 다시, 또 새로 만들어야 할 것으로 보입니다. 이를 위해 DSPy를 사용할 예정에 있습니다.