PHP geliştiricisiyseniz, AI entegrasyonu ile ilgili karışık duygular yaşıyor olabilirsiniz. Olasılıklar ve heyecan, ama aynı zamanda OpenAI veya Anthropic için çok sayıda standart kod yazmaktan da yorgunluk hissedebilirsiniz.
Yeni Laravel AI SDK bu durumu değiştiriyor. Karmaşık AI etkileşimlerini akıcı, Laravel tarzı bir sözdizimine dönüştürüyor.
Bu kılavuzda sadece konuşmayacağız; 10 dakikadan daha kısa sürede çalışan bir Ses-to-Metin uygulaması geliştireceğiz. Benim projemin adı “Dettami”, ama siz istediğiniz ismi verebilirsiniz.
Hadi biraz kod yazalım.
Ön Koşullar
Ön Koşullar
- Laravel 10+ (veya en son sürüm)
- PHP 8.2+
- Bir OpenAI API Anahtarı
Adım 1: SDK’yı Kurun
Adım 1: SDK’yı Kurun
Öncelikle, guzzlehttp/guzzle manuel çağrılarına veda edin. İlk parti paketi çekin.
composer require laravel/ai
Yüklendikten sonra, yapılandırma dosyasını yayınlayın. Burada “sürücüleriniz” (OpenAI, Gemini, Mistral, vb.) tanımlanacak.
php artisan install:ai
Anahtarınızı .env dosyanıza ekleyin:
OPENAI_API_KEY=...
Adım 2: Rotayı Tanımlayın
Adım 2: Rotayı Tanımlayın
Ses dosyasını kabul etmek için bir uç nokta oluşturmamız gerekiyor. routes/web.php veya routes/api.php dosyanıza ekleyin:
use App\Http\Controllers\TranscribeAudioController;
Route::post('/transcribe', TranscribeAudioController::class)->name('transcribe');
Adım 3: Mantık (Büyülü Kısım)
Adım 3: Mantık (Büyülü Kısım)
Bu kısım genellikle karmaşıklık yaratır. Dosya yüklemeleri + dış API çağrıları sık sık dağınık olabilir.
Kontrolcünüzü oluşturun:
php artisan make:controller TranscribeAudioController --invokable
Artık Transcription facade’ini kullanarak nasıl temiz bir çözüm elde ettiğimize bakalım. https://api.openai.com/v1/audio/transcriptions adresine manuel bir POST isteği oluşturmaya gerek yok. SDK bunu bizim için yapıyor.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Laravel\AI\Facades\Transcription;
class TranscribeAudioController extends Controller
{
public function __invoke(Request $request)
{
$request->validate([
'audio' => 'required|file|mimes:webm,mp3,wav'
]);
$file = $request->file();
// 1. Dosyayı geçici olarak kaydedeceğiz
// SDK'ya geçireceğimiz fiziksel bir yola ihtiyacımız var
$path = $file->store();
$fullPath = Storage::path($path);
try {
// 2. Akıcı bir yöntem zinciri ile transkribe et
// SDK, varsayılan sürücünüzü otomatik olarak kullanır
$text = Transcription::fromPath($fullPath, $file->getMimeType())
->generate();
// 3. Temizleme işlemi
Storage::delete($path);
return response()->json([
=> true,
=> (string) $text,
]);
} catch (\Throwable $e) {
// Hata kaydını yapın ve kullanıcı dostu bir mesaj döndürün
return response()->json([=>], 500);
}
}
}
Neden Bu Önemli
Neden Bu Önemli
27. satıra dikkat edin: Transcription::fromPath(...).
Bu, beklediğimiz soyutlamadır. Her farklı sağlayıcı için belirli API parametrelerini hatırlama yükünü ortadan kaldırır. Bugün OpenAI kullanıyorsunuz, yarın Gemini’ye geçiyorsunuz – kod tam olarak aynı kalıyor.
Adım 4: Frontend (Kaydedici)
Adım 4: Frontend (Kaydedici)
Frontend için ağır bir React uygulamasına ihtiyacınız yok. Basit bir Blade görünümü ve saf JS bunu mükemmel bir şekilde karşılıyor.
Temel gereksinim, tarayıcının MediaRecorder API’sidir. JavaScript’inizin ne yapması gerektiğine dair pseudo-kod şöyle:
- Mikrofon erişimini talep edin (
navigator.mediaDevices.getUserMedia). - Ses parçalarını bir
Blobiçine kaydedin. - O Blob’ı Laravel uç noktamıza
FormDataaracılığıyla gönderin.
Benim bu için oluşturduğum arayüzün bir görünümü:
Özet
Özet
Yaklaşık 20 satır kod ile tamamen işlevsel bir Ses-to-Metin arka ucunu oluşturduk.
Laravel AI SDK, zamanınıza saygı gösteriyor. “Altyapıyı” yönetiyor, böylece gerçek ürünü geliştirmeye odaklanabilirsiniz.
Dettami adlı demo projesinin tam kaynak kodunu incelemek isterseniz, deposuna buradan ulaşabilirsiniz:
GitHub: maiobarbero/dettami
İlerlemeye devam edin.
Kaynak: Orijinal Makale



