Kihagyás

10 – Reliability és Determinisztikus Boundaryk

Az LLM-alapú rendszerek két külön világot kombinálnak:

probabilistic model behavior
          +
deterministic software behavior

A megbízható AI application ott működik jól, ahol ezek a boundaryk explicitek.

Alapszabály:

Az LLM-et interpretationre, generationre, rankingre és flexible reasoningre használd. Determinisztikus software garantálja a contractokat, permissionöket, invariantokat, pénzügyi szabályokat, identityt, persistence-t és side effecteket.

Miért fontos ez?

Egy normál functiontől elvárjuk, hogy pontosan a kód szerint fusson.

result = calculate_vat(1000, 0.27)

Azonos input és kód mellett ugyanazt az eredményt várjuk.

Egy LLM-call más:

same prompt
same model
same context
    ↓
possibly different wording or decision

Még stabil model behaviour mellett is törékeny architecture-t kapunk, ha tökéletesen determinisztikus komponensként kezeljük.

Döntsd el, mit dönthet el a modell

Hasznos architecture kérdés:

Mi igényel judgmentet?
Mi igényel guarantee-t?

Példa: support-ticket routing.

Ésszerű LLM responsibility:

classify message as:
- billing
- technical
- account
- other

Deterministic responsibility:

if category == "billing":
    assign billing queue

Az LLM értelmezi a nyelvet. Az application hajtja végre a valódi routing rule-t.

Kritikus invariant ne csak promptban legyen

Gyenge design:

System prompt:
"Never approve refunds above 500 EUR."

Ez segíthet a model behaviouren, de nem ez legyen az enforcement layer.

Jobb:

if refund.amount > 500:
    require_manager_approval()

A prompt elmagyarázhatja a policyt, de a determinisztikus kód enforce-olja.

Structured output mint boundary

Tegyük fel, hogy a modell requestet klasszifikál.

Ehelyett:

"This seems quite urgent and probably related to billing."

inkább contract:

{
  "category": "billing",
  "priority": "high"
}

Majd használat előtt validáld.

LLM
 ↓
structured result
 ↓
schema validation
 ↓
business validation
 ↓
application logic

Ez csökkenti a determinisztikus core-ba bejutó free-form model behaviour mennyiségét.

A validation több rétegű

Példa:

{
  "currency": "EUR",
  "amount": 1000000
}

Lehet valid JSON és schema-valid is.

Business logic mégis elutasíthatja.

Gondolkodj rétegekben:

1. Syntax / transport validity
2. Schema / type validity
3. Business-rule validity
4. Authorization validity
5. Side-effect execution

Ne mosd ezeket egyetlen promptba.

Retry

A retry hasznos transient failure esetén, de veszélyes vakon alkalmazva.

Lehetséges retryable failure:

  • model timeout,
  • provider 5xx,
  • temporary rate limit,
  • network error,
  • temporary tool outage.

Nem automatikusan retryable:

  • invalid user input,
  • permission denied,
  • business-rule violation,
  • rossz promptból eredő ismételt malformed logic,
  • non-idempotent side effect, amely lehet, hogy már sikerült.

A jó retry policy különbséget tesz failure classok között.

failure
  ↓
classify
  ├── transient → retry
  ├── permanent → stop
  └── ambiguous side effect → reconcile before retry

Idempotency

Az idempotency különösen fontossá válik, amikor agent vagy tool-enabled system actiont ismételhet.

Példa:

LLM → create_payment(100 EUR)
network timeout
application nem tudja, sikerült-e a payment
retry

Idempotency nélkül a customer kétszer fizethet.

Biztonságosabb:

create_payment(
    amount=100,
    idempotency_key="order-123-payment"
)

Az external system felismeri, hogy az ismételt request ugyanaz a logical operation.

Ez nem specifikusan AI elv. AI systemben azért fontosabb, mert a retry és loop gyakoribb.

Timeoutok és budgetek

Minden model- vagy tool-callnak legyen limitje.

Példák:

  • request timeout,
  • maximum tool-call count,
  • maximum loop iterations,
  • maximum total elapsed time,
  • maximum token usage,
  • maximum cost per task.

Explicit limit nélkül:

agent
 ↓
retry
 ↓
search
 ↓
retry
 ↓
tool
 ↓
search
 ↓
...

korlátlan processzé válhat.

Stop conditionök

Agentic workflow-kban determinisztikus stop condition kell a probabilisztikus reasoning köré.

Példák:

stop if task completed
stop if max_steps == 10
stop if cost > budget
stop if tool returns terminal error
stop if human approval is required

Ne csak a modellre bízd, hogy eldöntse, mikor végzett.

Fallbackok

Fallback több szinten létezhet.

Model fallback

primary model unavailable
       ↓
secondary model

Behavior fallback

AI classification confidence/evaluation check fails
       ↓
manual queue

Tool fallback

semantic search unavailable
       ↓
keyword search

Product fallback

AI answer cannot be supported safely
       ↓
show source documents or escalate to human

A fallback legyen szándékosan tervezett, ne random emergency code.

A confidence trükkös

Ne feltételezd, hogy egy model-generated szám, például:

{
  "confidence": 0.98
}

kalibrált probability.

A modell képes confidence mezőt generálni, mert ezt kérted, de ebből nem következik, hogy a 0.98-ra címkézett esetek 98%-a helyes.

Ha confidence fontos, kalibráld evaluation data alapján, vagy használj megbízhatóbb signalokat.

Példa: invoice extraction

Cél: invoice data kinyerése uploaded textből.

Model output:

{
  "invoice_number": "INV-2026-991",
  "currency": "EUR",
  "total": 1250.50
}

Reliable flow:

uploaded document
      ↓
LLM extraction
      ↓
schema validation
      ↓
check currency against allowed list
      ↓
check total >= 0
      ↓
check invoice number uniqueness
      ↓
possibly verify against source text
      ↓
persist domain object

A modell fuzzy extractiont végez. Az application védi az invariantokat.

Példa: code-generation agent

Az agent code change-et javasol.

Gyenge flow:

LLM writes code
 ↓
merge

Jobb flow:

LLM writes code
 ↓
formatter
 ↓
compiler / type checker
 ↓
unit tests
 ↓
integration tests
 ↓
static analysis
 ↓
review / policy checks
 ↓
merge

Minél több determinisztikus verificationt tudsz a generation után tenni, annál biztonságosabban automatizálhatsz.

Az AI-assisted software engineering egyik legerősebb patternje:

A modell generáljon candidate-et. A determinisztikus rendszer ellenőrizze azt, ami ellenőrizhető.

Failure recovery

A megbízható rendszer explicit failure state-et tart.

Ehelyett:

something failed → ask model to try something else

strukturált state:

{
  "step": "create_ticket",
  "attempt": 2,
  "status": "failed",
  "error_code": "RATE_LIMIT",
  "retryable": true
}

Így az orchestration logic, nem pusztán a model intuition dönti el a következő lépést.

Observability

Production systemben elegendő adatot rögzíts a failure és cost megértéséhez, sensitive content kiszivárogtatása nélkül.

Hasznos signalok:

  • model name/version,
  • prompt/template version,
  • request latency,
  • input/output token counts,
  • tool calls,
  • tool latency,
  • retry count,
  • finish reason,
  • validation failures,
  • evaluation metrics,
  • total task cost.

Observability nélkül az AI reliability probléma könnyen random anecdote-nak tűnik.

A reliability system-level

Ne csak ezt kérdezd:

"How accurate is the model?"

Hanem ezt:

What happens when the model is wrong?

Nem tökéletes modell is támogathat nagyon megbízható applicationt, ha a hibák boundedek, detectálhatók, validálhatók vagy biztonságosan recoverelhetők.

Erősebb modell nem váltja ki a jó system designt.

Gyakorlati boundaryk

Jó LLM-candidate:

  • summarize text,
  • classify ambiguous language,
  • extract fuzzy information,
  • generate drafts,
  • rank candidates,
  • propose plans,
  • interpret user intent.

Jó deterministic-code candidate:

  • authorization,
  • monetary calculations,
  • schema validation,
  • database constraints,
  • retry policy,
  • workflow limits,
  • rate limiting,
  • state transitions,
  • final safety checks.

Mentális modell

Probabilistic intelligence
        ↓
controlled interface
        ↓
deterministic guardrails
        ↓
real side effects

A cél nem az, hogy az LLM determinisztikus legyen.

A cél olyan rendszer, ahol a probabilisztikus behaviour ott használatos, ahol értéket ad, és determinisztikus boundaryk védik azt, ahol guarantee szükséges.