Yapılandırma Yöntemleri

SmartRAG iki yapılandırma yöntemi sunar:

Hızlı Kurulum (Önerilen)

Program.cs veya Startup.cs dosyanızda SmartRAG'i yapılandırın:

using SmartRAG.Extensions;
using SmartRAG.Enums;

var builder = WebApplication.CreateBuilder(args);

// Tek satırda basit yapılandırma
builder.Services.UseSmartRag(builder.Configuration,
    storageProvider: StorageProvider.InMemory,  // In-memory ile başlayın
    aiProvider: AIProvider.Gemini,              // AI sağlayıcınızı seçin
    defaultLanguage: "tr"                        // Opsiyonel: Doküman işleme için varsayılan dil
);

var app = builder.Build();
app.Run();

Gelişmiş Kurulum

using SmartRAG.Extensions;
using SmartRAG.Enums;

var builder = WebApplication.CreateBuilder(args);

// Seçeneklerle gelişmiş yapılandırma
builder.Services.AddSmartRag(builder.Configuration, options =>
{
    // AI Sağlayıcı
    options.AIProvider = AIProvider.OpenAI;
    
    // Depolama Sağlayıcı
    options.StorageProvider = StorageProvider.Qdrant;
    
    // Parçalama Yapılandırması
    options.MaxChunkSize = 1000;
    options.MinChunkSize = 100;
    options.ChunkOverlap = 200;
    
    // Yeniden Deneme Yapılandırması
    options.MaxRetryAttempts = 3;
    options.RetryDelayMs = 1000;
    options.RetryPolicy = RetryPolicy.ExponentialBackoff;
    
    // Yedek Sağlayıcılar
    options.EnableFallbackProviders = true;
    options.FallbackProviders = new List<AIProvider> 
    { 
        AIProvider.Anthropic, 
        AIProvider.Gemini 
    };
    
    // Varsayılan Dil
    options.DefaultLanguage = "tr";  // Opsiyonel: Doküman işleme için varsayılan dil
});

var app = builder.Build();
app.Run();

SmartRagOptions - Temel Seçenekler

SmartRagOptions’da mevcut temel yapılandırma seçenekleri:

Seçenek Tip Varsayılan Açıklama
AIProvider AIProvider OpenAI Embedding'ler ve metin üretimi için AI sağlayıcı
StorageProvider StorageProvider InMemory Dokümanlar ve vektörler için depolama backend'i
ConversationStorageProvider ConversationStorageProvider? null Konuşma geçmişi için ayrı depolama (isteğe bağlı)
EnableAutoSchemaAnalysis bool true Başlangıçta veritabanı şemalarını otomatik olarak analiz et
DefaultLanguage string? null Doküman işleme için varsayılan dil kodu (ISO 639-1 formatı, örn. "tr", "en", "de"). WatchedFolderConfig veya doküman yüklemede dil belirtilmediğinde kullanılır.

ConversationStorageProvider

Konuşma geçmişi için doküman depolamasından bağımsız ayrı depolama konfigürasyonu:

builder.Services.AddSmartRag(configuration, options =>
{
    options.AIProvider = AIProvider.OpenAI;
    options.StorageProvider = StorageProvider.Qdrant;  // Dokümanlar için
    options.ConversationStorageProvider = ConversationStorageProvider.Redis;  // Konuşmalar için
});

Mevcut Seçenekler

Seçenek Açıklama
Redis Konuşmaları Redis’te sakla (yüksek performans önbellek)
SQLite Konuşmaları SQLite veritabanında sakla (gömülü, hafif)
FileSystem Konuşmaları dosya sisteminde sakla (basit, kalıcı)
InMemory Konuşmaları RAM’de sakla (kalıcı değil, sadece geliştirme)

Konfigürasyon Örneği

{
  "SmartRAG": {
    "ConversationStorageProvider": "Redis",
    "RedisConfig": {
      "ConnectionString": "localhost:6379"
    }
  }
}

Konuşma Depolama İpuçları

  • Redis: Üretim için en iyi, yüksek performans önbellekleme
  • SQLite: Geliştirme ve küçük deployment'lar için iyi
  • FileSystem: Basit, insan tarafından okunabilir depolama
  • InMemory: Hızlı, ancak yeniden başlatmada veri kaybolur

Parçalama Seçenekleri

Seçenek Tip Varsayılan Açıklama
MaxChunkSize int 1000 Her doküman parçasının karakter cinsinden maksimum boyutu
MinChunkSize int 100 Her doküman parçasının karakter cinsinden minimum boyutu
ChunkOverlap int 200 Bitişik parçalar arasında örtüşecek karakter sayısı

Parçalama En İyi Pratikleri

  • MaxChunkSize: Optimal denge için 500-1000 karakter
  • ChunkOverlap: Bağlam koruması için MaxChunkSize'ın %15-20'si
  • Daha büyük parçalar: Daha iyi bağlam, ama daha yavaş arama
  • Daha küçük parçalar: Daha kesin sonuçlar, ama daha az bağlam

Özellik Bayrakları (Feature Toggles)

Hangi arama yeteneklerinin global olarak etkinleştirileceğini kontrol edin:

builder.Services.AddSmartRag(configuration, options =>
{
    options.Features.EnableDatabaseSearch = true;
    options.Features.EnableDocumentSearch = true;
    options.Features.EnableAudioSearch = true;
    options.Features.EnableImageSearch = true;
    options.Features.EnableMcpSearch = false;
    options.Features.EnableFileWatcher = false;
});

Özellik Bayrağı Seçenekleri

Seçenek Tip Varsayılan Açıklama
Features.EnableDatabaseSearch bool true Çoklu veritabanı sorgu yeteneklerini etkinleştir (SQL Server, MySQL, PostgreSQL, SQLite)
Features.EnableDocumentSearch bool true Doküman metin aramasını etkinleştir (PDF, Word, Excel, vb.)
Features.EnableAudioSearch bool true Ses dosyası transkripsiyonu ve aramasını etkinleştir (MP3, WAV, vb.)
Features.EnableImageSearch bool true Görüntü OCR ve aramasını etkinleştir (PNG, JPG, vb.)
Features.EnableMcpSearch bool false Harici araçlar için MCP (Model Context Protocol) sunucu entegrasyonunu etkinleştir
Features.EnableFileWatcher bool false İzlenen klasörlerden otomatik doküman indekslemeyi etkinleştir

Özellik Bayrağı İpuçları

  • İstek Bazlı Kontrol: İstek bazlı özellik kontrolü için SearchOptions kullanın
  • Global Kontrol: Global özellik etkinleştirme için Features kullanın
  • Performans: Kullanılmayan özellikleri devre dışı bırakarak performansı artırın
  • Kaynak Yönetimi: Gerekmiyorsa ses/görüntü aramasını devre dışı bırakarak işleme kaynaklarını tasarruf edin

DocumentType Özelliği

DocumentChunk içindeki DocumentType özelliği, parçaları içerik tipine göre filtrelemeye olanak tanır:

  • “Document”: Normal metin dokümanları (PDF, Word, Excel, TXT)
  • “Audio”: Ses dosyası transkripsiyonları (MP3, WAV, M4A)
  • “Image”: Görüntü OCR sonuçları (PNG, JPG, vb.)

Otomatik Algılama

DocumentType, dosya uzantısı ve içerik tipine göre otomatik olarak belirlenir:

// Yüklenen dosyalar otomatik olarak kategorize edilir
var document = await _documentService.UploadDocumentAsync(
    fileStream, 
    "invoice.pdf",      // → DocumentType: "Document"
    "application/pdf",
    "user-123"
);

var audio = await _documentService.UploadDocumentAsync(
    audioStream,
    "meeting.mp3",      // → DocumentType: "Audio"
    "audio/mpeg",
    "user-123"
);

var image = await _documentService.UploadDocumentAsync(
    imageStream,
    "receipt.jpg",      // → DocumentType: "Image"
    "image/jpeg",
    "user-123"
);

DocumentType’a Göre Filtreleme

SearchOptions kullanarak doküman tipine göre filtreleyin:

// Sadece metin dokümanlarında ara
var options = new SearchOptions
{
    EnableDocumentSearch = true,
    EnableAudioSearch = false,  // Ses parçalarını hariç tut
    EnableImageSearch = false  // Görüntü parçalarını hariç tut
};

var response = await _searchService.QueryIntelligenceAsync(
    "Fatura detaylarını bul",
    maxResults: 10,
    options: options
);

Yeniden Deneme & Dayanıklılık Seçenekleri

Seçenek Tip Varsayılan Açıklama
MaxRetryAttempts int 3 AI sağlayıcı istekleri için maksimum yeniden deneme sayısı
RetryDelayMs int 1000 Yeniden denemeler arası bekleme süresi (milisaniye)
RetryPolicy RetryPolicy ExponentialBackoff Başarısız istekler için yeniden deneme politikası
EnableFallbackProviders bool false Hata durumunda alternatif AI sağlayıcılarına geçiş
FallbackProviders List<AIProvider> [] Sırayla denenecek yedek AI sağlayıcıları listesi

RetryPolicy Enum Değerleri:

  • RetryPolicy.None - Yeniden deneme yok
  • RetryPolicy.FixedDelay - Sabit bekleme süresi
  • RetryPolicy.LinearBackoff - Doğrusal artan bekleme
  • RetryPolicy.ExponentialBackoff - Üssel artan bekleme (önerilen)

Örnek Yapılandırma

Geliştirme Ortamı

builder.Services.AddSmartRag(configuration, options =>
{
    // Hızlı geliştirme için
    options.AIProvider = AIProvider.Gemini;
    options.StorageProvider = StorageProvider.InMemory;
    options.MaxChunkSize = 500;
    options.ChunkOverlap = 100;
});

Üretim Ortamı

builder.Services.AddSmartRag(configuration, options =>
{
    // Güvenilir üretim için
    options.AIProvider = AIProvider.OpenAI;
    options.StorageProvider = StorageProvider.Qdrant;
    options.MaxChunkSize = 1000;
    options.ChunkOverlap = 200;
    options.MaxRetryAttempts = 5;
    options.RetryPolicy = RetryPolicy.ExponentialBackoff;
    options.EnableFallbackProviders = true;
    options.FallbackProviders = new List<AIProvider> { AIProvider.Anthropic };
});

Sonraki Adımlar

AI Sağlayıcıları

OpenAI, Anthropic, Google Gemini ve özel sağlayıcılar

AI Sağlayıcıları

Depolama Sağlayıcıları

Qdrant, Redis, SQLite ve diğer depolama seçenekleri

Depolama Sağlayıcıları