Fallback och degradering i AI-tjänster
Kunna designa kill-switches och degraderade lägen så att tjänsten aldrig går helt ner.
Förkunskaper
Intuition
En AI-tjänst beror på saker du inte kontrollerar: LLM-leverantören, GPU:n, en vektordatabas, en budget. Alla kommer att fela. Frågan är vad användaren ser då.
Degradering = tjänsten gör mindre men går inte ner:
- LLM nere → förskrivna förklaringar, regelbaserad rättning, «handledaren är tillfälligt avstängd».
- Retrieval nere → svara utan källor men säg det.
- Budget slut → stäng dyra funktioner, behåll billiga.
Kill-switch = en flagga en människa kan slå på på sekunder, utan deploy: LLM_OFF, SIGNUP_OFF, PANIC (bara statisk sida). Den behövs för incidenter du inte förutsett.
Regeln: fel i beroenden degraderar; fel i egen logik stoppar (hellre 503 än fel svar). Och degraderingen måste testas — en fallback som aldrig körts fungerar inte.
Kod
import time, httpx, logging
log = logging.getLogger("svc")
class LLMRouter:
def __init__(self, flags, budget):
self.flags, self.budget = flags, budget
self.fail_until = 0.0 # enkel circuit breaker
async def complete(self, prompt, fallback_text):
if self.flags.get("LLM_OFF"):
return fallback_text, "degraded:flag"
if self.budget.exhausted():
return fallback_text, "degraded:budget"
if time.time() < self.fail_until:
return fallback_text, "degraded:breaker"
try:
async with httpx.AsyncClient(timeout=20) as c:
r = await c.post(URL, json={"prompt": prompt}); r.raise_for_status()
self.budget.charge(r.json()["usage"])
return r.json()["text"], "ok"
except (httpx.HTTPError, KeyError) as e:
log.warning("llm_fail %s", type(e).__name__)
self.fail_until = time.time() + 60 # öppna brytaren en minut
return fallback_text, "degraded:error"
# test: patcha httpx så att anropet failar → förvänta fallback_text och status som börjar med "degraded"
AI-grafens egen LLMRouter gör exakt detta: ops.flag, dagsbudget och fallback till nodens förskrivna text.
Behärskning innebär
- Designar kill-switches och degraderade lägen
- Skiljer fel som ska stoppa tjänsten från fel som ska degradera
- Testar degraderingen, inte bara lyckade vägen
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Google SRE Book — Handling Overload / Cascading Failures (CC BY-NC-ND) — CC BY-NC-ND 4.0 (endast hänvisning)
- Wikipedia — Circuit breaker design pattern (CC BY-SA 4.0) — CC BY-SA 4.0