본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 18. 00:06

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- 실험 및 학습을 위한 용도로 제공됩니다.

Next.js UI

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

Streamlit UI

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/uploadPDF를 업로드하고 처리합니다
GET/api/v1/pdfs업로드된 모든 PDF 목록을 나열합니다
DELETE/api/v1/pdfs/{pdf_id}PDF를 삭제합니다
POST/api/v1/queryRAG를 사용하여 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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0