Open WebUI RAG 시스템 구조 설명
Open WebUI의 RAG(Retrieval-Augmented Generation) 시스템은 /backend/open_webui/retrieval/ 디렉토리에 구현되어 있으며, 4개의 주요 컴포넌트로 구성됩니다:
1. Vector (벡터 데이터베이스)
경로: retrieval/vector/
지원하는 벡터 DB (11종):
- Chroma (기본값)
- Qdrant
- Milvus
- Pinecone
- OpenSearch
- PgVector (PostgreSQL)
- OpenGauss
- Elasticsearch
- Oracle23ai
- Weaviate
- S3Vector
주요 기능:
- 벡터 삽입/업데이트/삭제
- 유사도 검색 (similarity search)
- 메타데이터 필터링
- Collection 관리
2. Loaders (문서 로더)
경로: retrieval/loaders/
지원 형식:
- YouTube: 비디오 자막 추출
- Tavily: 웹 검색 엔진 통합
- External Web: 일반 웹페이지
- External Document: 외부 문서
- Mistral: Mistral AI 통합
- Datalab Marker: 문서 마커
- MinerU: 문서 처리
3. Web (웹 검색)
경로: retrieval/web/
지원 검색 엔진:
- Google PSE, Bing, DuckDuckGo
- Brave, Kagi, Perplexity
- SearXNG, YaCy, Mojeek
- Serper, SerpAPI, SearchAPI
- Tavily, Jina Search
- Azure Search, Ollama Search
- 외부 API
4. Models (재순위 모델)
경로: retrieval/models/
- ColBERT: 컨텍스트 기반 재순위
- Base Reranker: 기본 재순위 모델
- External: 외부 재순위 API
핵심 기능 (utils.py)
Embedding 생성:
- OpenAI/Azure OpenAI embeddings
- Ollama embeddings
- Sentence Transformers (로컬)
- 배치 처리 및 비동기 지원
검색 방식:
-
Vector Search: 임베딩 기반 유사도 검색
-
Hybrid Search: BM25 + Vector Search 결합
- BM25: 키워드 기반 검색
- Weight 조정 가능 (하이브리드 밸런스)
-
Enriched Texts: 메타데이터 강화 검색
Reranking (재순위):
- 검색 결과를 쿼리와의 관련성으로 재정렬
- Score threshold 설정 가능
- Top-K 결과 선택
데이터 소스:
- 파일 (PDF, DOCX 등)
- 웹 URL
- YouTube 비디오
- 채팅 이력
- 노트
- Knowledge Base (컬렉션)
RAG 워크플로우
1. 문서 업로드/URL 입력
↓
2. Loader로 텍스트 추출
↓
3. 청크 분할 (Chunking)
↓
4. Embedding 생성
↓
5. Vector DB에 저장
↓
6. 사용자 쿼리 → Embedding
↓
7. Vector/Hybrid Search
↓
8. Reranking (선택적)
↓
9. 상위 K개 결과 반환
↓
10. LLM에 컨텍스트로 전달