Temel Yapılandırma
SmartRAG temel yapılandırma seçenekleri - yapılandırma yöntemleri, parçalama ve yeniden deneme ayarları
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
SearchOptionskullanın - Global Kontrol: Global özellik etkinleştirme için
Featureskullanı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 yokRetryPolicy.FixedDelay- Sabit bekleme süresiRetryPolicy.LinearBackoff- Doğrusal artan beklemeRetryPolicy.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 };
});