Gelişmiş Yapılandırma
SmartRAG gelişmiş yapılandırma seçenekleri - yedek sağlayıcılar, en iyi pratikler ve sonraki adımlar
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
Changelog
Tüm versiyonlardaki yeni özellikleri, iyileştirmeleri ve breaking change'leri takip edin.
Changelog'u Görüntüle