Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı
p99 gecikmesi, istek başına maliyet ve otomatik kalite puanları için uyarı eşikleri tanımlayın; LLM iş akışınız kötüleştiğinde uyarıları Slack veya PagerDuty'ye yönlendirin.
Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
LLM Sistemleri için Uyarılar Neden Önemlidir?
LLM uygulamaları incelikli ve aşamalı şekillerde başarısız olur. Bir istem değişikliği ortalama gecikmeyi %30 artırabilir, bir getirme yükseltmesi yanıt kalitesini biraz düşürebilir veya kullanım artışı günlük maliyetleri bütçenin 5 katına çıkarabilir. Proaktif uyarılar olmadan bu sorunları yalnızca kullanıcılar şikâyet ettiğinde veya aylık fatura geldiğinde keşfedersiniz. Uyarılar, tepkisel yangın söndürmeyi proaktif operasyonlara dönüştürür.
Üç Uyarı Kategorisi
LLM uygulaması uyarıları üç kategoriye ayrılır. Gecikme uyarıları, yanıt süresi kullanıcı deneyimi eşiğini aştığında (ör. p99 > 10 saniye) tetiklenir. Maliyet uyarıları, istek başına maliyet veya günlük harcama bütçe eşiklerini aştığında tetiklenerek beklenmedik yüksek faturaları önler. Kalite uyarıları, otomatik kalite ölçümleri (LLM değerlendirici puanları, kullanıcı memnuniyeti oranları, sadakat puanları) kabul edilebilir taban değerin altına düştüğünde tetiklenir. Her kategori farklı enstrümantasyon ve farklı uyarı kanalları gerektirir.
from dataclasses import dataclass
@dataclass
class AlertThresholds:
# Latency (milliseconds)
p50_latency_ms: int = 2000 # median should be under 2s
p99_latency_ms: int = 10000 # 99th percentile under 10s
# Cost (USD)
max_cost_per_request: float = 0.05 # alert if one request costs > 5 cents
max_daily_spend: float = 50.00 # alert if daily spend exceeds $50
# Quality (0.0 to 1.0 scale)
min_quality_score: float = 0.75 # alert if rolling avg drops below 75%
min_faithfulness: float = 0.80 # alert if RAGAS faithfulness drops below 80%
DEFAULT_THRESHOLDS = AlertThresholds()Gecikme Ölçümlerini Toplama
Gecikme konusunda uyarı verebilmek için önce bunu tutarlı biçimde toplamanız gerekir. Üç gecikme bileşenini ayrı ayrı ölçün: ilk belirtece kadar geçen süre (TTFT, akışlı kullanıcı deneyimi için kritik), toplam yanıt süresi ve getirme ile üretim için adım başına gecikmeler. Yüzdelik dilimleri ve son N dakika veya saat içindeki hareketli ortalamaları hesaplayabilmek için bunları zaman serisi verileri (istek başına bir veri noktası) olarak saklayın.
import time
from collections import deque
from statistics import quantiles
class LatencyTracker:
def __init__(self, window_size=100):
self.window = deque(maxlen=window_size) # rolling window of latencies
def record(self, latency_ms: float):
self.window.append(latency_ms)
def p50(self) -> float:
if not self.window:
return 0
return quantiles(self.window, n=100)[49]
def p99(self) -> float:
if not self.window:
return 0
return quantiles(self.window, n=100)[98]
def check_alert(self, thresholds: AlertThresholds) -> list[str]:
alerts = []
if self.p99() > thresholds.p99_latency_ms:
alerts.append(f'p99 latency {self.p99():.0f}ms exceeds {thresholds.p99_latency_ms}ms')
if self.p50() > thresholds.p50_latency_ms:
alerts.append(f'p50 latency {self.p50():.0f}ms exceeds {thresholds.p50_latency_ms}ms')
return alerts
latency_tracker = LatencyTracker()Maliyeti İzleme ve Maliyet Konusunda Uyarı Verme
Maliyet izleme, harcamayı birden çok ayrıntı düzeyinde takip etmeyi gerektirir: istek başına maliyet (pahalı aykırı sorguları yakalamak için), saatlik ve günlük toplamlar (kullanım artışlarını yakalamak için) ve özellik başına maliyet (uygulamanızın hangi bölümünün en pahalı olduğunu belirlemek için). İstek başına maliyet anormalliklerinde hemen uyarı verin ve günlük bütçe sınırları için zamanlanmış kontroller kullanın.
from datetime import datetime, date
import threading
class CostTracker:
def __init__(self):
self._lock = threading.Lock()
self._daily_spend = {} # date -> total USD
self._per_request = [] # list of (timestamp, cost)
def record(self, cost_usd: float) -> list[str]:
today = date.today().isoformat()
alerts = []
with self._lock:
# Track daily spend
self._daily_spend[today] = self._daily_spend.get(today, 0) + cost_usd
self._per_request.append((datetime.now(), cost_usd))
# Alert on expensive single requests
if cost_usd > DEFAULT_THRESHOLDS.max_cost_per_request:
alerts.append(f'Expensive request: ${cost_usd:.4f} (threshold: ${DEFAULT_THRESHOLDS.max_cost_per_request})')
# Alert on daily budget exceeded
daily_total = self._daily_spend[today]
if daily_total > DEFAULT_THRESHOLDS.max_daily_spend:
alerts.append(f'Daily budget exceeded: ${daily_total:.2f} > ${DEFAULT_THRESHOLDS.max_daily_spend}')
return alerts
cost_tracker = CostTracker()Kalite Puanı Uyarıları
Kalite uyarıları en karmaşık kategoridir; çünkü kalite yalnızca altyapı ölçümlerinden belirlenemez ve anlamsal değerlendirme gerektirir. En ölçeklenebilir yaklaşım örneklenmiş otomatik değerlendirmedir: üretim isteklerinin rastgele bir örneği (%5-10) için eşzamansız olarak bir LLM değerlendiricisi çalıştırın, puanları saklayın ve hareketli bir ortalama hesaplayın. Hareketli ortalama kalite taban değerinizin altına düştüğünde uyarı verin.
import random
from openai import OpenAI
client = OpenAI()
def evaluate_response_quality(question: str, answer: str) -> float:
judge_prompt = f'''Rate the quality of this AI assistant response on a scale from 0 to 1.
Question: {question}
Answer: {answer}
Return only a JSON object: {{"score": 0.85, "reason": "brief reason"}}
Scoring guide:
1.0 = Perfect, accurate, helpful
0.75 = Good, minor issues
0.5 = Acceptable but incomplete
0.25 = Poor, major gaps
0.0 = Completely wrong or harmful'''
response = client.chat.completions.create(
model='gpt-4o-mini', # cheaper model for evaluation
messages=[{'role': 'user', 'content': judge_prompt}],
response_format={'type': 'json_object'}
)
import json
result = json.loads(response.choices[0].message.content)
return float(result['score'])
def maybe_evaluate(question: str, answer: str, sample_rate=0.1):
if random.random() < sample_rate:
score = evaluate_response_quality(question, answer)
quality_tracker.record(score)
return score
return NoneEğilim Algılama için Hareketli Ortalamalar
Tek bir kötü yanıt sistemik bir soruna işaret etmez. Eğilimleri algılamak için bir zaman aralığı üzerindeki (ör. son 1 saat veya son 100 istek) hareketli ortalamaları kullanın. Bir eşiği aşan ve 10 dakikadan uzun süre orada kalan hareketli ortalama gerçek bir soruna işaret ederken kısa süreli bir artış gürültü olabilir. Üstel ağırlıklı hareketli ortalamalar (EWMA), son değişikliklere basit hareketli ortalamalardan daha hızlı tepki verir.
class RollingQualityMonitor:
def __init__(self, window=50, alert_threshold=0.75, ewma_alpha=0.1):
self.scores = []
self.window = window
self.alert_threshold = alert_threshold
self.alpha = ewma_alpha # EWMA decay factor
self.ewma_score = None
def record(self, score: float):
self.scores.append(score)
if len(self.scores) > self.window:
self.scores.pop(0)
# Update exponentially weighted moving average
if self.ewma_score is None:
self.ewma_score = score
else:
self.ewma_score = self.alpha * score + (1 - self.alpha) * self.ewma_score
def should_alert(self) -> bool:
if len(self.scores) < 10: # not enough data yet
return False
return self.ewma_score < self.alert_threshold
def summary(self) -> dict:
if not self.scores:
return {}
return {
'rolling_avg': sum(self.scores) / len(self.scores),
'ewma': self.ewma_score,
'sample_count': len(self.scores),
'alert': self.should_alert()
}
quality_tracker = RollingQualityMonitor()Uyarı Yönlendirme: Slack ve PagerDuty
Uyarılar, doğru kişiye doğru kanaldan ulaşmadıkça yararlı değildir. Uyarıları önem derecesine göre yönlendirin: kalite düşüşü ve maliyet bütçesi uyarılarını, ekibinizin çalışma saatlerinde izlediği bir Slack kanalına gönderin. Kritik eşikleri aşan gecikme uyarılarını (ör. p99 > 30 saniye) ve ani maliyet artışlarını (ör. 5 dakika içinde normalin 10 katı) derhâl nöbetçi ekip üyesine yükseltmek üzere PagerDuty'ye gönderin.
import requests
def send_slack_alert(message: str, severity: str, webhook_url: str):
color = {'critical': '#ff0000', 'warning': '#ff9900', 'info': '#36a64f'}[severity]
payload = {
'attachments': [{
'color': color,
'title': f'LLM Alert [{severity.upper()}]',
'text': message,
'footer': 'AI Pipeline Monitor'
}]
}
requests.post(webhook_url, json=payload)
def send_pagerduty_alert(title: str, details: str, routing_key: str):
payload = {
'routing_key': routing_key,
'event_action': 'trigger',
'payload': {
'summary': title,
'severity': 'critical',
'source': 'ai-pipeline-monitor',
'custom_details': {'details': details}
}
}
requests.post('https://events.pagerduty.com/v2/enqueue', json=payload)
def route_alert(alert_text: str, severity: str):
send_slack_alert(alert_text, severity, SLACK_WEBHOOK_URL)
if severity == 'critical':
send_pagerduty_alert(alert_text, alert_text, PAGERDUTY_ROUTING_KEY)Uyarı Değerlendirme Döngüsü
Uyarı mantığı, istek işleme içine satır içi olarak değil, zamanlanmış bir döngüde çalışmalıdır. Uyarı kontrollerini eşzamansız çalıştırmak, üretim isteklerine gecikme eklenmesini önler. Her 60 saniyede bir çalışan bir arka plan iş parçacığı veya zamanlanmış iş, çoğu uyarı ihtiyacı için yeterlidir. Ölçümleri istek yolunda toplayın, eşikleri arka plan döngüsünde değerlendirin.
import threading
import time
def alert_evaluation_loop(interval_seconds=60):
while True:
try:
# Check latency
latency_alerts = latency_tracker.check_alert(DEFAULT_THRESHOLDS)
for alert in latency_alerts:
route_alert(f'LATENCY: {alert}', 'warning')
# Check quality
quality_summary = quality_tracker.summary()
if quality_summary.get('alert'):
msg = f'QUALITY DEGRADATION: Rolling avg {quality_summary["ewma"]:.2f} below threshold {DEFAULT_THRESHOLDS.min_quality_score}'
route_alert(msg, 'warning')
print(f'Alert check complete. Quality: {quality_summary.get("ewma", "N/A")}')
except Exception as e:
print(f'Alert evaluation error: {e}')
time.sleep(interval_seconds)
# Start in background thread
alert_thread = threading.Thread(target=alert_evaluation_loop, daemon=True)
alert_thread.start()Uyarı Yorgunluğu ve Eşik Ayarlama
Uyarı yorgunluğu, uyarılar o kadar sık tetiklendiğinde ortaya çıkar ki ekip bunları görmezden gelmeye başlar. Bunu önlemek için: ihtiyatlı (yüksek) eşiklerle başlayın ve temel durumunuzu anladıkça eşikleri sıkılaştırın; uyarıların tetiklenmeden önce birden fazla değerlendirme döngüsü boyunca sürmesini zorunlu kılın; ilişkili uyarıları tek bildirimde gruplayın ve hiçbir zaman anlamlı bir eyleme yol açmayan uyarıları düzenli olarak gözden geçirip kaldırın.
class AlertDebouncer:
def __init__(self, required_consecutive_fires=3):
self.required = required_consecutive_fires
self.fire_counts = {} # alert_name -> consecutive fires
self.already_firing = set() # alert_names currently active
def should_fire(self, alert_name: str, condition: bool) -> bool:
if condition:
self.fire_counts[alert_name] = self.fire_counts.get(alert_name, 0) + 1
if self.fire_counts[alert_name] >= self.required and alert_name not in self.already_firing:
self.already_firing.add(alert_name)
return True # fire the alert (first time condition sustained)
else:
if self.fire_counts.get(alert_name, 0) > 0:
self.fire_counts[alert_name] = 0
self.already_firing.discard(alert_name) # condition cleared
return False # either not sustained or already firing (no duplicate alert)
debouncer = AlertDebouncer(required_consecutive_fires=3)İstatistiksel Yöntemlerle Maliyet Anormalliklerini İzleme
Basit eşik uyarıları, iki gün boyunca maliyetin kademeli olarak %50 artması gibi incelikli maliyet anormalliklerini kaçırır. İstatistiksel anormallik algılama kullanın: saatlik maliyetlerinizin hareketli ortalamasını ve standart sapmasını hesaplayın ve geçerli saatin maliyeti ortalamanın N standart sapma üzerinde olduğunda uyarı verin (Z puanı uyarısı). Bu yöntem, hafta içi ve hafta sonu trafiği gibi doğal kullanım örüntülerine otomatik olarak uyum sağlar.
import statistics
def compute_z_score(recent_value: float, historical_values: list[float]) -> float:
if len(historical_values) < 5:
return 0 # not enough data
mean = statistics.mean(historical_values)
stdev = statistics.stdev(historical_values)
if stdev == 0:
return 0
return (recent_value - mean) / stdev
def check_cost_anomaly(current_hour_cost: float, historical_hourly_costs: list[float]) -> str | None:
z = compute_z_score(current_hour_cost, historical_hourly_costs)
if z > 3.0: # more than 3 standard deviations above mean
mean = statistics.mean(historical_hourly_costs)
return f'Cost anomaly: ${current_hour_cost:.2f} this hour (normal: ${mean:.2f}, z={z:.1f})'
return NoneOperasyon Panosu Oluşturma
Uyarılar tepkisel katmandır; canlı operasyon panosu ise proaktif katmandır. Gerçek zamanlı ölçümleri gösteren basit bir pano oluşturun: geçerli p50/p99 gecikmesi, dakika başına istek sayısı, geçerli kalite puanı (hareketli EWMA), bugüne kadarki günlük maliyetin bütçeye göre durumu ve son saatteki en pahalı 5 istek. Bu, ekibin bir uyarının tetiklenmesini beklemeden sistem sağlığını bir bakışta görmesini sağlar.
Hızlı Kontrol
Bu derste LLM uygulaması ölçümleri için uyarılar konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: üç uyarı kategorisi LLM sistemlerini kapsar — gecikme, maliyet ve kalite — ve her biri farklı ölçümleme gerektirir; kayan ortalamalar ve EWMA, tek tek isteklerde yapılan eşik kontrollerine kıyasla kademeli kalite düşüşünü daha iyi tespit eder; uyarıların kararlı hâle getirilmesi ise uyarı tetiklenmeden önce koşulların birden çok değerlendirme döngüsü boyunca sürmesini zorunlu kılarak uyarı yorgunluğunu önler. Sırada istem enjeksiyonu saldırılarını ve yapay zekâ güvenliğini ele alacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı” dersi ücretsiz mi?
Evet — “Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı” dersinde ne öğreneceğim?
p99 gecikmesi, istek başına maliyet ve otomatik kalite puanları için uyarı eşikleri tanımlayın; LLM iş akışınız kötüleştiğinde uyarıları Slack veya PagerDuty'ye yönlendirin. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- LLM Uygulamalarında Hata Ayıklamanın Neden Zor Olduğu
- LangSmith ile İzleme
- Modelden Bağımsız Gözlemlenebilirlik İçin Langfuse
- Gecikme, Maliyet ve Kalite Düşüşleri İçin Uyarı