Skip to content

eeseol/mini-rag-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Mini RAG Project

NestJS Version Python Version FastAPI Version ChromaDB

📖 Description

Mini RAG Project는 RAG(Retrieval-Augmented Generation) 시스템의 간소화된 구현체입니다. NestJS와 Python을 활용하여 기본적인 RAG 기능을 구현했습니다.

이 프로젝트는 다음과 같은 기능을 제공합니다:

  • 텍스트 파일 업로드 및 처리
  • 문단 단위 텍스트 분할
  • Sentence Transformers를 활용한 임베딩 생성
  • ChromaDB를 통한 벡터 저장 및 검색
  • OpenAI GPT를 활용한 질의응답

🏗️ Architecture

┌─────────────┐    HTTP Request    ┌─────────────┐    HTTP Request    ┌─────────────┐
│   Client    │ ──────────────────► │  NestJS API │ ──────────────────► │ Python AI   │
│ (Postman)   │                    │  Gateway    │                    │  Service    │
└─────────────┘                    └─────────────┘                    └─────────────┘
                                              │                              │
                                              ▼                              ▼
                                       File Upload                    Text Processing
                                       Validation                    (Chunking, Embedding)
                                                                              │
                                                                              ▼
                                                                       ┌─────────────┐
                                                                       │ ChromaDB    │
                                                                       │ (Vector DB) │
                                                                       └─────────────┘

📁 Project Structure

mini-rag-project/
├── README.md                    # 이 파일
├── .gitignore                   # 통합된 Git 무시 파일
├── mini-rag/                    # NestJS API Gateway
│   ├── src/
│   │   ├── ingest/
│   │   │   ├── ingest.controller.ts    # 파일 업로드 API
│   │   │   ├── ingest.service.ts       # Python 서버 통신
│   │   │   └── ingest.module.ts        # 모듈 설정
│   │   └── app.module.ts               # 루트 모듈
│   ├── package.json
│   └── .env (필요시 생성)
└── mini-rag-ai-service/         # Python AI Service
    ├── main.py                  # FastAPI 애플리케이션
    ├── requirements.txt         # Python 의존성
    ├── .env                     # OpenAI API 키
    ├── venv/                    # Python 가상환경
    └── chroma_db/               # ChromaDB 데이터 저장소

🚀 Quick Start

Prerequisites

  • Node.js (v18+)
  • Python (3.9+)
  • OpenAI API Key

1. Repository Clone

git clone <repository-url>
cd mini-rag-project

2. Python AI Service 설정

# Python AI Service 디렉토리로 이동
cd mini-rag-ai-service

# 가상환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate  # Mac/Linux
# venv\Scripts\activate   # Windows

# 의존성 설치
pip install -r requirements.txt

# 환경 변수 설정
echo 'OPENAI_API_KEY="your-openai-api-key-here"' > .env

# AI 서비스 실행
uvicorn main:app --reload

AI 서비스는 http://localhost:8000에서 실행됩니다.

3. NestJS API Gateway 설정

# 새 터미널에서 NestJS 서비스 디렉토리로 이동
cd mini-rag

# 의존성 설치
npm install

# 환경 변수 설정 (선택사항)
echo 'PYTHON_SERVICE_URL=http://localhost:8000' > .env

# API Gateway 실행
npm run start:dev

API Gateway는 http://localhost:3000에서 실행됩니다.

📡 API Endpoints

NestJS API Gateway (http://localhost:3000)

POST /ingest/upload

파일을 업로드하여 AI 서비스로 전송합니다.

Request:

  • Content-Type: multipart/form-data
  • Body: file (텍스트 파일)

Response:

{
  "message": "Successfully processed and stored 3 chunks from sample.txt.",
  "chunkCount": 3
}

Python AI Service (http://localhost:8000)

POST /process-and-store

텍스트를 받아서 청킹, 임베딩, 벡터 DB 저장을 수행합니다.

Request:

{
  "text": "업로드된 텍스트 내용...",
  "filename": "sample.txt"
}

POST /chat

사용자 질문을 받아서 관련 문서를 검색하고 답변을 생성합니다.

Request:

{
  "query": "RAG 시스템이 무엇인가요?"
}

Response:

{
  "answer": "RAG 시스템에 대한 답변...",
  "retrieved_documents": [
    "관련 문서 조각 1",
    "관련 문서 조각 2",
    "관련 문서 조각 3"
  ]
}

🔧 Configuration

환경 변수

Python AI Service (.env)

OPENAI_API_KEY=sk-your-openai-api-key-here

NestJS API Gateway (.env)

PYTHON_SERVICE_URL=http://localhost:8000

기술 스택

NestJS API Gateway

  • Framework: NestJS 10.0+
  • HTTP Client: Axios
  • File Upload: Multer
  • Port: 3000

Python AI Service

  • Framework: FastAPI 0.100+
  • Vector DB: ChromaDB
  • Embedding Model: all-MiniLM-L6-v2 (384차원)
  • LLM: OpenAI GPT-3.5-turbo
  • Port: 8000

🧪 Testing

1. 파일 업로드 테스트

Postman이나 curl을 사용하여 파일 업로드를 테스트할 수 있습니다:

curl -X POST http://localhost:3000/ingest/upload \
  -F "file=@sample.txt"

2. 질의응답 테스트

curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -d '{"query": "업로드된 문서에 대해 질문하기"}'

3. API 문서 확인

  • NestJS API: http://localhost:3000 (기본 NestJS 문서)
  • Python AI Service: http://localhost:8000/docs (Swagger UI)

📊 Data Flow

  1. 파일 업로드: 클라이언트가 NestJS API Gateway로 텍스트 파일 업로드
  2. 텍스트 전송: NestJS가 파일 내용을 Python AI Service로 전송
  3. 텍스트 분할: Python 서비스가 문단 단위로 텍스트 분할
  4. 임베딩 생성: 각 청크를 384차원 벡터로 변환
  5. 벡터 저장: ChromaDB에 벡터와 원본 텍스트 저장
  6. 질의 처리: 사용자 질문에 대해 관련 문서 검색 및 답변 생성

🔍 Development

로컬 개발 환경

# Python AI Service 개발 모드
cd mini-rag-ai-service
source venv/bin/activate
uvicorn main:app --reload

# NestJS API Gateway 개발 모드 (새 터미널)
cd mini-rag
npm run start:dev

디버깅

  • Python 서비스: FastAPI의 자동 문서화 기능 활용 (/docs)
  • NestJS 서비스: NestJS 로깅 및 개발 모드 활용

📝 Notes

  • 이 프로젝트는 학습 목적으로 제작되었으며, 실제 프로덕션 환경에서는 추가적인 보안 및 성능 최적화가 필요합니다.
  • 현재 구현은 단순한 문단 단위 분할을 사용합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •