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

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors