Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel AI Ara Katmanı: Token Takibi ve Hız Sınırlama
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel AI Ara Katmanı: Token Takibi ve Hız Sınırlama

Yazılım

Laravel AI Ara Katmanı: Token Takibi ve Hız Sınırlama

teknomers
Son güncelleme: 5 Nisan 2026 06:00
teknomers
Paylaş
Paylaş

Laravel uygulamanıza Claude veya GPT-4o entegre etmek oldukça kolay bir iş gibi gözükebilir. Bir Http::post() çağrısı ile kendinizi deha gibi hissedersiniz. Ancak tek bir kullanıcı endpoint’inizi tekrar tekrar kullanmaya başladığında veya bir bot bunu scriptlediğinde, OpenAI faturanız 300 dolara ulaşır. Çözüm, özel bir Laravel AI middleware katmanı oluşturmaktır ve çoğu eğitim materyali bunu tamamiyle atlamaktadır.

Bu, hayali bir durum değil. Gerçekten yaşanıyor.

Daha akıllı prompts oluşturmak yerine, yapısal bir çözüm gereklidir. Bu kılavuzda, düzgün bir AI yönetim katmanı inşa ediyoruz: katmanlı oran sınırlama, kullanıcı başına token izleme ile birlikte asenkron logging ve korumaların çalıştığını doğrulayan bir Pest test paketi oluşturacağız. Amacımız bir demo yapmak değil; gönderebileceğiz bir uygulama inşa etmek. Prompt versioning ve o yapının prompt tarafında deploy disiplini için prompt migrations rehberine göz atabilirsiniz.



1. Strateji: Neden Laravel AI Middleware Katmanı?

Middleware, Laravel yaşam döngüsünde bu amaç için doğru yerdir çünkü altyapı endişelerini (maliyet, oran limitleri) iş mantığından (prompt’un kendisi) ayırır. Bu decoupling, gpt-4o‘yu, kontrolcülerden birini bile dokunmadan, kendi barındırdığınız bir Llama örneği ile değiştirmeyi mümkün kılar.

O ayrımın çıkış tarafında, modelin geri döndüğünü uygulamanız hareket etmeden önce doğrulamak için schema validation kılavuzuna bakabilirsiniz.

Maliyet izlemek için standart token fiyat formülünü kullanıyoruz:

$$Total Cost = \sum_{i=1}^{n} (Tokens_{in} \cdot Price_{in} + Tokens_{out} \cdot Price_{out})$$

Bu hesaplamayı merkezi bir yere koyun. Kontrolcülerde asla dağınık tutmayın.



2. Veritabanı Şeması: Bir Denetim İzlemek, Sadece Bir Sayıcı Değil

Sadece kullanıcı total_tokens tam sayısını arttırma tuzağına düşmeyin. Her istek için bir satır oluşturmalısınız, böylece denetim, geri ödeme ve hata ayıklama yapabilirsiniz.

// database/migrations/xxxx_xx_xx_create_ai_usage_logs_table.php
public function up(): void
{
    Schema::create('ai_usage_logs', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->string('model_used');        // e.g., 'gpt-4o', 'claude-sonnet-4-6'
        $table->string();      // e.g., 'blog_generator', 'chat'
        $table->integer()->default();
        $table->integer()->default();
        $table->decimal(, , )->default();
        $table->timestamps();
    });
}



3. Katmanlı Oran Sınırlama

Katmanlarınızı AppServiceProvider içinde tanımlayın. Ücretsiz kullanıcılar dakikada 5 istek alır. Premium kullanıcılar ise 100. Birim ekonominizin gerektirdiği şekilde ayarlayın.

// app/Providers/AppServiceProvider.php
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;

public function boot(): void
{
    RateLimiter::for(, function (Request $request) {
        $user = $request->user();

        return $user?->is_premium
            ? Limit::perMinute()->by($user->id)
            : Limit::perMinute()->by(->id);
    });
}

Kıdemli Geliştirici İpucu: Bunu Redis ile destekleyin, veritabanınızla değil. CACHE_DRIVER=redis ayarını .env dosyanıza ekleyin. Varsayılan file veya database sürücüsünü kullanıyorsanız, her AI isteği oran sınırlayıcı altında bir veritabanı okuma-yazma döngüsü tetikler — bu, yük altındayken ortaya çıkmayacak gizli bir darboğazdır. Laravel Cache dökümantasyonu için sürücü yapılandırmasına bakın.



4. Middleware Oluşturma

Sınıfı oluşturun:

php artisan make:middleware EnsureUserHasAiCredits

Bu middleware, istek Controller’a ulaşmadan önce kimlik doğrulama ve kullanıcı başına harcama limitinizi uygular:

// app/Http/Middleware/EnsureUserHasAiCredits.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureUserHasAiCredits
{
    public function handle(Request $request, Closure $next): Response
    {
        $user = $request->user();

        if (! $user) {
            return response()->json([=> ], );
        }

        if ($user->monthly_spend >= $user->spending_limit) {
            return response()->json([
                => ,
                => route(),
            ], );
        }

        return $next($request);
    }
}



Middleware’ı Kayıt Etme (Laravel 11+)

Laravel 11, app/Http/Kernel.php dosyasını kaldırdı. Middleware’inizi bootstrap/app.php dosyasına kaydedin:

// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
    $middleware->appendToGroup(, [
        \App\Http\Middleware\EnsureUserHasAiCredits::class,
    ]);
})

Daha sonra, oran sınırlayıcıyı rotanıza uygulayın:

// routes/api.php
Route::post(, [AiController::class, ])
    ->middleware();



5. Model Fiyatlandırmasını Harici Yapma

Model fiyatını 0.000005 gibi bir değeri Job’unuz içerisine sabit şekilde yazmak bakım tuzağıdır. OpenAI’den bir fiyat değişikliği geldiğinde, maliyet hesaplamanız sessizce bozulur. Fiyatları config/ai.php dosyasına yerleştirin:

// config/ai.php
return [
    => [
        => [
            => ,
            => ,
        ],
        => [
            => ,
            => ,
        ],
    ],
];



6. Asenkron Kullanım Günlüğü ile Kuyruk Job’u

API yanıt verdikten sonra asenkron olarak günlüğe kaydedin. Kullanıcıyı bir veritabanı yazımı için bekletmeyin.

// app/Jobs/LogAiUsage.php
namespace App\Jobs;

use App\Models\AiUsageLog;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class LogAiUsage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(
        public readonly int    $userId,
        public readonly array  $usageData,
    ) {}

    public function handle(): void
    {
        = ->usageData[];
        = config({}, [
            => ,
            => ,
        ]);

        = (->usageData[] * [])
              + (->usageData[] * []);

        AiUsageLog::create([
            => ->userId,
            => ,
            => ->usageData[],
            => ->usageData[],
            => ->usageData[],
            => ,
        ]);
    }
}

Dikkat edin ki feature_name hem Job yüklemesinde hem de create() çağrısında yer alır. Orijinal migration bu sütunu tanımlar; eğer insert’tan çıkarırsanız, Laravel ya NOT NULL kısıtlaması hatası verir ya da boş bırakılması durumunda sessizce göz ardı eder. Her iki durumda da, atfedilen verinizi kaybetmiş olursunuz. Yüklemenizi her zaman şemanızla eşleştirin.



7. Kontrolcü: Birleştirmek

// app/Http/Controllers/AiController.php
namespace App\Http\Controllers;

use App\Jobs\LogAiUsage;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use OpenAI\Laravel\Facades\OpenAI;
use Illuminate\Validation\ValidationException;

class AiController extends Controller
{
    public function generate(Request $request): JsonResponse
    {
        = ->validate([
            => [, , ],
            => [, , ],
        ]);

        try {
            = OpenAI::chat()->create([
                => ,
                => [[=> ,=> []]],
            ]);
        } catch ($e) {
            report();
            return response()->json([=> ], );
        } catch ($e) {
            // 429, kota aşımı, geçersiz talepleri yakalar
            report();
            return response()->json([=> ->getMessage()],->getCode() ?: );
        }

        LogAiUsage::dispatch(auth()->id(),[
            => ,
            => [],
            => ->usage->promptTokens,
            => ->usage->completionTokens,
        ]);

        return response()->json([
            => ->choices[]->message->content,
        ]);
    }
}

Anthropic’in SDK’sını entegre ediyorsanız, desen aynıdır — istemci çağrısını değiştirin ve model dizisini claude-sonnet-4-5 olarak güncelleyin. En son SDK referansı için Anthropic API belgelerine göz atabilirsiniz.



8. Mimariyi Pest ile Test Etme

Bir üretim sistemi, arkasındaki test paketinin sağlamlığı kadar güvenilirdir. Üç şeyi bağımsız olarak doğrulamamız gerekiyor:

  1. Oran sınırlayıcı, kotası tükenmiş kullanıcılara engel oluyor.
  2. Middleware, harcama tavanına ulaşmış kullanıcıları durduruyor.
  3. LogAiUsage Job’u doğru yüklemesiyle çalıştırılıyor — gerçek API’yi vurmadan.

Bu son nokta, çoğu AI test eğitimlerinin başarısız olduğu yerdir. Bus::fake() Job’u kuyruklar ama OpenAI facadına hiçbir şey yapmaz. Onu mock etmezseniz, test paketin gerçek API kredilerini yakar.

// tests/Feature/AiGenerationTest.php
use App\Jobs\LogAiUsage;
use App\Models\User;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\RateLimiter;
use OpenAI\Laravel\Facades\OpenAI;
use OpenAI\Responses\Chat\CreateResponse;

beforeEach(function () {
    Bus::fake();
});

it(, function () {
    = User::factory()->create([=> false]);

    // Önceki 5 isteği simüle edin — ücretsiz katmanın tavanı
    foreach (range(,) as ) {
        RateLimiter::hit(. ->id);
    }

    ->actingAs()
        ->postJson(,[
            => ,
            => ,
        ])
        ->assertStatus();
});

it(, function () {
    = User::factory()->create([
        => ,
        => ,
    ]);

    ->actingAs()
        ->postJson(,[
            => ,
            => ,
        ])
        ->assertStatus()
        ->assertJsonPath(, );
});

it(, function () {
    = User::factory()->create([=> ]);

    // OpenAI facadını mock'layın — testler sırasında gerçek API'yi kullanmayın
    OpenAI::fake([
        CreateResponse::fake([
            => [
                [=> [=> , => ]],
            ],
            => [
                => ,
                => ,
                => ,
            ],
        ]),
    ]);

    ->actingAs()
        ->postJson(,[
            => ,
            => ,
        ])
        ->assertOk()
        ->assertJsonPath(, );

    Bus::assertDispatched(LogAiUsage::, function (LogAiUsage ) use () {
        return ->userId === ->id
            && ->usageData[] === && ->usageData[] === && ->usageData[] === ;
    });
});

Eğer bu yapının Eloquent tarafını inşa ediyorsanız ve model ilişkilerini ve fabrika durumlarını büyük çapta test etmek istiyorsanız, güçlü Laravel test fabrikaları oluşturma konusundaki desenler, burada User ve AiUsageLog modelleri için doğrudan aktarılabilir.



9. Artık Sahip Olduklarınız

Bu mimariyle gönderim yaptığınızda, elde ettiğiniz sonuçlar:

  • Maliyet koruması — Laravel RateLimiter facadını Redis ile destekleyerek katmanlı oran sınırlama, ayrıca middleware’da zorunlu bir aylık tavan.
  • Tam denetim izi — her bir token, kullanıcı başına, özellik başına, model başına Eloquent modeli aracılığıyla kaydedilir.
  • Taşıma gecikmesinde sıfır etki — asenkron logging, kullanıcıların veritabanı yazımı için beklemesini sağlar.
  • Kandırmayan bir test paketi — OpenAI facadı mock’lanmış durumda, böylece CI pipeline’ınız ücretsiz kalır ve iddialarınız güvenilir olur.

Bir hafta sonu projesi ile bir üretim sistemi arasındaki fark, AI entegrasyonu değildir. Bu etrafındaki her şeydir. İşte bu katman.

Kaynaklar:

Kaynak: Orijinal Makale

Contents
  • 1. Strateji: Neden Laravel AI Middleware Katmanı?
  • 2. Veritabanı Şeması: Bir Denetim İzlemek, Sadece Bir Sayıcı Değil
  • 3. Katmanlı Oran Sınırlama
  • 4. Middleware Oluşturma
    • Middleware’ı Kayıt Etme (Laravel 11+)
  • 5. Model Fiyatlandırmasını Harici Yapma
  • 6. Asenkron Kullanım Günlüğü ile Kuyruk Job’u
  • 7. Kontrolcü: Birleştirmek
  • 8. Mimariyi Pest ile Test Etme
  • 9. Artık Sahip Olduklarınız
Laravel’de Kontrolcüler ve Ara Katman Kullanımı için Kapsamlı Rehber
Inspector.dev (Neuron), Laravel AI SDK ve Prism PHP: Laravel Geliştiricileri İçin Pratik Bir Karşılaştırma
Laravel AI Entegrasyonu: Üretim İçin Hazır Mimarisi Rehberi (OpenAI, Gemini, Claude)
Laravel Fast2SMS v2.0.0 — WhatsApp Desteği, Bildirim Kanalları ve Daha Akıllı Kullanıcı Deneyimi
Laravel + Inertia + Vue 3: Formlar, Doğrulama ve Dosya Yüklemeleri Doğru Şekilde Yapma
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Laravel (Reverb) ve React ile Google Dokümanları Tarzı Gerçek Zamanlı Gösterge Tablosu Oluşturma
Sonraki Makale Acil: 36 Kötü Amaçlı npm Paketi Redis ve PostgreSQL’i Tehdit Ediyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Acil! 400’den Fazla Arch Linux Paketi Tehlikede: Rootkit ve İfşa
Siber Güvenlik
SpaceX Hisse Senedi İle Dünya’nın İlk Trilyonerine Merhaba Dedi
Genel
Jeff Bezos’un AI Girişimi ‘Genel Yapay Mühendis’ Yaratmayı Hedefliyor
Liste
Elon Musk: Dünyanın İlk Trilyoneri Olma Yolunda İlerliyor!
Genel
Google, AI kullanarak yüz binlerce kişiyi dolandıran Çinli siber çeteye dava açtı
Yapay Zeka
Microsoft’un hata avcılarına yönelik saldırıları sürüyor: Yeni exploitler yayınlandı
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?