Розробка SLA-системи для AI-агентів
SLA (Service Level Agreement) для AI-агентів - формальні зобов'язання щодо доступності, швидкості та якості. На відміну від звичайного SLA: якість відповіді - суб'єктивна метрика, що потребує спеціальних підходів до виміру.
Типові SLA метрики для AI-агентів
| Метрика | Звичайне SLA | AI-специфіка |
|---|---|---|
| Availability | > 99.5% | Включно з LLM provider availability |
| Response time (p95) | < 5s | Залежить від довжини відповіді (tokens/s) |
| Error rate | <1% | Включаючи AI-помилки (hallucination, refusal) |
| Task completion | N/A | > 95% завдань завершуються успішно |
| Quality score | N/A | > 4.0/5.0 LLM-суддя |
Моніторинг SLA у реальному часі
from dataclasses import dataclass
from datetime import datetime, timedelta
@dataclass
class SLADefinition:
name: str
metric: str
threshold: float
comparison: str # "gte" / "lte"
measurement_window: int # минуты
alerting_threshold: float # процент нарушений для алерта
SLA_SET = [
SLADefinition("availability", "uptime_pct", 99.5, "gte", 60, 0.1),
SLADefinition("p95_latency", "p95_latency_ms", 8000, "lte", 5, 0.05),
SLADefinition("task_success", "success_rate", 0.95, "gte", 60, 0.1),
SLADefinition("quality", "avg_quality_score", 4.0, "gte", 1440, 0.05),
]
class SLAMonitor:
def check_sla(self, agent_name: str) -> SLAStatus:
violations = []
for sla in SLA_SET:
current_value = self.metrics.get(agent_name, sla.metric, sla.measurement_window)
is_met = self._compare(current_value, sla.threshold, sla.comparison)
if not is_met:
violations.append(SLAViolation(
sla_name=sla.name,
expected=sla.threshold,
actual=current_value,
since=self.metrics.get_violation_start(agent_name, sla.name)
))
return SLAStatus(
agent_name=agent_name,
is_healthy=len(violations) == 0,
violations=violations,
checked_at=datetime.utcnow()
)
SLA Budgets (Error Budgets)
Google SRE підхід: SLA 99.5% availability = 0.5% error budget. Можна витратити на деплої, експерименти. При вичерпанні freeze на зміни.
class ErrorBudgetTracker:
def calculate(self, agent_name: str, period_days: int = 30) -> ErrorBudget:
sla_availability = 0.995 # 99.5%
total_minutes = period_days * 24 * 60
# Суммарное время недоступности за период
downtime_minutes = self.metrics.get_downtime(agent_name, days=period_days)
actual_availability = 1 - (downtime_minutes / total_minutes)
budget_minutes = total_minutes * (1 - sla_availability) # 216 минут за 30 дней
consumed_minutes = downtime_minutes
remaining_minutes = budget_minutes - consumed_minutes
remaining_pct = remaining_minutes / budget_minutes
return ErrorBudget(
total_budget_minutes=budget_minutes,
consumed_minutes=consumed_minutes,
remaining_minutes=remaining_minutes,
remaining_pct=remaining_pct,
is_exhausted=remaining_pct <= 0,
burn_rate=consumed_minutes / budget_minutes / (period_days / 30)
)
Звітність для клієнтів
Щомісячний SLA-звіт включає: фактичні значення vs SLA targets, час порушень з причинами, RCA (Root Cause Analysis) за інцидентами, план заходів. Публічний status page для enterprise клієнтів з історією інцидентів та планових робіт.
Контрактні штрафи та кредити
Для enterprise SLA із фінансовими зобов'язаннями: автоматичний розрахунок кредитів при порушенні SLA. Наприклад: availability 99.0–99.5% → 5% credit, < 99.0% → 15% credit. Система автоматично розраховує та ініціює credit notes через білінгову систему.







