ollama_pdf_rag
요약
Ollama와 LangChain을 활용하여 PDF 문서와 대화할 수 있는 100% 로컬 RAG 애플리케이션 구축 가이드를 제공합니다. Next.js와 Streamlit 인터페이스, FastAPI 백엔드를 포함하며 데이터 유출 걱정 없는 보안 중심의 개발 환경을 지원합니다.
핵심 포인트
- Ollama를 이용한 100% 로컬 환경의 데이터 보안 보장
- LangChain과 ChromaDB 기반의 고급 RAG 파이프라인 구현
- Next.js 및 Streamlit을 활용한 다양한 사용자 인터페이스 제공
- 멀티 PDF 지원 및 출처 인용 기능을 갖춘 지능형 검색
Ollama와 LangChain을 사용하여 PDF 문서와 채팅할 수 있는 강력한 로컬 RAG (Retrieval Augmented Generation, 검색 증강 생성) 애플리케이션입니다. 이 프로젝트는 현대적인 Next.js 웹 앱, Streamlit 인터페이스, 그리고 실험을 위한 Jupyter Notebook 등 다양한 인터페이스를 포함하고 있습니다.
- 🔒
100% 로컬 (Local)- 모든 프로세싱은 사용자의 기기에서 수행되며, 데이터가 외부로 유출되지 않습니다. - 📄
멀티 PDF 지원 (Multi-PDF Support)- 여러 문서에 걸쳐 업로드 및 질의가 가능합니다. - 🧠
멀티 쿼리 RAG (Multi-Query RAG)- 출처 인용을 포함한 지능형 검색을 제공합니다. - 🎯
고급 RAG (Advanced RAG)- ChromaDB를 활용한 LangChain 기반 파이프라인을 제공합니다. - 🖥️
두 가지 현대적인 UI- Next.js (기본) 및 Streamlit 인터페이스를 제공합니다. - 🔌
REST API- 프로그래밍 방식의 접근을 위한 FastAPI 백엔드를 제공합니다. - 📓
Jupyter Notebooks- 실험 및 학습을 위한 용도로 제공됩니다.

PDF 관리, 출처 인용 및 추론 단계를 갖춘 현대적인 채팅 인터페이스

PDF 뷰어와 채팅 기능을 갖춘 클래식한 Streamlit 인터페이스
ollama_pdf_rag/
├── src/
│ ├── api/ # FastAPI REST API
...
Ollama 설치- Ollama 웹사이트를 방문하여 다운로드 및 설치하세요.
-
필요한 모델을 가져오기(Pull):
ollama pull llama3.2 # 또는 선호하는 채팅 모델
ollama pull nomic-embed-text # 임베딩(embeddings)용
저장소 복제 (Clone Repository)
git clone https://github.com/tonykipkemboi/ollama_pdf_rag.git cd ollama_pdf_rag
Python 환경 설정
python -m venv venv
source venv/bin/activate # Windows의 경우: .\venv\Scripts\activate
pip install -r requirements.txt
Next.js 프론트엔드 설정
(현대적인 UI를 위해)
cd web-ui
pnpm install
pnpm db:migrate
cd ..
두 서비스 모두 시작하기:
# 터미널 1: FastAPI 백엔드 시작
python run_api.py
# http://localhost:8001 에서 실행됩니다
...
또는 편의 스크립트를 사용하세요:
./start_all.sh
서비스 URL:
| 서비스 | URL | 설명 |
|---|---|---|
| Next.js 프론트엔드 | http://localhost:3000 | 현대적인 채팅 인터페이스 |
| ... |
python run.py
# http://localhost:8501 에서 실행됩니다
jupyter notebook
코드를 실험하려면 notebooks/experiments/updated_rag_notebook.ipynb를 여세요.
PDF 업로드
- 📎 버튼을 클릭하거나 파일을 드래그 앤 드롭하세요
PDF 보기 - 업로드된 PDF가 청크 (chunk) 개수와 함께 사이드바에 나타납니다
모델 선택 - 로컬에서 사용 가능한 Ollama 모델 중 하나를 선택하세요
질문하기 - 질문을 입력하면 출처 인용과 함께 답변을 받습니다
추론 과정 보기 - AI의 사고 과정과 검색된 청크 (chunks)를 확인하세요
PDF 업로드
- 파일 업로더를 사용하거나 "샘플 PDF 사용"을 토글하세요
모델 선택 - 사용 가능한 Ollama 모델 중 하나를 선택하세요
질문하기 - 인터페이스를 통해 PDF와 채팅하세요
디스플레이 조정 - 확대/축소 슬라이더를 사용하여 PDF 가시성을 조절하세요
정리하기 - 문서를 전환할 때 컬렉션 (collections)을 삭제하세요
FastAPI 백엔드는 다음 엔드포인트 (endpoints)를 제공합니다:
| 메서드 (Method) | 엔드포인트 (Endpoint) | 설명 |
|---|---|---|
POST | /api/v1/pdfs/upload | PDF를 업로드하고 처리합니다 |
GET | /api/v1/pdfs | 업로드된 모든 PDF 목록을 나열합니다 |
DELETE | /api/v1/pdfs/{pdf_id} | PDF를 삭제합니다 |
POST | /api/v1/query | RAG를 사용하여 PDF에 질의합니다 |
GET | /api/v1/models | 사용 가능한 Ollama 모델 목록을 나열합니다 |
GET | /api/v1/health | 상태 확인 (Health check) |
실행 중일 때 http://localhost:8001/docs 에서 전체 문서를 확인하세요.
# 모든 테스트 실행
python -m pytest tests/ -v
# 커버리지 (coverage)와 함께 실행
...
pip install pre-commit
pre-commit install
Ollama가 응답하지 않음: Ollama가 실행 중인지 확인하세요 (ollama serve)
모델을 찾을 수 없음: ollama pull <model-name> 명령어로 모델을 가져오세요
청크 (chunks)가 검색되지 않음: 벡터 데이터베이스 (vector database)를 재구축하기 위해 PDF를 다시 업로드하세요
포트 충돌 (Port conflicts): 3000, 8001 또는 8501 포트가 사용 중인지 확인하세요
DLL load failed while importing onnx_copy2py_export
Microsoft Visual C++ Redistributable을 설치하고 재시작하세요.
메모리 문제가 발생하는 경우 청크 크기 (chunk size)를 줄이세요:
-
src/core/document.py에서chunk_size를 500-1000으로 수정하세요 -
버그나 제안 사항은 이슈 (issues)를 열어주세요
-
풀 리퀘스트 (pull requests)를 제출해 주세요
-
질문은 YouTube 영상에 댓글을 남겨주세요
-
⭐ 유용하다고 생각되면 저장소 (repository)에 스타 (Star)를 눌러주세요!
이 프로젝트는 오픈 소스이며 MIT 라이선스 하에 제공됩니다.
Built with ❤️ by Tony Kipkemboi
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기