문서로더부터 벡터스토어까지 쌩 파이썬으로 만들어보기
소개
문서 등의 지식을 이용한 챗봇이 널리 사용되고 있습니다. 여기에 사용되는 기법이 Retrieval-Augmented Generation (RAG)인데요. 이를 구현하기 위해서는 문서로더부터 벡터스토어 구축까지 많은 전처리가 필요합니다. 이를 랭체인으로 쉽게 해볼 수 있는데요. 랭체인은 추상화가 잘 되어 있어서, 그 안을 바로 살펴보는 것은 쉽지 않습니다. 이번 포스팅에서는 Python과 OpenAI 라이브러리를 사용하여 간단한 벡터 스토어를 구축하는 방법을 소개합니다. 이를 통해 랭체인 기반의 RAG을 실제로 구현하고, 이해하는 데 도움이 될 것입니다.
- 세미나 일시 : 2024년 1월 18일 오후 9시 ~ 9시반
- 장소 : 유튜브 라이브 (아래 링크에 지정된 시간에 접속)
- 내용 : RAG 개념 설명 및 쌩 파이썬 소스코드 설명
- 참가신청하기 : https://aifactory.space/task/2718/discussion/817 접속 후 우측상단 [참가하기] 버튼 클릭
필수 설치와 환경설정
- 먼저, 필요한 라이브러리를 설치해야 합니다. 이 예제에서는 openai와 tqdm 라이브러리를 사용합니다.
- OenAI API를 사용하기 위해서는 API 키를 환경 변수로 설정해야 합니다. (참고로 여기서 제공된 키는 예시입니다.)
텍스트 로딩과 처리
- 텍스트 로더: 지정된 파일 경로에서 텍스트를 로드하는 클래스입니다. 파일을 열고 내용을 읽어서 반환합니다.
- 텍스트 스플리터: 주어진 텍스트를 지정된 크기의 청크로 나누는 클래스입니다. 구분자 패턴을 기준으로 문서를 분할하고, 지정된 크기를 넘지 않도록 청크를 생성합니다.
벡터 스토어 구축
- 임베딩 클래스: OpenAI의 임베딩 모델을 사용하여 텍스트를 벡터로 변환하는 클래스입니다. text-embedding-ada-002 모델을 사용하여 임베딩을 생성합니다.
- 벡터 스토어: 문서와 그에 해당하는 벡터를 저장하는 클래스입니다. 각 문서를 임베딩하고, 유사도 검색을 위해 코사인 유사도를 계산합니다.
사용 예제
- 국가 연설문 예제: 미국 대통령의 연설문을 로드하고, 벡터 스토어를 구축하여 특정 쿼리에 대한 유사 문서를 검색합니다.
- 한국 헌법 예제: 한국 헌법의 전문을 로드하고, 작은 청크로 나누어 벡터 스토어를 구축합니다. 이를 통해 특정 질문에 대한 관련 문서를 찾습니다.
대화형 QA 시스템 구현
- QA 체인: 검색된 문서를 바탕으로 GPT-3.5 모델을 활용하여 질문에 대한 답변을 생성합니다. 사용자 입력에 따라 AI가 적절한 응답을 제공하는 대화 시스템으로 확장할 수 있습니다.
이 예제를 통해, 간단한 벡터 스토어의 구축부터 RAG의 개념적 이해, 그리고 실제 적용까지 전체 과정을 경험할 수 있습니다. RAG가 어떻게 동작하는지 깊이 이해하는 데 큰 도움이 될 것입니다. 복잡한 개념도 직접 구현해보면서 쉽게 이해할 수 있음을 보여주고자 합니다.
책 소개
[추천사]
- 하용호님, 카카오 데이터사이언티스트 - 뜬구름같은 딥러닝 이론을 블록이라는 손에 잡히는 실체로 만져가며 알 수 있게 하고, 구현의 어려움은 케라스라는 시를 읽듯이 읽어내려 갈 수 있는 라이브러리로 풀어준다.
- 이부일님, (주)인사아트마이닝 대표 - 여행에서도 좋은 가이드가 있으면 여행지에 대한 깊은 이해로 여행이 풍성해지듯이 이 책은 딥러닝이라는 분야를 여행할 사람들에 가장 훌륭한 가이드가 되리라고 자부할 수 있다. 이 책을 통하여 딥러닝에 대해 보지 못했던 것들이 보이고, 듣지 못했던 것들이 들리고, 말하지 못했던 것들이 말해지는 경험을 하게 될 것이다.
- 이활석님, 네이버 클로바팀 - 레고 블럭에 비유하여 누구나 이해할 수 있게 쉽게 설명해 놓은 이 책은 딥러닝의 입문 도서로서 제 역할을 다 하리라 믿습니다.
- 김진중님, 야놀자 Head of STL - 복잡했던 머릿속이 맑고 깨끗해지는 효과가 있습니다.
- 이태영님, 신한은행 디지털 전략부 AI LAB - 기존의 텐서플로우를 활용했던 분들에게 바라볼 수 있는 관점의 전환점을 줄 수 있는 Mild Stone과 같은 책이다.
- 전태균님, 쎄트렉아이 - 케라스의 특징인 단순함, 확장성, 재사용성을 눈으로 쉽게 보여주기 위해 친절하게 정리된 내용이라 생각합니다.
- 유재준님, 카이스트 - 바로 적용해보고 싶지만 어디부터 시작할지 모를 때 최선의 선택입니다.