안녕하세요! 이번 섹션에서는 모델의 입력과 출력을 다양한 데이터 소스와 연결하는 방법에 대해 자세히 알아보겠습니다. 특히, PDF, CSV, HTML 파일 등 다양한 유형의 문서를 로드하고, 이를 벡터 임베딩으로 변환하여 저장하고, 모델을 통해 쿼리하는 방법을 배우게 됩니다.
문서 로더 사용법 이해
벡터 임베딩과 벡터 스토어
문서 로더의 종류와 사용법
문제 해결 및 디버깅
pypdf
라이브러리가 필요합니다.beautifulsoup4
라이브러리가 필요합니다.from langchain.document_loaders import CSVLoader
# 로더 인스턴스 생성
csv_loader = CSVLoader(file_path='data/penguins.csv')
# 문서 로드
csv_documents = csv_loader.load()
# 로드된 문서 확인
print("CSV 문서 내용:")
print(csv_documents[0].page_content)
print(csv_documents[0].metadata)
설명:
CSVLoader
는 CSV 파일을 행 단위로 읽어들입니다.page_content
에는 행의 내용이 문자열로 저장됩니다.metadata
에는 파일 소스 정보 등이 저장됩니다.from langchain.document_loaders import BSHTMLLoader
# 로더 인스턴스 생성
html_loader = BSHTMLLoader(file_path='data/example.html')
# 문서 로드
html_documents = html_loader.load()
# 로드된 문서 확인
print("\nHTML 문서 내용:")
print(html_documents[0].page_content)
print(html_documents[0].metadata)
설명:
BSHTMLLoader
는 HTML 파일을 파싱하여 텍스트를 추출합니다.from langchain.document_loaders import PyPDFLoader
# 로더 인스턴스 생성
pdf_loader = PyPDFLoader(file_path='data/report.pdf')
# 문서 로드
pdf_documents = pdf_loader.load()
# 로드된 문서 확인
print("\nPDF 문서 내용:")
print(pdf_documents[0].page_content)
print(pdf_documents[0].metadata)
설명:
PyPDFLoader
는 PDF 파일을 페이지 단위로 읽어들입니다.# 불필요한 줄 바꿈 제거
cleaned_pdf_content = pdf_documents[0].page_content.replace('\n', ' ')
print("\n정제된 PDF 문서 내용:")
print(cleaned_pdf_content)
아래는 위에서 설명한 내용을 모두 포함한 전체 실습 코드입니다.
pip install langchain openai unstructured pypdf beautifulsoup4 python-dotenv
.env
파일 설정프로젝트 루트 디렉토리에 .env
파일을 생성하고 다음 내용을 추가합니다:
OPENAI_API_KEY=your_openai_api_key_here
import os
from langchain.document_loaders import CSVLoader, PyPDFLoader, BSHTMLLoader
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
# CSV 파일 로드
csv_loader = CSVLoader(file_path='data/penguins.csv') # data 폴더에 penguins.csv 파일이 있어야 함
csv_documents = csv_loader.load()
# CSV 문서 내용 출력
print("CSV 문서 내용:")
print(csv_documents[0].page_content)
print(csv_documents[0].metadata)
# HTML 파일 로드
html_loader = BSHTMLLoader(file_path='data/example.html') # data 폴더에 example.html 파일이 있어야 함
html_documents = html_loader.load()
# HTML 문서 내용 출력
print("\nHTML 문서 내용:")
print(html_documents[0].page_content)
print(html_documents[0].metadata)
# PDF 파일 로드
pdf_loader = PyPDFLoader(file_path='data/report.pdf') # data 폴더에 report.pdf 파일이 있어야 함
pdf_documents = pdf_loader.load()
# PDF 문서 내용 출력
print("\nPDF 문서 내용:")
print(pdf_documents[0].page_content)
print(pdf_documents[0].metadata)
# 텍스트 정제 (줄바꿈 제거)
cleaned_pdf_content = pdf_documents[0].page_content.replace('\n', ' ')
print("\n정제된 PDF 문서 내용:")
print(cleaned_pdf_content)
라이브러리 임포트 및 환경 변수 설정
dotenv
라이브러리를 사용하여 .env
파일에서 OPENAI_API_KEY
를 가져옵니다.각 로더의 역할
CSVLoader
: CSV 파일을 행 단위로 읽어들여 문서 객체로 반환합니다.BSHTMLLoader
: HTML 파일을 파싱하여 텍스트를 추출합니다.PyPDFLoader
: PDF 파일을 페이지 단위로 읽어들여 문서 객체로 반환합니다.문서 객체 구조
page_content
: 문서의 텍스트 내용이 저장됩니다.metadata
: 문서의 메타데이터(예: 파일 경로, 페이지 번호 등)가 저장됩니다.문제 해결
이번 섹션에서는 LangChain의 문서 로더를 사용하여 다양한 형식의 문서를 로드하고, 이를 활용하는 방법에 대해 학습했습니다. 로드한 문서를 벡터 임베딩으로 변환하고 벡터 스토어에 저장하여 모델과 상호 작용하는 방법은 다음 강의에서 자세히 다룰 예정입니다.
다양한 문서 형식을 다루면서 발생할 수 있는 문제를 해결하는 방법도 함께 알아보았습니다. 실제 프로젝트에서 이러한 기술을 활용하여 모델의 성능을 향상시킬 수 있을 것입니다.