PDF RAG 챗 서비스 구축 가이드 : Claude Skill을 활용한 단계별 실전 매뉴얼
PDF RAG 챗 서비스 구축 가이드
Claude Skill을 활용한 단계별 실전 매뉴얼
🎯 목표
PDF 문서를 기반으로 RAG(Retrieval-Augmented Generation) 시스템을 만들어 LLM 챗 서비스 구축
📋 전체 프로세스
[1단계] 프로젝트 초기화 및 계획
↓
[2단계] PDF 파싱 (PDF Skill 활용)
↓
[3단계] 데이터 전처리 및 청크화
↓
[4단계] 벡터 DB 구축
↓
[5단계] RAG 검색 시스템
↓
[6단계] 챗 인터페이스 구축
↓
[7단계] 배포 및 최적화
1단계: 프로젝트 초기화
📝 Claude에게 요청하기
안녕! PDF 문서들을 읽고 질문에 답변하는 챗봇을 만들고 싶어.
프로젝트 정보:
- PDF 파일: 약 50개 (의학/생명과학 논문)
- 언어: 한국어와 영어 혼용
- 사용자: 연구원 10명 정도
- 배포: 로컬 서버 (인터넷 연결됨)
- 예산: 무료 도구 선호하지만 필요시 유료 가능
전체 시스템 아키텍처와 단계별 계획을 제안해줘.
✅ Claude가 제공할 것들
1. 시스템 아키텍처 다이어그램
- 각 컴포넌트 역할 설명
- 데이터 흐름
- 기술 스택 추천
2. 단계별 작업 계획
- 각 단계별 예상 소요 시간
- 필요한 skill 목록
- 체크포인트
3. 파일 시스템 구조
/home/claude/pdf-rag-chatbot/
├── data/
│ ├── raw/ # 원본 PDF
│ ├── processed/ # 파싱된 데이터
│ └── embeddings/ # 벡터 인덱스
├── src/
│ ├── parsers/ # PDF 파싱
│ ├── embeddings/ # 임베딩 생성
│ ├── search/ # 검색 엔진
│ └── chat/ # 챗 인터페이스
├── tests/
├── config/
└── requirements.txt
4. 기술 스택 추천
| 구성요소 | 추천 도구 | 이유 |
|---|---|---|
| PDF 파싱 | PyMuPDF + pdfplumber | 속도와 정확도 균형 |
| 임베딩 | sentence-transformers | 무료, 한국어 지원 |
| 벡터 DB | FAISS | 빠르고 로컬 실행 |
| 챗 UI | Streamlit | 빠른 프로토타입 |
| LLM | Claude API | 품질과 한국어 성능 |
2단계: PDF 파싱 (핵심!)
📝 Claude에게 요청하기
첫 번째 요청 - PDF 업로드 및 분석
첨부한 PDF 파일들을 분석해줘.
어떤 유형의 문서인지, 어떤 특징이 있는지 파악해서
최적의 파싱 전략을 제안해줘.
참고:
- 대부분 학술 논문 (2단 컬럼)
- 표와 그래프 많음
- 참고문헌 포함
🎯 PDF Skill이 자동 적용됨
Claude가 내부적으로 수행:
/mnt/skills/public/pdf/SKILL.md자동 로드- 문서 유형 분석
- 최적 도구 선택
- 처리 전략 수립
✅ Claude의 분석 결과 예시
분석 완료:
📊 문서 특성:
- 총 50개 PDF, 평균 20페이지
- 유형: 학술 논문 (90%), 리뷰 논문 (10%)
- 레이아웃: 2단 컬럼 구조
- 표: 평균 5개/문서
- 참고문헌: 평균 30개/문서
🔧 추천 파싱 전략:
1. 기본 텍스트: PyMuPDF (빠름)
2. 표 추출: pdfplumber (정확함)
3. 메타데이터: PyMuPDF
4. 참고문헌: 정규표현식 패턴
⚡ 예상 처리 시간: 15-20분 (50개 전체)
두 번째 요청 - 실제 파싱 실행
좋아! 제안한 전략대로 전체 PDF를 파싱해줘.
출력 형식:
- 각 PDF별로 JSON 파일 생성
- 구조:
{
"metadata": {제목, 저자, 연도, DOI},
"sections": [
{"type": "abstract", "content": "..."},
{"type": "introduction", "content": "..."},
...
],
"tables": [...],
"references": [...]
}
결과는 /mnt/user-data/outputs/parsed_data/ 에 저장해줘.
✅ PDF Skill이 보장하는 것들
품질 검증 자동 수행:
- ✓ 모든 페이지 처리 확인
- ✓ 텍스트 추출 정확도 측정
- ✓ 표 구조 무결성 검증
- ✓ 누락 섹션 탐지
- ✓ 특수문자 인코딩 확인
문제 발생 시 자동 대응:
- 스캔본 감지 → OCR 자동 적용
- 복잡한 표 → 대체 도구 시도
- 암호화 PDF → 해제 방법 제안
3단계: 데이터 전처리
📝 Claude에게 요청하기
파싱된 JSON 파일들을 RAG 시스템에 최적화해서 전처리해줘.
요구사항:
1. 청크 크기: 500-600 토큰 (의미 단위 보존)
2. 오버랩: 50 토큰
3. 각 청크에 메타데이터 추가:
- 원본 파일명
- 페이지 번호
- 섹션 타입 (abstract, methods, results 등)
- 저자, 연도
4. 의학 용어 전처리:
- 약어 확장 (e.g., "DNA" → "Deoxyribonucleic acid")
- 유니코드 정규화
- 특수문자 처리
출력: processed_chunks.json
✅ Claude가 수행
- 문단/섹션 경계 인식
- 의미 단위 유지하면서 청크 분할
- 표는 별도 청크로 (컨텍스트 포함)
- 각 청크에 풍부한 메타데이터 태깅
4단계: 벡터 DB 구축
📝 Claude에게 요청하기
전처리된 청크들을 벡터 DB로 만들어줘.
설정:
- 임베딩 모델: 한국어 지원하는 sentence-transformers
- 벡터 DB: FAISS (IndexHNSW - 속도와 정확도 균형)
- 저장 위치: /home/claude/pdf-rag-chatbot/data/embeddings/
그리고 다음 기능도 구현해줘:
1. 새 문서 추가 기능
2. 문서 삭제 기능
3. 인덱스 백업/복원 기능
4. 검색 성능 측정 함수
✅ Claude가 제공
1. 임베딩 생성 스크립트
- 배치 처리 (메모리 효율)
- 진행률 표시
- 에러 처리
2. FAISS 인덱스 구축
- 최적화된 인덱스 파라미터
- GPU 가속 (가능한 경우)
3. 관리 도구
- add_document.py
- delete_document.py
- backup_index.py
4. 테스트 및 검증
✅ 임베딩 생성 완료
- 총 청크: 8,542개
- 임베딩 차원: 768
- 인덱스 크기: 52MB
- 검색 속도: 평균 0.03초
테스트 쿼리 결과:
Query: "COVID-19 백신 부작용"
Top 3 유사도:
1. 0.89 - [논문12, p.15] 백신 이상반응 사례
2. 0.84 - [논문23, p.8] mRNA 백신 안전성
3. 0.81 - [논문45, p.22] 부작용 모니터링 시스템
5단계: RAG 검색 시스템
📝 Claude에게 요청하기
RAG 검색 시스템을 만들어줘.
기능:
1. 사용자 질문 받기
2. 질문을 임베딩으로 변환
3. 벡터 DB에서 관련 청크 검색 (top-k=5)
4. 검색 결과에 리랭킹 적용 (정확도 향상)
5. Claude API로 답변 생성
6. 답변에 출처 표시
고급 기능:
- 하이브리드 검색 (벡터 + 키워드)
- 쿼리 확장 (동의어, 관련어 추가)
- 대화 히스토리 고려 (이전 질문 참조)
FastAPI로 REST API 만들어줘.
✅ Claude가 제공
1. 검색 엔진 코어
- 벡터 검색
- BM25 키워드 검색
- 하이브리드 스코어 계산
- 리랭킹 모델
2. 프롬프트 엔진
생성된 프롬프트 예시:
시스템 메시지:
"당신은 의학 논문을 분석하는 전문 AI입니다.
제공된 문서의 내용만을 기반으로 정확하게 답변하세요."
컨텍스트:
[문서 1] (논문: "COVID-19 백신 효능", 페이지: 15)
mRNA 백신은 임상시험에서 95%의 예방 효과를 보였습니다...
[문서 2] (논문: "백신 안전성 연구", 페이지: 8)
가장 흔한 부작용은 주사 부위 통증(80%), 피로(60%)...
질문: COVID-19 백신의 부작용은 무엇인가요?
답변 시:
- [문서 번호] 형식으로 출처 표시
- 문서에 없는 내용은 추측하지 말 것
- 불확실하면 명시할 것
3. FastAPI 서버
엔드포인트:
POST /api/search # 문서 검색만
POST /api/ask # 질문 → 답변
POST /api/chat # 대화형 (히스토리 포함)
GET /api/documents # 문서 목록
POST /api/upload # 새 PDF 업로드
4. 응답 포맷
{
"answer": "COVID-19 백신의 주요 부작용은...",
"sources": [
{
"document": "COVID-19 백신 효능",
"page": 15,
"relevance": 0.89,
"excerpt": "...mRNA 백신은..."
}
],
"confidence": 0.92,
"processing_time": 1.2
}
6단계: 챗 인터페이스
📝 Claude에게 요청하기
사용자 친화적인 웹 챗 인터페이스를 만들어줘.
기능:
1. 채팅 UI (말풍선 스타일)
2. 파일 업로드 (새 PDF 추가)
3. 출처 클릭하면 원본 PDF 페이지로 이동
4. 대화 히스토리 저장
5. 검색된 문서 프리뷰
6. 피드백 버튼 (답변이 도움됐는지)
기술: Streamlit 또는 Gradio
디자인: 깔끔하고 전문적으로
✅ Claude가 제공
Streamlit 앱 구조:
화면 구성:
┌─────────────────────────────────┐
│ PDF 의학 논문 챗봇 │
├─────────────────────────────────┤
│ 📁 새 문서 업로드 │
├─────────────────────────────────┤
│ [채팅 영역] │
│ │
│ 👤 COVID-19 백신 부작용은? │
│ │
│ 🤖 주요 부작용은... │
│ 📄 출처: [논문12 p.15] │
│ 👍 👎 피드백 │
│ │
├─────────────────────────────────┤
│ 💬 질문 입력... [전송] │
└─────────────────────────────────┘
추가 기능:
- 샘플 질문 버튼
- 검색 설정 (top-k 조절)
- 답변 길이 조절
- 언어 선택 (한/영)
7단계: 배포 및 최적화
📝 Claude에게 요청하기
시스템을 배포하고 최적화해줘.
배포:
- 목표: 사내 서버 (Ubuntu 22.04)
- 접근: 팀원 10명 동시 접속
- 요구사항: Docker 컨테이너로 패키징
최적화:
- 검색 속도 개선
- 메모리 사용량 최적화
- 캐싱 전략
모니터링:
- 검색 정확도 로깅
- 응답 시간 추적
- 에러 알림
배포 가이드 문서도 만들어줘.
✅ Claude가 제공
1. Docker 설정
Dockerfile
docker-compose.yml
.dockerignore
2. 최적화 적용
- 임베딩 캐시 (Redis)
- FAISS GPU 가속
- 비동기 처리
- 프롬프트 캐싱
3. 모니터링 대시보드
- Prometheus + Grafana
- 주요 메트릭 시각화
4. 배포 문서
# 배포 가이드
## 1. 서버 준비
sudo apt update
sudo apt install docker docker-compose
## 2. 환경 변수 설정
cp .env.example .env
# ANTHROPIC_API_KEY 설정
## 3. 빌드 및 실행
docker-compose up -d
## 4. 헬스체크
curl http://localhost:8000/health
💡 실전 팁
Tip 1: 단계별 검증
각 단계마다 검증:
"지금까지 만든 거 테스트해줘.
샘플 PDF 5개로 전체 파이프라인 실행해서
문제 없는지 확인해줘."
Tip 2: 점진적 개선
완벽하게 한번에 만들려 하지 말고:
Week 1: 기본 PDF 파싱 + 간단한 검색
Week 2: RAG 시스템 고도화
Week 3: UI/UX 개선
Week 4: 최적화 및 배포
Tip 3: 에러 공유
문제 발생 시:
"❌ 에러 발생:
[증상] 특정 PDF 파싱 시 멈춤
[파일] research_paper_23.pdf
[에러] TimeoutError after 5 minutes
[시도] PyMuPDF, pdfplumber 둘 다 같은 증상
어떻게 디버깅할 수 있을까?"
Tip 4: 성능 벤치마크
정기적으로 평가:
"RAG 시스템 성능을 평가해줘.
테스트 질문 20개로:
- 검색 정확도 (관련 문서 찾는 비율)
- 답변 정확도 (답이 맞는 비율)
- 응답 속도
- Hallucination 빈도
개선이 필요한 부분 제안해줘."
Tip 5: 문서화 요청
프로젝트 마무리:
"전체 시스템 문서를 만들어줘:
1. 아키텍처 설명
2. 각 컴포넌트 역할
3. API 레퍼런스
4. 사용자 가이드
5. 트러블슈팅 가이드
팀원들이 유지보수할 수 있게 상세하게."
🎓 Skill 활용 핵심 정리
✅ 해야 할 것 (DO)
-
구체적으로 요청
- "PDF 파싱해줘" ❌
- "학술 논문 PDF 50개를 파싱해서 섹션별로 분리하고 표도 추출해줘" ✅
-
단계별 진행
- 한번에 전체 시스템 요청 ❌
- 파싱 → 전처리 → 벡터DB → RAG → UI 순서로 ✅
-
중간 검증
- 끝까지 만들고 테스트 ❌
- 각 단계마다 샘플로 테스트 ✅
-
피드백 제공
- 결과만 받고 넘어가기 ❌
- "이 부분은 좋은데, 저 부분은 이렇게 바꿔줘" ✅
❌ 하지 말아야 할 것 (DON'T)
-
모호한 요청
- "좋은 RAG 시스템 만들어줘"
-
너무 많은 요구사항을 한번에
- 10가지 기능을 한 요청에 모두 포함
-
Skill 시스템 무시
- Claude가 자동으로 적용하는 skill을 방해
- 예: "PDF skill 쓰지 말고..."
-
테스트 없이 진행
- 각 단계 검증 없이 다음 단계로
📊 예상 타임라인
프로토타입 (1주):
- Day 1-2: PDF 파싱 + 기본 전처리
- Day 3-4: 벡터 DB + 간단한 검색
- Day 5: 기본 챗 UI
완성도 높이기 (2주):
- Week 2: RAG 정확도 개선, 고급 기능
- Week 3: UI/UX 개선, 최적화
배포 (1주):
- Week 4: Docker화, 문서화, 배포
🔗 다음 단계
이제 실제로 시작해볼까요?
첫 요청 예시:
안녕 Claude!
PDF 의학 논문으로 RAG 챗봇을 만들고 싶어.
첨부한 PDF 파일 3개를 먼저 분석해서
어떤 파싱 전략이 좋을지 제안해줘.
그리고 전체 프로젝트 로드맵도 만들어줘.
이렇게 시작하면 Claude가 PDF Skill을 자동으로 활용해서 최적의 방법을 제안해줄걸 아마도.. ㅎㅎ 해피 코딩~
댓글
댓글 쓰기