Uygulama Plani
1. AI Tenant Directive: assistant_type Yuksek
Her tenant icin hangi assistant tipinin kullanilacagini belirle:
// AI Tenant Directive
{
"tenant_id": 2,
"directive_key": "ai_assistant_type",
"directive_value": "shop",
"description": "iXtif - Shop Assistant"
}
// Muzibu icin
{
"tenant_id": 1001,
"directive_key": "ai_assistant_type",
"directive_value": "music",
"description": "Muzibu - Music Assistant"
}
// Bilgi portali icin
{
"tenant_id": 500,
"directive_key": "ai_assistant_type",
"directive_value": "info",
"description": "Sadece SSS ve bilgi"
}
2. ModuleSearchService Interface Yuksek
Tum arama servisleri icin ortak interface:
// App/Contracts/ModuleSearchInterface.php
interface ModuleSearchInterface
{
public function search(string $query, ?int $categoryId = null): array;
public function getContextForAI(array $results): string;
public function getQuickActions(): array;
}
// Implementasyonlar:
- ProductSearchService implements ModuleSearchInterface
- BlogSearchService implements ModuleSearchInterface
- BookingSearchService implements ModuleSearchInterface
- KnowledgeBaseSearchService implements ModuleSearchInterface
- MusicSearchService implements ModuleSearchInterface
3. AssistantTypeResolver Service Yuksek
Tenant'a gore dogru servisleri cozumle:
// App/Services/AI/AssistantTypeResolver.php
class AssistantTypeResolver
{
public function resolve(int $tenantId): array
{
$type = $this->getAssistantType($tenantId);
return [
'type' => $type,
'search_service' => $this->getSearchService($type),
'context_builder' => $this->getContextBuilder($type),
'prompt_service' => $this->getPromptService($type),
'quick_actions' => $this->getQuickActions($tenantId, $type),
];
}
protected function getSearchService(string $type): ModuleSearchInterface
{
return match($type) {
'shop' => app(ProductSearchService::class),
'content' => app(BlogSearchService::class),
'booking' => app(BookingSearchService::class),
'info' => app(KnowledgeBaseSearchService::class),
'music' => app(MusicSearchService::class),
default => app(GenericSearchService::class),
};
}
}
4. Endpoint Yeniden Adlandirma Orta
Shop-specific endpoint'leri generic yap:
// ESKI (Shop'a ozgu):
POST /api/ai/v1/shop-assistant/chat
POST /api/ai/v1/shop-assistant/chat-stream
// YENI (Generic):
POST /api/ai/v1/assistant/chat
POST /api/ai/v1/assistant/chat-stream
GET /api/ai/v1/assistant/quick-actions
// Geriye donuk uyumluluk:
// Eski endpoint'ler yeni endpoint'lere redirect
5. Dinamik Prompt Sistemi Orta
Her assistant tipi icin farkli prompt kurallari:
// Shop Assistant Prompt
"Sen bir satis danismanisin. Urun oner, fiyat bilgisi ver..."
// Content Assistant Prompt
"Sen bir icerik asistanisin. Blog yazilari oner, bilgi ver..."
// Booking Assistant Prompt
"Sen bir randevu asistanisin. Musait zamanlari goster..."
// Info Assistant Prompt
"Sen bir bilgi asistanisin. SSS'leri yanitla, yonlendir..."
// Music Assistant Prompt
"Sen bir muzik asistanisin. Sarki oner, playlist olustur..."
6. Dinamik Quick Actions Orta
Her assistant tipi icin farkli hizli butonlar:
// Shop: Transpalet, Forklift, Yedek Parca...
// Content: Son Yazilar, Kategoriler, Arama...
// Booking: Randevu Al, Musait Saatler, Iptal...
// Info: SSS, Iletisim, Destek Talebi...
// Music: Sarki Ara, Playlist, Sanatci...