벡터 스토리지를 사용해야 되는 일이 생겼다.
그래서 이것저것 해보고 있다.
 
Chroma Doc를 읽으며 여러 가지 코드들을 실행해 보며 이해해보고 있다.
나처럼 허우적 되는 사람을 위해 내가 이해한 방식을 적어보려 한다.
 
출처 : 
https://github.com/grumpyp/chroma-langchain-tutorial

 

GitHub - grumpyp/chroma-langchain-tutorial: The project involves using the Wikipedia API to retrieve current content on a topic,

The project involves using the Wikipedia API to retrieve current content on a topic, and then using LangChain, OpenAI and Chroma to ask and answer questions about it. The aim of the project is to s...

github.com

Chroma langchain doc에 들어가 보면 크로마 랭체인 듀토리얼 예제가 올라와 있다.
 

 
다음과 같은 파일들이 있는데 Whisper는 이번장에서 다루지 않을 거고 없어도 무방한 코드 +알파라고 보면 된다.
 
중요한 파일 : 
ask_wikipedia.py
wifipedia.py
요정도.
 
실행 순서는 wikipedia.py 를 실행 후 ask_wikipedia.py 이다.
 
먼저 코드를 말로 자세히 풀어서 설명하는 게 좋을 것 같다.
목적을 알고 코드를 보면 더 이해하기 쉬울 거 ㅇㅇ
 
이번 글은 전체적인 흐름을 보고 다음 글에 코드 분석에 대해 적겠음


 
코드의 전체 흐름
wikipedia.py -> txt 파일 -> ask_wikipedia.py
 
wikipedia.py 
-> 페이지 크롤링 -> HTML을 일반 텍스트로 변환 -> 여러 주제의 내용을 하나의 텍스트로 병합 -> 
 
TXT 파일 저장 
-> 
 
ask_wikipedia.py 
-> TXT 파일 로드 -> 텍스트를 청크로 분할 -> 청크를 벡터로 임베딩 -> 벡터 데이터베이스 생성 
-> RAG 시스템 구축 -> 사용자 질문 접수 -> 관련 정보 검색 -> 답변 생성 및 출력
 
이게 뭐노;;
싶겠지만
 
더 쉽게 말해줌. 
 


더 자세히 말하자면
 
wikipedia.py
에서 내가 원하는 (여러 주제) 토픽의 위키 글을 긁어온다.
 
이걸 원기옥 마냥 모아서
TXT 파일에 저장한다.
 
ask_wikipedia.py 
사용자가 질문하면 TXT 파일을(엄밀히 말하면 txt파일이 아님 추후 설명) 참조해서 관련 정보를 검색하고
답변을 생성한다.
 


대충 AI에게 오픈북 상태를 만들어주는 거라고 보면 된다.
 
사용자 : 안성재가 누구야?
AI : 모르는데요.
 
사용자 : 흑백 요리사 안봄?
AI : 그게 뭔데요.
 
사용자 : (안성재 일대기가 적힌 책) 이거 보고 대답해.
AI : 어... 안성재는 진짜 유명한 미슐랭 3 스타 셰프임;;
 
지금 우리는 보라색 대화 과정을 하고 있다고 보면 된다.
 


코드 사용 결과
 
사용 결과를 먼저 확인하고 코드를 분석해 보자.
코드 플래시 포워드

 
이 부분을 내가 조금 바꿨다. Han Kang 추가 (이 부분은 내가 위키피디아에서 긁어오고 싶은 주제를 모아두는 곳이다.)
 
오늘 기준 (현재 2024-10-16)
따끈따끈한 화제의 인물 한강 작가님을 첫 요소로 넣어줬다.
 
일단 기존 LLM 모델(GPT 4o)에게 물어보자.
니 한강 작가님 아나?

엥 모르는데요.

 
모른단다. ㄷㄷ 국뽕 다운
 
사실 알사람은 알겠지만 이건 당연한 결과다.
 
LLM 모델을 학습시키는 데에는 엄청난 비용이 들기 때문에
정기적으로 정보를 추가시키기 큰 부담이 든다.
 
GPT 4o가 언제까지의 정보를 학습한 지는 모르겠지만

답변을 미루어 보았을 때

따끈따끈한 한강 작가님의
노벨상 소식을 모르는 거 보면

그 이전 정보들로만 학습이 된 것 같다.
 
그럼 어캄;;
LLM 모델 자체를 다시 학습시키는 게 아니라
LLM 모델에게 최신 신문을 쥐어주고 한강 작가님이 노벨상 탄 거 읽어오라 하면 된다.
그게 RAG다.


ㄹㅇ 코드 실행 결과
 
위에 내가 Han Kang 이라고 토픽을 적어뒀다.
그리고 wikipedia.py를 실행한다.
 
그러면 txt 파일이 하나 생길 건데.
어케 생겼나 한번 확인해 보자.
 

 
txt 파일에 Han Kang이라고 적혀 있다.
한강 작가님의 정보가 txt 파일에 저장된 것.
 
이제 ask_wikipedia.py로 와서 
한강 작가님에 대해 물어보자

니 한강 작가님 아나?

 
그리고 코드를 실행한다.

 
ㄷㄷㄷ 한강 작가님이 누군지 정확히 알고 있다. 
 

펄럭

암튼 이렇게 RAG를 사용하면 기존에 LLM 모델이 모르고 있던 정보도 답변이 가능하다.
 
사실 굉장히 많은 부분이 생략했는데
이 부분은 코드 분석에서 다루겠음.

코드 분석은 다음 글에 따로 
 

wikipedia.py 코드 분석 글

이게 그 다음 글임 (2024-10-18 추가)

https://min-c-max.tistory.com/entry/Chroma-LangChain-Tutorial-%ED%81%AC%EB%A1%9C%EB%A7%88-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EB%9D%BC%EA%B7%B8-RAG-%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9D-1

+ Recent posts