[V2] 벡터 디비 RAG 구조 설계 문서 - 100-hours-a-week/6-nemo-ai GitHub Wiki
💾 벡터 DB (Chroma) 기반 RAG 구조 설계 문서
✅ 목표
네모 프로젝트에 Chroma 기반 벡터 데이터베이스를 도입하여,
모임 정보를 저장하고, 사용자 질문에 유사한 모임을 검색하여
LLM이 context 기반 응답을 생성할 수 있도록 RAG 파이프라인을 구축합니다.
🗂️ 디렉토리 및 파일 구조
src/
├── vector_store/ # ✅ 새로 생성
│ ├── chroma_client.py # Chroma 연결 및 초기화
│ ├── embedder.py # 텍스트 → 벡터 임베딩
│ ├── document_builder.py # JSON 모임 → 문서(text + metadata)
│ ├── vector_indexer.py # 벡터 DB에 삽입 / 삭제
│ ├── vector_searcher.py # 질문 → Top-K 검색
│
├── services/
│ └── v1/
│ └── chat_service.py # 🛠️ 수정: RAG 검색 → LLM 응답 생성
│
├── router/
│ └── chat.py # 🛠️ 수정: 질문 → 응답 SSE or POST
│
├── core/
│ └── config.py # 🛠️ 수정: CHROMA_DB_PATH, EMBED_MODEL 설정
│
├── .env # 🛠️ 수정: 환경별 설정값 저장
🛠️ 작성/수정해야 할 파일 목록
파일 경로 | 설명 |
---|---|
vector_store/chroma_client.py |
Chroma DB 연결 및 생성, 경로 설정 처리 포함 |
vector_store/embedder.py |
embedding 모델 로딩 및 텍스트 → 벡터 함수 |
vector_store/document_builder.py |
JSON 모임 데이터 → 텍스트 및 메타데이터 구성 |
vector_store/vector_indexer.py |
문서 삽입, 삭제 등 DB 업데이트 기능 |
vector_store/vector_searcher.py |
질문 임베딩 후 Top-K 유사 chunk 검색 |
core/config.py |
.env 로부터 설정값 로딩 (CHROMA_DB_PATH , APP_ENV ) |
services/v1/chat_service.py |
벡터 검색 + LLM 통합 호출 구성 |
router/chat.py |
질문 요청 수신 및 응답 반환 라우터 구현 (SSE or POST) |
.env |
환경 변수 설정 파일 (APP_ENV , CHROMA_DB_PATH 등) |
🔁 전체 동작 흐름
1. 모임 정보 저장
모임 JSON
↓
document_builder.py
↓
embedder.py
↓
vector_indexer.py
↓
Chroma DB 저장
2. 사용자 질문 처리
사용자 질문
↓
embedder.py (질문 벡터화)
↓
vector_searcher.py (Top-K 검색)
↓
chat_service.py (LLM 호출 + 응답 생성)
↓
chat.py (응답 반환)
🌐 .env 예시
APP_ENV=development
CHROMA_DB_PATH=./data_dev/chroma
EMBED_MODEL_NAME=bge-small-en
❓ 자주 묻는 질문
.gitignore
로 무시되는 로컬 DB는 사용 가능한가요?
Q1. ✅ 네, Git에는 포함되지 않지만 코드에서 정상적으로 접근, 저장, 검색이 가능합니다.
Q2. Chroma DB는 서버 재시작 시 초기화되나요?
❌ 아니요. reset()
을 직접 호출하지 않는 이상 기존 DB는 유지됩니다.
Q3. 환경별 경로 분리가 왜 필요한가요?
- 개발 중 데이터 오염 방지
- 테스트/배포 시 충돌 방지
- 실험 및 디버깅에 유리
✅ 결론
- Chroma 벡터 DB를 모듈화하여 구현하면 RAG 파이프라인이 체계적으로 구성됨
- 환경별 설정을
.env
+config.py
로 분리하면 유지보수에 유리함 - 구조 분리로 향후 확장 (예: 추천 기능, 유사도 분석)도 쉬움