앞의 포스팅에서 RAG가 무엇인지에 대해 알아봤는데요.
이번 포스팅에서는 RAG를 만들기 위한 재료를 어떻게 가져오는지 알아볼게요!
그 재료를 가져오는 것을 바로 Document Loader라고 부릅니다.
하나씩 자세히 알아볼게요!
혹시나 RAG 전반적인 개념이 궁금하시면 아래 포스팅 참고해주세요!
RAG(Retrieval-Augmented Generation) 기본 개념 정리 및 Langchain코드 예제
최근 ChatGPT의 등장으로 LLM에 대한 관심이 커지고 있습니다.하지만 써보신 분들은 아시겠지만, 분명히 LLM도 한계점이 존재합니다.예를 들어,최신 정보 반영이 안되어 있다거나,특정 기업 내에서
jaeyoon-95.tistory.com

Document Loader란?
RAG시스템을 구축 할 때, 참고할 데이터를 가져오는(로드하는) 로더라고 할 수 있습니다. 먼저 가져온 뒤에 LLM이 이해할 수 있도록 변환하는 과정이 필요합니다.
예를 들어,
- PDF 파일을 읽어 LLM이 알아들을 수 있는 텍스트로 바꿔준다.
- 웹페이지 HTML 코드를 제거하고 의미있는 텍스트로 바꿔준다.
등으로 로드할 수 있겠습니다.
그럼 이런 로드는 어떻게 해야할까요?
저번 포스팅에서도 말씀드렸듯이, 아주 편한 우리의 LLM라이브러리인 Langchain이 많은 로더를 제공해줍니다.
아래에서 어느 형식의 파일을 읽어올 수 있는지 모두 알아볼게요!
Document Loader 종류
설명에 앞서 만약 실행을 하고싶으시다면, Langchain을 먼저 설치해주세요!
pip install langchain
1.TextLoader
텍스트 로더로 .txt파일을 불러올 수 있습니다.
from langchain_community.document_loaders import TextLoader
loader = TextLoader("example.txt")
documents = loader.load()
2. CSVLoader
csv형태의 데이터를 로드하여 각 행을 문서로 변환합니다.
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("example.csv")
documents = loader.load()
여기서 csv형태 뿐만 아니라 tsv도 가능합니다. 아래처럼 조건을 추가해주면 됩니다.
마치 pandas로 tsv, csv를 불러올 때와 유사하죠?
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
file_path="example.tsv",
csv_args={
"delimiter": "\t"
}
)
documents = loader.load()
delimiter만 바꾼다면 ;나 *로 구분된 파일도 가능합니다.
3.JSONLoader
JSON 형태의 파일을 로드합니다.
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader("example.json")
documents = loader.load()
4.Markdown
Markdown형태의 파일을 로드합니다.
from langchain_community.document_loaders import UnstructuredMarkdownLoader
loader = UnstructuredMarkdownLoader("example.md")
documents = loader.load()
5.PyPDFLoader
PDF문서를 페이지 단위로 로드합니다.
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("example.pdf")
documents = loader.load()
6.WebBaseLoader
웹페이지 내에 있는 HTML 콘텐츠를 로드하고, 본문에 텍스트를 추출합니다.
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com")
documents = loader.load()
7.Sitemap
웹사이트의 Sitemap을 분석하여 여러 페이지를 자동으로 크롤링하고 로드합니다.
from langchain_community.document_loaders import SitemapLoader
loader = SitemapLoader("https://example.com/sitemap.xml")
documents = loader.load()
8.RecursiveUrlLoader
주어진 URL에서 시작하여 내부 링크를 따라가며 재귀적으로 페이지를 로드합니다.
from langchain_community.document_loaders import RecursiveUrlLoader
loader = RecursiveUrlLoader("https://example.com")
documents = loader.load()
9.DirectoryLoader
지정된 디렉토리 내의 모든 파일을 로드하여, 특정 파일 확장자를 필터링할 수 있습니다.
from langchain_community.document_loaders import DirectoryLoader
loader = DirectoryLoader("path/to/directory", glob="**/*.txt")
documents = loader.load()
10.GDriveLoader
구글 드라이브에서 파일을 로드합니다.
from langchain_community.document_loaders import GDriveLoader
loader = GDriveLoader("your_folder_id", "credentials.json")
documents = loader.load()
11.AzureBlobStorageFileLoader
Azure Blob Storage에서 파일을 로드합니다.
from langchain_community.document_loaders import AzureBlobStorageFileLoader
loader = AzureBlobStorageFileLoader("your_connection_string", "container_name", "blob_name")
documents = loader.load()
로드한 데이터는 아래와 같이 불러와집니다.
Document(page_content="This is a sample text file.\nIt contains multiple lines of information.\nLangChain makes it easy to work with documents.")
핵심적으로 쓰이는 것들만 찾아왔는데요.
그 외에 정말 다양한 Loader들이 있습니다.
Custom Loader
정해져있는 Loader를 쓸 수도 있지만, 본인이 원하는대로 만들어서 쓸 수도 있습니다.
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
class MyCustomLoader(BaseLoader):
def __init__(self, path):
self.path = path
def load(self):
# Step 1. 데이터 읽기
with open(self.path, "r", encoding="utf-8") as f:
raw_text = f.read()
# Step 2. Document 객체로 변환
doc = Document(
page_content=raw_text,
metadata={"source": self.path}
)
return [doc]
방법은 정말 간단합니다. 로드한 데이터를 읽고, 텍스트 형태로 만들어서 Document객체에 넣어주시면 됩니다.
예를 들어서 log 데이터를 불러오고 싶다면 다음과 같이 구현할 수 있습니다.
class LogFileLoader(BaseLoader):
def __init__(self, filepath):
self.filepath = filepath
def load(self):
with open(self.filepath, "r", encoding="utf-8") as file:
lines = file.readlines()
logs = "\n".join(line for line in lines if "ERROR" in line)
return [Document(page_content=logs, metadata={"source": self.filepath})]
이번 포스팅에서는 Langchain Document loaders 종류에 대해서 알아봤는데요.
다음 포스팅에서도 RAG를 구현할 수 있는 다음 단계를 차근차근 알려드릴게요!
궁금한 점 있으시면 언제든지 댓글 남겨주세요!

'인공지능공부 > LLM' 카테고리의 다른 글
| RAG(Retrieval-Augmented Generation) 기본 개념 정리 및 Langchain코드 예제 (0) | 2025.04.03 |
|---|---|
| ChatGPT 프롬프트 엔지니어링 잘 하는 방법 (1) | 2025.03.26 |