Next.js ve TypeScript Projelerinde Jev Entegrasyonu: Adım Adım AI Router Kurulumu

Next.js ve TypeScript tabanlı modern web uygulamalarında gelen kullanıcı isteklerini büyük dil modellerine göndermeden önce Jev karar modeliyle sınıflandıran tip güvenli bir AI Router mimarisini adım adım kuruyoruz.
Modern bir Next.js uygulamasında yapay zeka özellikleri geliştirirken yapılan en yaygın mimari hata, kullanıcıdan gelen her isteği doğrudan en pahalı ve en yavaş büyük dil modeline (LLM) göndermektir. Oysa gelen isteklerin önemli bir kısmı basit bir veritabanı sorgusuyla, önbellekteki (cache) hazır bir yanıtla veya çok daha hafif bir alt servisle çözülebilir. İhtiyacınız olan şey, isteğin içeriğine milisaniyeler içinde bakıp doğru rotayı seçen tip güvenli bir AI Router (Yönlendirici) katmanıdır.
TypeSafe AI'ın geliştirdiği Jev karar modeli, adından da anlaşılacağı üzere TypeScript ekosistemiyle kusursuz bir felsefi uyum taşır. Daha önce Jev nasıl kullanılır yazımızda temel karar ve eşik kavramlarına değinmiştik. Bu rehberde ise bir Next.js (App Router) projesinde uçtan uca bir yönlendirme ve triyaj mimarisini nasıl kurgulayacağımızı adım adım inceliyoruz.
Mimari Tasarım: İstek Akışı Nasıl Olmalı?
Bir Next.js Route Handler (app/api/assistant/route.ts) veya Server Action tetiklendiğinde, akış dört temel aşamadan geçmelidir:
1. Ön Kurallar (Hard Rules): İstek sahibi oturum açmamışsa veya sistemde bilinen bir genel kesinti varsa yapay zekaya hiç sormadan doğrudan deterministik kod çalışır.
2. Jev Karar Katmanı (Triage & Disposition): Kullanıcı mesajı ve oturum durumu Jev'e gönderilir. Jev, 100 milisaniye civarında bir sürede hem hedef rotayı (Choice) hem de aciliyet/risk puanını (Score) döndürür.
3. Güven Eşiği Denetimi (Confidence Gate): Dönen güven skoru belirlenen işletme eşiğinin altındaysa istek güvenli varsayılan rotaya (human_support veya fallback_llm) düşürülür.
4. Aksiyon (Playbook): Seçilen rotaya göre ilgili mikroservis, veritabanı sorgusu veya üretken dil modeli çağrılır.
Adım 1: TypeScript Tiplerinin ve Karar Şemasının Tanımlanması
Jev ile çalışırken açık uçlu string tipleri yerine kesin sınırları olan birleşim (union) tipleri kullanırız. Projemizde lib/jev-router.ts adında bir modül oluşturarak başlayalım:
export type RouteTarget =
| 'sql_analytics'
| 'rag_documentation'
| 'billing_action'
| 'frontier_coding_llm'
| 'human_escalation'
export interface RouterInputState {
userMessage: string
accountTier: 'free' | 'pro' | 'enterprise'
hasOpenInvoice: boolean
recentErrorCount: number
}
export interface JevRouterDecision {
target: RouteTarget
confidence: number
urgencyScore: number
requiresHumanReview: boolean
}
Burada dikkat edilmesi gereken en önemli nokta, girdi durumunun (RouterInputState) gereksiz sohbet geçmişinden arındırılmış olmasıdır. Jev, odaklanmış yapısal durum verileriyle en yüksek kalibrasyon başarısını gösterir.
Adım 2: Karar Fonksiyonu ve Kalibrasyon Eşikleri
Her rotanın hata maliyeti aynı değildir. Örneğin bir kullanıcıyı yanlışlıkla dokümantasyon aramasına (rag_documentation) yönlendirmenin maliyeti düşüktür; ancak otomatik fatura iadesi (billing_action) rotasına yanlışlıkla sokmanın maliyeti yüksektir. Bu nedenle rota bazlı dinamik güven eşikleri tanımlamak en sağlıklı yaklaşımdır:
En İyi 13 Tailwind CSS Bileşen Kütüphanesi: Modern Web Geliştirme Rehberi
TypeSafe AI'dan Devrim: System One Mimarisi ve Jev Modeli Duyuruldu
const ROUTE_THRESHOLDS: Record<RouteTarget, number> = {
billing_action: 0.92,
sql_analytics: 0.85,
frontier_coding_llm: 0.80,
rag_documentation: 0.70,
human_escalation: 0.0,
}
export function resolveSafeRoute(decision: JevRouterDecision): RouteTarget {
if (decision.requiresHumanReview) {
return 'human_escalation'
}
const requiredConfidence = ROUTE_THRESHOLDS[decision.target]
if (decision.confidence < requiredConfidence) {
// Güven skoru ilgili rotanın eşiğinin altındaysa güvenli limana düş
return 'human_escalation'
}
return decision.target
}
Jev vs geleneksel LLM'ler analizimizde vurguladığımız üzere, Jev'in RLCD eğitimi sayesinde verdiği 0.92 güven skoru rastgele bir tahmin değil, gerçek dünyada %92 isabet oranına karşılık gelen kalibre edilmiş bir olasılıktır.
Adım 3: Next.js Route Handler İçinde Kullanım
Şimdi bu yapıyı app/api/router/route.ts içinde birleştirelim. İstek geldiğinde önce zaman aşımı (timeout) korumalı olarak Jev kararını alıyor, ardından yalnızca gerektiğinde ağır modelleri uyandırıyoruz:
import { NextResponse } from 'next/server'
import { resolveSafeRoute, type JevRouterDecision, type RouterInputState } from '@/lib/jev-router'
export async function POST(request: Request) {
const body = (await request.json()) as RouterInputState
try {
// Jev karar servisine düşük gecikmeli çağrı (örnek soyutlama)
const decision: JevRouterDecision = await evaluateWithJev(body, {
timeoutMs: 600,
})
const safeTarget = resolveSafeRoute(decision)
return NextResponse.json({
routedTo: safeTarget,
metrics: {
confidence: decision.confidence,
urgency: decision.urgencyScore,
},
})
} catch {
// Zaman aşımı veya ağ hatasında asla rastgele işlem yapma
return NextResponse.json({
routedTo: 'human_escalation',
fallback: true,
})
}
}
Jev 1.14 ile Gelen Çok Modlu (Görsel) Karar Desteği
TypeSafe AI'ın yayınladığı Jev 1.14.0 güncellemesiyle birlikte, bu yönlendirme mimarisine görselleri de (assets haritası üzerinden) dahil etmek mümkün hale geldi. Örneğin kullanıcının destek talebine eklediği bir ekran görüntüsünün gerçekten bir ödeme hatası içerip içermediğini veya yüklenen bir ürün fotoğrafında hasar olup olmadığını yine metin üretmeden, doğrudan Bool ve Score tipleriyle Next.js arka planında doğrulayabilirsiniz.
Sonuç olarak Next.js ve TypeScript projelerinde Jev'i bir ön kontrol ve yönlendirme katmanı olarak konumlandırmak, uygulamanızın yanıt hızını standart web API'leri seviyesine çekerken LLM maliyetlerinizi kontrol altında tutmanın en temiz mühendislik yollarından biridir.



