RangChain

0201 강의 Part.2 Ch.3 RAG, 프로젝트 Develope

유방울 2025. 1. 27. 13:10

1. 사전단계

 

1. Load

2. Split 토큰을 지정함

단락을 분할해서 저장함

 

질문이 들어오면 (생성향 AI가 뭔지?)

단락별로 유사도 계산을 하고 관련성있는 단락을 뽑아냄 

 

여러단락에서 가져오면 답변을 위한 정보 수집이 어려움

단락 갯수는 설정할 수있는데 이걸 설정하는 게 중요함

 

유사도 계산법

단락을 수학적인 표현인 좌표계로 바꿈

 

로드 -> 텍스트 스플릿(효율적으로 가져오기 위해서) -> 유사도 계산을 위해 엠베딩함 ->

1536차

특정 키워드가 포진되어 있고 Chunk 자를 때 겹쳐져 있음

 이거 Chunk overlap 이라고 함

 

4. Store 저장

단락을 숫자표현을 바꾸는 것을 임베딩

알고리즘마다 차원이 다름

변환하는 갯수만큼 비용이 듦 

문서 로드하고 chunk 기준으로 쪼개고 숫자표현으로 변환하고 저장함

vector는 숫자들의 집합

그래서 vetor store라고 함

저장해두고 쿼리를 불러오는 것임


실행단계 :  Runtime

 

Question -> Retrieve 리트리버가 연관성있는 단락을 뽑아냄 -> 몇가지 단락을 prompt에 넣어줌 -> LLM만듦 

 

리트리버가 DB에서 유사도 검색을 함

ctrl + F로 찾음 

BUT 질문과 문서에 대한 유사도를 계산해야 함

DB안에 저장된 모든 단락들도 숫자로 변환함

 

검색기를 어떻게 사용할 것인가?

Query를 만지는 것

정확한 정보 제공

응답 시간 단축

최적화 : 필요한 정보만을 추출함

 

질문을 벡터로 변환 -> 벡터 유사성 비교 -> 문서 정보 변환

Sparse Retrieve 이산적인 키워드 기반의 표현

Dense Retriever 연속적인 벡터 공간에서 의미 검색

일단은 Dense Retreiver 먼저 하기

 

프롬프트 필요성

LLM - GPT 사용해서 씀

Chain  생성 - 앞서 얘기만 모든 얘기를 다 종합함

두 가지 갈래로 나뉨