멀티모달 RAG 파이프라인 구현
Day 1: 멀티모달 RAG
멀티모달 RAG 파이프라인 구현
RAG 심화 > Day 1: 멀티모달 RAG
- PDF에서 텍스트, 이미지, 표를 분리 추출할 수 있다
- GPT-4o를 활용한 이미지 분석 코드를 작성할 수 있다
- 이미지와 표를 검색 가능한 텍스트로 바꿔 하나의 인덱스에 넣을 수 있다
- 통합 벡터 DB를 구성할 수 있다
멀티모달 RAG 파이프라인 구현
제조 매뉴얼에서 텍스트, 이미지, 표를 모두 처리하는 RAG를 만들어보자.
목표
- PDF에서 요소별 분리 추출
- GPT-4o로 이미지 설명 생성
- 표 데이터를 구조화된 텍스트로 변환
- 통합 벡터 DB 구축
이번 주 실습 환경 (한 번만 만들어 두면 5일 내내 쓴다)
파이썬 패키지 — requirements.txt 로 버전을 못박는다. 버전을 적지 않으면
오늘 도는 코드가 다음 달에 ImportError 로 멈춘다. 실제로 이 주차가 쓰는
RAGAS 는 0.2 에서 API 가 바뀌었다.
# requirements.txt
openai>=1.40
chromadb>=0.5
rank-bm25==0.2.2
kiwipiepy>=0.20 # 한국어 형태소 분석 (Day 2)
unstructured[all-docs]>=0.16.25,<0.19
ragas==0.1.22 # Day 3. 0.2 이상은 API 가 다르다
datasets<3.0python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
시스템 패키지 — unstructured[all-docs] 의 strategy="hi_res" 는 파이썬 밖의
프로그램 두 개를 부른다. 이것을 빼먹으면 파싱이 조용히 텍스트만 뱉는다.
# macOS
brew install poppler tesseract tesseract-lang
# Ubuntu / Colab
apt-get install -y poppler-utils tesseract-ocr tesseract-ocr-kor
API 키 — 이 주차의 코드는 전부 OPENAI_API_KEY 를 읽는다.
export OPENAI_API_KEY="sk-..." # Windows PowerShell: $env:OPENAI_API_KEY="sk-..."
돈이 나가는 곳 — 이미지 분석(detail="high")과 RAGAS 평가가 비용의 대부분이다.
RAGAS 는 지표마다 LLM 을 부르므로 질문 30개짜리 평가 한 번에도 호출이 백 단위로 나간다.
먼저 질문 3~5개로 파이프라인이 도는지 확인하고, 전체 평가는 마지막에 한 번만 돌려라.
GPU 는 필요 없다. 이 주차는 전부 API 호출과 CPU 연산이다. 로컬에서 돌리기 어려우면 Colab 무료 런타임으로 충분하다.
스타터에 있는 메서드를 전부 채운다
해답은 스타터와 같은 골격이다. process_elements 와 _get_surrounding_text 까지
여섯 개 메서드를 모두 채우면 사용 예시가 그대로 돌아간다.
청킹은 이번 과제에 없다. 요소(문단·표·이미지)를 단위로 그대로 색인한다. 요소가 길면 잘라야 하는데, 그것은 챌린지에서 다룬다.
아래 스타터 코드를 완성하세요.
힌트 보기
- • Unstructured의 partition_pdf에서 strategy="hi_res"를 사용하면 이미지와 표도 추출됩니다
- • GPT-4o (gpt-4o)에 이미지를 보낼 때 base64 인코딩이 필요합니다
- • 표 변환 시 마크다운 형식과 자연어 설명 두 가지를 모두 생성하면 검색 품질이 올라갑니다
- • ChromaDB에 저장할 때 메타데이터에 element_type을 넣으면 필터 검색이 가능합니다
정답 보기
AI에게 PDF 문서 구조(텍스트·표·이미지 비율)를 알려주면 pdfminer+camelot+Vision API를 조합한 요소별 추출 파이프라인을 생성해줍니다.
제조 설비 매뉴얼 PDF에서 멀티모달 RAG 파이프라인을 구현해줘. pdfminer로 텍스트 블록 추출, camelot으로 표 추출(CSV 변환), pymupdf로 이미지 크롭 후 Gemini Vision API로 도면/회로도 분석, 세 종류를 통합한 벡터 DB(ChromaDB) 인덱싱 코드를 작성해줘.