Nimbus, modern web teknolojileri ve yapay zeka kullanılarak geliştirilmiş, Dropbox benzeri bir bulut depolama platformudur. RAG (Retrieval-Augmented Generation) teknolojisi ile dokümanlarınızı yükleyip, içeriklerine doğal dil ile sorular sorabilirsiniz.
- Google OAuth 2.0 Kimlik Doğrulama: Güvenli ve kolay giriş sistemi
- JWT Token Yönetimi: Stateless authentication
- MongoDB Veritabanı: Kullanıcı ve dosya bilgileri için NoSQL veritabanı
- MinIO Object Storage: Dosya depolama için S3 uyumlu object storage
- Güvenlik Taramalı Dosya Yönetimi: Tehlikeli dosya türleri ve boyut kontrolleri
- Çoklu Dil Desteği (i18n): Türkçe ve İngilizce dil seçenekleri
- Toast Bildirim Sistemi: Modern kullanıcı geri bildirimi
- Modern UI Tasarımı: Material-UI ve Framer Motion animasyonları
- Responsive Tasarım: Mobil ve desktop uyumlu arayüz
- RESTful API: Temiz ve ölçeklenebilir API tasarımı
- RAG (Retrieval-Augmented Generation): Dokümanlarınıza doğal dil ile sorular sorun
- Semantic Search: Embedding model ile anlamsal benzerlik araması
- Hybrid Search: Semantic + Keyword arama kombinasyonu
- Intent Classification: Sorgu niyetini otomatik algılama (karşılaştırma, tanım, özet vb.)
- Adaptive Retrieval: Sorgu tipine göre dinamik top-k seçimi
- Document Processing: PDF ve DOCX dosyalarını otomatik işleme ve chunk'lara ayırma
- Table Extraction: Dokümanlardaki karşılaştırma tablolarını otomatik tespit
- Conversation History: Dosya bazlı sohbet geçmişi yönetimi
- Go: Yüksek performanslı backend dili
- Fiber: Express.js benzeri hızlı web framework
- MongoDB: NoSQL veritabanı
- JWT: Token tabanlı kimlik doğrulama
- Ollama: LLM ve embedding model servisi
- ChromaDB: Vektör veritabanı (HNSW algoritması ile ANN araması)
- MinIO: S3 uyumlu object storage
- React: Modern kullanıcı arayüzü kütüphanesi
- Vite: Hızlı geliştirme ve build aracı
- Tailwind CSS: Utility-first CSS framework
- Embedding Models: Vektör temsilleri için (örn: all-minilm:l6-v2)
- LLM Models: Metin üretimi için (örn: llama3:8b)
- HNSW (Hierarchical Navigable Small World): Yaklaşık en yakın komşu (ANN) araması
- Cosine Similarity: Vektör benzerlik hesaplama
- Reciprocal Rank Fusion (RRF): Hybrid search sonuç birleştirme
nimbus/
├── backend/ # Go Fiber backend
│ ├── config/ # Konfigürasyon yönetimi
│ ├── database/ # Veritabanı bağlantıları
│ ├── handlers/ # HTTP request handlers
│ │ ├── ai.go # RAG ve AI sorgu handler'ları
│ │ └── files.go # Dosya yönetim handler'ları
│ ├── middleware/ # JWT ve diğer middleware'ler
│ ├── models/ # Veri modelleri
│ ├── routes/ # API route tanımları
│ ├── services/ # İş mantığı servisleri
│ │ ├── chroma_service.go # ChromaDB vektör arama servisi
│ │ ├── ollama_service.go # LLM ve embedding servisi
│ │ └── document_processor.go # Doküman işleme pipeline'ı
│ ├── retrieval/ # RAG retrieval bileşenleri
│ │ ├── file_router.go # In-memory dosya bazlı arama
│ │ ├── intent_classifier.go # Sorgu niyet analizi
│ │ ├── query_utils.go # Sorgu yardımcı fonksiyonları
│ │ └── adaptive.go # Adaptif top-k retrieval
│ ├── chunks/ # Metin chunking ve işleme
│ │ ├── semantic_splitter.go # Semantic chunking
│ │ ├── table_processor.go # Tablo tespit ve işleme
│ │ └── normalizer.go # Metin normalizasyonu
│ └── cache/ # Cache mekanizmaları
│ └── query_cache.go # Semantic query cache
├── frontend/ # React Vite frontend
│ ├── src/
│ │ ├── components/ # React bileşenleri
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API servisleri
│ │ └── pages/ # Sayfa bileşenleri
└── README.md
- Go 1.19+
- Node.js 20+
- MongoDB
- MinIO (dosya depolama için)
- Ollama (AI model servisi için)
- ChromaDB (vektör veritabanı için)
cd backend
# Bağımlılıkları yükle
go mod tidy
# Environment variables (.env dosyası oluşturun)
cp .env.example .env
# .env dosyasını düzenleyin
# Sunucuyu başlat
go run main.goBackend http://localhost:8080 adresinde çalışacak.
cd frontend
# Bağımlılıkları yükle
npm install
# Environment variables (.env dosyası oluşturun)
echo "VITE_API_URL=http://localhost:8080/api/v1" > .env
# Geliştirme sunucusunu başlat
npm run devFrontend http://localhost:5173 adresinde çalışacak.
- Google Cloud Console gidin
- Yeni proje oluşturun veya mevcut projeyi seçin
- APIs & Services > Credentials bölümüne gidin
- OAuth 2.0 Client IDs oluşturun
- Application type: Web application seçin
- Authorized redirect URIs'e şunu ekleyin:
http://localhost:8080/auth/google/callback - Client ID ve Client Secret'i backend
.envdosyasına ekleyin:GOOGLE_CLIENT_ID=your-client-id GOOGLE_CLIENT_SECRET=your-client-secret
# Server Configuration
PORT=8080
# Database Configuration
MONGO_URI=mongodb://localhost:27017
MONGO_DB=nimbus
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-here
# Google OAuth Configuration
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URL=http://localhost:8080/auth/google/callback
# Frontend Configuration
FRONTEND_URL=http://localhost:5173
# MinIO Object Storage
MINIO_ENDPOINT=localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_USE_SSL=false
# Ollama AI Service
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_EMBED_MODEL=all-minilm:l6-v2
OLLAMA_LLM_MODEL=llama3:8b
# ChromaDB Vector Database
CHROMA_BASE_URL=http://localhost:6006
CHROMA_TENANT=default_tenant
CHROMA_DATABASE=default_database
CHROMA_COLLECTION=nimbus_documents
# RAG Optimization Flags
ENABLE_QUERY_CACHE=true
ENABLE_CHUNK_CACHE=true
ENABLE_ADAPTIVE=true
ENABLE_FILE_ROUTING=true
ENABLE_DEDUPLICATION=false
# Cache Settings
QUERY_CACHE_TTL=60
CHUNK_CACHE_SIZE=1000
# RAG Thresholds
HIGH_SIMIL_THRESHOLD=0.85
MED_SIMIL_THRESHOLD=0.70
MIN_SIMIL_THRESHOLD=0.50
CONTEXT_WINDOW_SIZE=4096
MAX_RAG_CHUNKS=10VITE_API_URL=http://localhost:8080/api/v1- Backend ve frontend sunucularını başlatın
- Tarayıcıda
http://localhost:5173adresine gidin - "Google ile Giriş Yap" butonuna tıklayın
- Google hesabınızla giriş yapın
- Dashboard'a yönlendirileceksiniz
-
Dosya Yükleme:
- Dashboard'daki "Dosya Yükleme" alanını kullanın
- Sürükle-bırak veya tıklayarak dosya seçin
- Desteklenen türler: Resimler, PDF, Word, Excel, PPT, TXT, ZIP
- PDF ve DOCX dosyaları otomatik olarak işlenir ve RAG için hazırlanır
-
Dosya Listesi:
- "Dosyalarım" bölümünden yüklediğiniz dosyaları görün
- Her dosyanın boyutu, türü ve işleme durumu gösterilir
- İndirme butonu ile dosyaları indirebilirsiniz
-
AI ile Doküman Sorgulama:
- İşlenmiş PDF/DOCX dosyalarınıza doğal dil ile sorular sorun
- Örnek sorular:
- "Bu dokümanda X nedir?"
- "X ve Y'yi karşılaştır"
- "Dokümanın özetini ver"
- "X'in özellikleri nelerdir?"
- Sistem sorgu niyetini otomatik algılar ve uygun arama stratejisini kullanır
- JWT token'ları httpOnly cookie'lerde saklanır
- OAuth state parametresi CSRF saldırılarını önler
- CORS konfigürasyonu sadece güvenilir origin'lere izin verir
- Input validation ve sanitization uygulanır
- Dosya Türü Kontrolü: Sadece güvenli dosya türleri kabul edilir (resimler, PDF, Word, Excel, PPT, TXT, ZIP)
- Boyut Limiti: Maksimum 100MB dosya boyutu
- Uzantı Engelleme: Tehlikeli dosya uzantıları (.exe, .bat, .js, .php vs.) otomatik engellenir
- MIME Type Doğrulama: İçerik türü doğrulaması
- User-Based Storage: Her kullanıcının kendi klasörü (
user-{user_id}/) - Presigned URL'ler: Güvenli ve zaman sınırlı erişim
- CORS konfigürasyonu sadece güvenilir origin'lere izin verir
- Input validation ve sanitization uygulanır
Nimbus, büyük vektör koleksiyonları üzerinde yüksek performanslı arama için HNSW (Hierarchical Navigable Small World) algoritması kullanmaktadır. ChromaDB varsayılan olarak HNSW ile ANN araması gerçekleştirir.
-
Semantic Search (Anlamsal Arama)
- Kullanıcı sorguları embedding model ile vektör temsillerine dönüştürülür
- ChromaDB üzerinde cosine similarity ile en benzer chunk'lar bulunur
- HNSW algoritması ile yaklaşık en yakın komşu (ANN) araması yapılır
-
Keyword Search (Kelime Eşleşmesi)
- Sorgudan çıkarılan anahtar kelimeler chunk metinlerinde aranır
- Metadata'daki
key_termsalanında da arama yapılır - Özellikle karşılaştırma ve tanım sorguları için kullanılır
-
Hybrid Search (Karma Arama)
- Semantic ve keyword arama sonuçları birleştirilir
- Reciprocal Rank Fusion (RRF) algoritması ile sonuçlar merge edilir
- Karşılaştırma ve tanım sorguları için otomatik aktif olur
- File Router: Sık kullanılan dosyalar için in-memory index
- Query Cache: Benzer sorgular için semantic cache
- Chunk Cache: Popüler chunk'lar için embedding cache
- Adaptive Top-K: Sorgu tipine göre dinamik chunk sayısı seçimi
- Metin Çıkarma: PDF/DOCX dosyalarından metin çıkarılır
- Normalizasyon: Metin temizlenir ve normalize edilir
- Tablo Tespiti: Karşılaştırma tabloları otomatik tespit edilir
- Semantic Chunking: Metin anlamsal olarak chunk'lara ayrılır
- Embedding Üretimi: Her chunk için embedding vektörü oluşturulur
- Vektör Depolama: Embedding'ler ChromaDB'ye kaydedilir
# Ollama'yı indirin ve başlatın
# macOS/Linux:
curl -fsSL https://ollama.ai/install.sh | sh
# Windows: https://ollama.ai/download adresinden indirin
# Gerekli modelleri yükleyin
ollama pull all-minilm:l6-v2 # Embedding model
ollama pull llama3:8b # LLM model# Docker ile ChromaDB başlatın
docker run -d \
-p 6006:8000 \
--name chromadb \
chromadb/chroma:latestChromaDB http://localhost:6006 adresinde çalışacak.