rag-dev
인덱싱, 검색, 재순위화, 평가까지 포함한 RAG 개발 환경입니다.
문서 기준
- 기준일:
2026-02-23
- Python:
3.12
- 운영체제: macOS, Ubuntu, Windows
- 동기화 명령:
uv sync
호환성 메모
| 환경 | faiss-cpu | 벡터 DB 클라이언트 | 설명 |
|---|
| Ubuntu / macOS | 설치됨 | 전체 사용 가능 | 로컬 FAISS + 외부 DB 모두 지원 |
| Windows | 제외됨 | 전체 사용 가능 | FAISS 대신 ChromaDB 또는 외부 DB 사용 |
faiss-cpu는 Windows에서 빌드 이슈가 있어 환경 마커로 제외됩니다. Windows 사용자는 ChromaDB, Qdrant, Milvus 등 다른 벡터 스토어를 사용하세요.
RAG 파이프라인에서 패키지 역할
| 패키지 | 파이프라인 단계 | 역할 |
|---|
langchain / langchain-community | 전체 오케스트레이션 | 문서 로더, 체인, 프롬프트 구성 |
langchain-openai | 생성(Generation) | OpenAI LLM/임베딩 연동 |
sentence-transformers | 임베딩(Embedding) | 로컬 임베딩 모델 (HuggingFace 기반) |
tiktoken | 청킹(Chunking) | 토큰 기반 텍스트 분할 |
chromadb | 벡터 저장/검색 | 경량 로컬 벡터 DB |
faiss-cpu | 벡터 저장/검색 | 대규모 유사도 검색 (Meta) |
qdrant-client | 벡터 저장/검색 | Qdrant 서버 연동 클라이언트 |
pymilvus / milvus-lite | 벡터 저장/검색 | Milvus 연동 (lite: 로컬 임베디드 모드) |
rank-bm25 | 검색(Retrieval) | 키워드 기반 BM25 재순위화 |
ragas | 평가(Evaluation) | RAG 품질 평가 (faithfulness, relevancy 등) |
pyproject.toml
[project]
name = "rag-dev"
version = "0.1.0"
description = "RAG development environment"
requires-python = "==3.12.*"
dependencies = [
"torch==2.10.0",
"torchvision==0.25.0",
"torchaudio==2.10.0",
"langchain==1.2.10",
"langchain-community==0.4.1",
"langchain-openai==1.1.10",
"sentence-transformers==5.2.3",
"chromadb==1.5.1",
"faiss-cpu==1.13.2; platform_system != 'Windows'",
"qdrant-client==1.17.0",
"pymilvus==2.6.9",
"milvus-lite==2.5.1",
"rank-bm25==0.2.2",
"ragas==0.4.3",
"tiktoken==0.12.0",
"openai==2.21.0",
"ipykernel==7.2.0",
"pytest==9.0.2",
"ruff==0.15.2",
]
[tool.uv]
package = false
프로젝트 생성
uv init rag-dev
cd rag-dev
Jupyter 커널 등록
uv run python -m ipykernel install --user --name rag-dev --display-name "UV rag-dev"
설치 확인
모든 OS 공통 확인:
uv run python -c "import torch, langchain, chromadb, ragas; print('torch', torch.__version__); print('langchain', langchain.__version__); print('chromadb', chromadb.__version__); print('ragas', ragas.__version__)"
macOS/Ubuntu에서 faiss 확인:
uv run python -c "import faiss; print('faiss', faiss.__version__)"
기본 사용 예시
문서 로드부터 벡터 검색, 답변 생성까지의 기본 RAG 파이프라인입니다.
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 1) 문서 로드
loader = TextLoader("docs/guide.txt")
documents = loader.load()
# 2) 청킹
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)
# 3) 임베딩 + 벡터 저장
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
# 4) 검색 + 생성
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
# 5) 질의
result = qa_chain.invoke({"query": "프로젝트 설치 방법을 알려주세요."})
print(result["result"])
OPENAI_API_KEY 환경변수를 설정해야 OpenAI 임베딩과 LLM을 사용할 수 있습니다. 로컬 임베딩만 사용하려면 sentence-transformers로 대체하세요.
트러블슈팅
| 증상 | 원인 | 해결 |
|---|
Windows에서 faiss-cpu 미설치 | 환경 마커로 의도적 제외 | ChromaDB 또는 Qdrant 사용 |
| Qdrant 연결 실패 | QDRANT_URL 미설정 또는 서버 미실행 | 환경변수 확인, docker run qdrant/qdrant |
| Milvus 연결 실패 | Milvus 서버 미실행 | milvus-lite 로컬 모드 사용 또는 서버 시작 |
chromadb 초기화 느림 | 최초 컬렉션 생성 시 인덱스 빌드 | 정상 동작, 두 번째 실행부터 빨라짐 |
tiktoken 인코딩 오류 | 네트워크 차단으로 토크나이저 다운로드 실패 | 오프라인 캐시 설정 또는 네트워크 확인 |
| RAGAS 평가 시 API 오류 | OpenAI API 키 미설정 또는 할당량 초과 | OPENAI_API_KEY 확인, 사용량 점검 |