https://www.inflearn.com/courses/lecture?courseId=333326&type=LECTURE&unitId=212606
RAG는 모델이 학습 데이터에 포함되지 않은 외부 데이터를 실시간 검색을 통해 답변을 생성하도록 하는 기법을 말한다. 할루시네이션을 방지하고, 모델이 최신정보를 반영하게끔 할 수 있음.
RAG모델은 기본적으로 다음 구조를 갖는다.
!pip install -q langchain langchain_openai langchain_community tiktoken chromadb
벡터 스토어로는 chromadb를 이용한다.
데이터 불러오기 → 텍스트 split → 인덱싱 → 검색 증강 → 생성의 단계를 거칠 것임.
# Data Loader - 웹 페이지 데이터 가져오기
from langchain_community.document_loaders import WebBaseLoader
# 위키피디아 환영합니다.
url = '<https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%ED%99%98%EC%98%81%ED%95%A9%EB%8B%88%EB%8B%A4>'
loader = WebBaseLoader(url)
# 웹 페이지 텍스트 -> Documents
docs = loader.load()
docs
데이터를 가져왔으니 이를 이제 split해보자.
# Data Loader - 웹 페이지 데이터 가져오기
from langchain_community.document_loaders import WebBaseLoader
# 위키피디아 환영합니다.
url = '<https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%ED%99%98%EC%98%81%ED%95%A9%EB%8B%88%EB%8B%A4>'
loader = WebBaseLoader(url)
# 웹 페이지 텍스트 -> Documents
docs = loader.load()
# Text Split (Documnets -> samll chunks)
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
print(len(splits))
print(splits[3])