Modular AI Assistant - Tasarim Plani

Tarih: 2025-11-21 | Amac: AI Chat'i modul-bagimsiz ve tenant-aware yapmak

Mevcut Sorun

Simdi: Shop'a Bagimli

  • Endpoint: /shop-assistant/chat - Shop'a ozgu isim
  • ProductSearchService - Sadece Shop urun aramasi
  • Prompt'lar: "urun", "fiyat", "stok" - Shop terminolojisi
  • Context: Sadece Shop modulu verisi

Problem: Diger modul/tenant'lar icin kullanilemiyor!

Cozum: Modular Assistant Yapisi

Tenant Konfigurasyonu (AI Directive) | v +---------------+ | Assistant Type | +---------------+ | +-------+-------+-------+-------+ | | | | | v v v v v Shop Content Booking Info Custom | | | | | v v v v v Product Blog Calendar FAQ Custom Search Search Search Search Search | | | | | +-------+--------+-------+-------+ | v ContextBuilder | v AIResponseNode

Assistant Tipleri

Tip Kullanim Alani Arama Servisi Ornek Tenant
shop E-ticaret, urun satisi ProductSearchService iXtif (Tenant 2)
content Blog, haber, icerik BlogSearchService Haber siteleri
booking Randevu, rezervasyon BookingSearchService Klinik, otel
info Bilgi, SSS, destek KnowledgeBaseService Destek portali
music Muzik platformu MusicSearchService Muzibu (Tenant 1001)
custom Ozel/hibrit CustomSearchService Ozel projeler

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...

Dosya Yapisi

App/ ├── Contracts/ │ └── ModuleSearchInterface.php # Arama interface │ ├── Services/AI/ │ ├── AssistantTypeResolver.php # Tip cozumleyici │ ├── Search/ │ │ ├── ProductSearchService.php # Shop aramasi │ │ ├── BlogSearchService.php # Blog aramasi │ │ ├── BookingSearchService.php # Randevu aramasi │ │ ├── KnowledgeBaseSearchService.php # SSS aramasi │ │ ├── MusicSearchService.php # Muzik aramasi │ │ └── GenericSearchService.php # Fallback │ │ │ └── Prompt/ │ ├── ShopPromptService.php # Shop prompt'lari │ ├── ContentPromptService.php # Content prompt'lari │ ├── BookingPromptService.php # Booking prompt'lari │ ├── InfoPromptService.php # Info prompt'lari │ └── MusicPromptService.php # Music prompt'lari Modules/AI/ ├── app/Services/Workflow/Nodes/ │ ├── ModuleSearchNode.php # Generic arama node │ └── ModuleContextBuilderNode.php # Generic context builder

Guncellenmis Workflow

PublicAIController::assistantChat() | v AssistantTypeResolver::resolve($tenantId) | v [type, search_service, prompt_service] | v ConversationFlowEngine::processMessage() | +-------+-------+ | | v v ModuleSearchNode CategoryDetectionNode (generic) (type-specific) | | +-------+-------+ | v ContextBuilderNode (type-specific context) | v AIResponseNode (type-specific prompt) | v MessageSaverNode

Gecis Plani

Faz 1: Altyapi (1-2 gun)

  • ModuleSearchInterface olustur
  • AssistantTypeResolver olustur
  • ai_assistant_type directive'i ekle
  • Tenant 2 icin "shop" tipi tanimla

Faz 2: Shop Refactor (1 gun)

  • ProductSearchService'i interface'e uyumlu yap
  • ShopPromptService olustur
  • Mevcut kodlari yeni yapiya tasi
  • Geriye donuk uyumluluk sagla

Faz 3: Diger Tipler (Gerektiginde)

  • Yeni tenant geldiginde ilgili servisi yaz
  • BlogSearchService (content tipi icin)
  • BookingSearchService (booking tipi icin)
  • vb.

Faydalar

Elde Edilecekler

  • Modul Bagimsizligi: AI Chat herhangi bir modüle baglanabilir
  • Tenant Izolasyonu: Her tenant kendi assistant tipini kullanir
  • Kolay Genisletme: Yeni tip eklemek icin sadece servis yaz
  • Kod Tekrari Yok: Ortak logic interface'de
  • Test Edilebilirlik: Her servis bagimsiz test edilebilir
  • Performans: Gereksiz modul yuklemesi yok