Laravel’de AI Entegrasyonu: Yüksek Performans ve İzlenebilirlik Sağlamak
AI entegrasyonları, zamanla basit başlangıçlardan karmaşık sistemlere dönüşebilir. İlk başta tek bir chat()`’; ?> çağrısı yeterli gibi görünse de, zamanla yüzlerce veya daha fazla çağrı yapmanız gerekebilir. Bu aşamada, kodunuzdaki yavaş çalışanları bulmak, yeniden deneme mantıkları eklemek ve finansmanı takip etmek zorlaşır. Bu nedenle, paketi gibi araçlar kullanmak kritik hale gelir.
Neden ?
Bu paket, üzerinde çalışarak, üretimde ihtiyaç duyduğunuz orkestrasyon ve gözlem katmanını ekler. İşte sağlayacağı avantajlar:
- Task sınıfları ve bir generator komutu ()
- AI facade aracılığıyla senkron, kuyruklu ve streaming execution
- Her çalıştırma tablosuna kaydedilir (istek, yanıt, token, maliyet, durum)
- Sürücü yönlendirme fallback zincirleri ile
- Çoklu kiracı bütçesi izleme desteği
- Prompt önbellekleme desteği
- Yerleşik bir gösterge paneli ()
- Testler için ile assertions
- HerExecution aşamasında olaylar
- Metin, görsel, embedding, TTS ve transkripsiyon modları
Gereksinimler
- PHP 8.3+
- Laravel 12 veya 13
Kurulum
composer require fomvasss/laravel-ai-tasks
php artisan vendor:publish --tag=ai-tasks-config
php artisan vendor:publish --tag=ai-migrations
php artisan migrateGörev Tanımlama
Bir görevi tanımlamak için aşağıdaki örneği kullanabilirsiniz:
class SummarizeTask extends AiTask
{
public function __construct(private readonly string $text) {}
public function modality(): string { return 'text'; }
public function toPayload(): AiPayload
{
return new AiPayload(
modality: 'text',
messages: [new UserMessage("Summarize: {$this->text}")],
systemPrompt: 'Reply in 3 sentences max.',
options: ['temperature' => 0.3],
);
}
public function postprocess(AiResponse $response): AiResponse|array
{
return $response;
}
}
Görevi Çalıştırma
// Senkron
$response = AI::send(new SummarizeTask($text));
// Kuyruklu
$runId = AI::queue(new SummarizeTask($text));
// Streaming (timeout yok, uzun çıktılar için ideal)
AI::stream(new SummarizeTask($text), fn($chunk) => print($chunk));
// Çalışma zamanı sürücüsü üst yazma
AI::send(new SummarizeTask($text), drivers: 'anthropic');
Sürücü Yönlendirme ve Fallback
// config/ai-tasks.php
'routing' => [
'summarize' => ['openai', 'anthropic'], // önce openai dener, başarısız olursa anthropic'e geçer
],
Maliyet Takibi
'anthropic' => [
'model' => 'claude-sonnet-4-6',
'price' => ['in' => 3.00, 'out' => 15.00],
],
Kiracıya göre harcamaları sorgulamak için:
AiRun::where('tenant_id', $tenantId)->where('status', 'ok')->sum('cost');
Stale Kuyruklu Görevleri Engelleme
public function shouldRun(): bool
{
return Product::find($this->productId)?->needs_analysis ?? false;
}
Gerçek API Çağrısı Olmadan Test Etme
$fake = AI::fake([
'summarize' => 'This is a summary.',
'*' => 'Default fallback.',
]);
$fake->assertSent(SummarizeTask::class);
$fake->assertSentCount(1);
Desteklenen Sağlayıcılar
Aşağıdaki sağlayıcılar desteklenmektedir: OpenAI, Anthropic, Gemini, DeepSeek, Groq, Mistral, xAI, Ollama, ElevenLabs ve diğer uyumlu sağlayıcılar.
Kaynak: Orijinal Makale


