Gelişmiş Yapılandırma

SmartRAG'in gelişmiş özelliklerini kullanarak daha güvenilir ve performanslı sistemler oluşturun:

Yedek Sağlayıcılar

Fallback Provider Yapılandırması

builder.Services.AddSmartRag(configuration, options =>
{
    // Ana AI sağlayıcı
    options.AIProvider = AIProvider.OpenAI;
    
    // Yedek sağlayıcıları etkinleştir
    options.EnableFallbackProviders = true;
    options.FallbackProviders = new List<AIProvider>
    {
        AIProvider.Anthropic,    // İlk yedek
        AIProvider.Gemini,       // İkinci yedek
        AIProvider.Custom        // Son yedek (Ollama)
    };
    
    // Yeniden deneme yapılandırması
    options.MaxRetryAttempts = 3;
    options.RetryDelayMs = 1000;
    options.RetryPolicy = RetryPolicy.ExponentialBackoff;
});

Fallback Senaryoları

// Senaryo 1: OpenAI → Anthropic → Gemini
options.FallbackProviders = new List<AIProvider>
{
    AIProvider.Anthropic,
    AIProvider.Gemini
};

// Senaryo 2: Azure OpenAI → OpenAI → Anthropic
options.FallbackProviders = new List<AIProvider>
{
    AIProvider.OpenAI,
    AIProvider.Anthropic
};

// Senaryo 3: Cloud → On-premise
options.FallbackProviders = new List<AIProvider>
{
    AIProvider.Custom  // Ollama/LM Studio
};

// Senaryo 4: Premium → Budget
options.FallbackProviders = new List<AIProvider>
{
    AIProvider.Gemini  // Daha uygun maliyetli
};

Yeniden Deneme Politikaları

RetryPolicy Seçenekleri

// Senaryo 1: Hızlı yeniden deneme
options.RetryPolicy = RetryPolicy.FixedDelay;
options.RetryDelayMs = 500;  // 500ms sabit bekleme

// Senaryo 2: Doğrusal artan bekleme
options.RetryPolicy = RetryPolicy.LinearBackoff;
options.RetryDelayMs = 1000;  // 1s, 2s, 3s, 4s...

// Senaryo 3: Üssel artan bekleme (önerilen)
options.RetryPolicy = RetryPolicy.ExponentialBackoff;
options.RetryDelayMs = 1000;  // 1s, 2s, 4s, 8s...

// Senaryo 4: Yeniden deneme yok
options.RetryPolicy = RetryPolicy.None;

Özel Yeniden Deneme Mantığı

// Kritik uygulamalar için agresif yeniden deneme
options.MaxRetryAttempts = 5;
options.RetryDelayMs = 200;
options.RetryPolicy = RetryPolicy.ExponentialBackoff;

// Test ortamları için minimal yeniden deneme
options.MaxRetryAttempts = 1;
options.RetryDelayMs = 1000;
options.RetryPolicy = RetryPolicy.FixedDelay;

Performans Optimizasyonu

Chunk Boyutu Optimizasyonu

// Senaryo 1: Hızlı arama (küçük parçalar)
options.MaxChunkSize = 500;
options.MinChunkSize = 100;
options.ChunkOverlap = 75;

// Senaryo 2: Bağlam koruması (büyük parçalar)
options.MaxChunkSize = 2000;
options.MinChunkSize = 200;
options.ChunkOverlap = 400;

// Senaryo 3: Denge (önerilen)
options.MaxChunkSize = 1000;
options.MinChunkSize = 100;
options.ChunkOverlap = 200;

Depolama Optimizasyonu

// Senaryo 1: Maksimum performans
options.StorageProvider = StorageProvider.Qdrant;
options.ConversationStorageProvider = ConversationStorageProvider.Redis;

// Senaryo 2: Maliyet optimizasyonu
options.StorageProvider = StorageProvider.Redis;
options.ConversationStorageProvider = ConversationStorageProvider.InMemory;

// Senaryo 3: Hibrit yaklaşım
options.StorageProvider = StorageProvider.Redis;
options.ConversationStorageProvider = ConversationStorageProvider.SQLite;

Güvenlik Yapılandırması

API Anahtarı Yönetimi

// Environment variables kullanımı (önerilen)
builder.Services.AddSmartRag(configuration, options =>
{
    options.AIProvider = AIProvider.OpenAI;
    // API anahtarı otomatik olarak environment'dan yüklenir
});

// appsettings.json kullanımı (geliştirme için)
{
  "AI": {
    "OpenAI": {
      "ApiKey": "sk-proj-ANAHTARINIZ"
    }
  }
}

Veritabanı Bağlantı Yapılandırması

// Veritabanı bağlantı yapılandırması
options.DatabaseConnections = new List<DatabaseConnectionConfig>
{
    new DatabaseConnectionConfig
    {
        Name = "Güvenli Veritabanı",
        DatabaseType = DatabaseType.SqlServer,
        ConnectionString = "Server=localhost;Database=SecureDB;...",
        Description = "Hassas veri içeren üretim veritabanı",
        Enabled = true,
        MaxRowsPerQuery = 1000,
        QueryTimeoutSeconds = 30,
        SchemaRefreshIntervalMinutes = 60,
        IncludedTables = new string[] { "Orders", "Customers" },
        ExcludedTables = new string[] { "Logs", "TempData" }
    }
};

Not: SanitizeSensitiveData ve MaxRowsPerTable ayarları DatabaseConfig içinde yapılandırılır, DatabaseConnectionConfig içinde değil. Bu ayarlar tüm veritabanı bağlantılarına global olarak uygulanır.

Monitoring ve Logging

Detaylı Logging

// Logging yapılandırması
builder.Services.AddLogging(logging =>
{
    logging.AddConsole();
    logging.AddDebug();
    logging.SetMinimumLevel(LogLevel.Information);
});

// SmartRAG için özel logging
builder.Services.AddSmartRag(configuration, options =>
{
    // Logging otomatik olarak etkinleştirilir
});

Performance Monitoring

// Performans metrikleri için
public class SmartRagMetrics
{
    public int TotalQueries { get; set; }
    public TimeSpan AverageResponseTime { get; set; }
    public int FallbackUsageCount { get; set; }
    public int RetryCount { get; set; }
}

En İyi Pratikler

Güvenlik

Güvenlik En İyi Pratikleri

  • API anahtarlarını asla kaynak kontrolüne commit etmeyin
  • Üretim için environment variables kullanın
  • Veritabanı bağlantılarını güvenli şekilde yapılandırın
  • Dış servisler için HTTPS kullanın
  • Hassas veriler için on-premise AI sağlayıcıları tercih edin

Performans

Performans En İyi Pratikleri

  • Üretim için Qdrant veya Redis kullanın
  • Uygun chunk boyutları yapılandırın
  • Güvenilirlik için yedek sağlayıcıları etkinleştirin
  • Veritabanı bağlantıları için makul MaxRowsPerQuery limitleri ayarlayın
  • ExponentialBackoff retry policy kullanın

Maliyet Optimizasyonu

Maliyet Optimizasyonu

  • Geliştirme için Gemini veya Custom sağlayıcıları kullanın
  • Üretim için OpenAI, Azure OpenAI veya Anthropic tercih edin
  • InMemory depolama sadece test için kullanın
  • Maliyet etkin üretim depolaması için Redis kullanın
  • Ollama/LM Studio ile %100 on-premise çözümler

Özel Stratejiler

SmartRAG, temel bileşenler için Strateji Deseni’ni (Strategy Pattern) sunarak özel mantık enjekte etmenize olanak tanır.

Özel Stratejilerin Kaydı

İlgili arayüzleri (interface) uygulayarak kendi stratejilerinizi geliştirebilirsiniz. İşte bunları nasıl kaydedebileceğinize dair örnekler:

// Örnek: Özel bir SQL Diyalekti kaydı (örn. EnhancedPostgreSqlDialectStrategy geliştirdiyseniz)
services.AddSingleton<ISqlDialectStrategy, EnhancedPostgreSqlDialectStrategy>();

// Örnek: Özel bir Skorlama Stratejisi kaydı
services.AddSingleton<IScoringStrategy, CustomScoringStrategy>();

// Örnek: Özel bir Dosya Ayrıştırıcı kaydı (örn. Markdown dosyaları için)
services.AddSingleton<IFileParser, MarkdownFileParser>();

Örnek Yapılandırmalar

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;
    options.MaxRetryAttempts = 1;
    options.RetryPolicy = RetryPolicy.FixedDelay;
});

Test Ortamı

builder.Services.AddSmartRag(configuration, options =>
{
    // Test için güvenilir yapılandırma
    options.AIProvider = AIProvider.OpenAI;
    options.StorageProvider = StorageProvider.Redis;
    options.ConversationStorageProvider = ConversationStorageProvider.SQLite;
    options.MaxChunkSize = 1000;
    options.ChunkOverlap = 200;
    options.MaxRetryAttempts = 3;
    options.RetryPolicy = RetryPolicy.ExponentialBackoff;
    options.EnableFallbackProviders = true;
    options.FallbackProviders = new List<AIProvider> { AIProvider.Gemini };
});

Üretim Ortamı

builder.Services.AddSmartRag(configuration, options =>
{
    // Güvenilir üretim için
    options.AIProvider = AIProvider.OpenAI;
    options.StorageProvider = StorageProvider.Qdrant;
    options.ConversationStorageProvider = ConversationStorageProvider.Redis;
    options.MaxChunkSize = 1000;
    options.ChunkOverlap = 200;
    options.MaxRetryAttempts = 5;
    options.RetryPolicy = RetryPolicy.ExponentialBackoff;
    options.EnableFallbackProviders = true;
    options.FallbackProviders = new List<AIProvider> 
    { 
        AIProvider.AzureOpenAI,  // İlk yedek (Azure)
        AIProvider.Anthropic,    // İkinci yedek
        AIProvider.Custom       // Son yedek (Ollama)
    };
    
    // Veritabanı yapılandırması
    options.DatabaseConnections = new List<DatabaseConnectionConfig>
    {
        new DatabaseConnectionConfig
        {
            Name = "Üretim DB",
            DatabaseType = DatabaseType.SqlServer,
            ConnectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING"),
            Description = "Üretim veritabanı",
            Enabled = true,
            MaxRowsPerQuery = 5000,
            QueryTimeoutSeconds = 30,
            SchemaRefreshIntervalMinutes = 60
        }
    };
});

Sonraki Adımlar

API Referansı

Detaylı API dokümantasyonu ve metod referansları

API Referansı

Örnekler

Pratik örnekleri ve gerçek dünya kullanım senaryolarını görün

Örnekleri Gör

Changelog

Tüm versiyonlardaki yeni özellikleri, iyileştirmeleri ve breaking change'leri takip edin.

Changelog'u Görüntüle