Kihagyás

Reliability, Failure Handling and Deterministic Boundaries

A skill nem attól reliable, hogy „jó a prompt”

Egy production skill körül több failure mode van:

invalid input
model error
bad semantic decision
tool timeout
authorization failure
rate limit
partial external failure
duplicate side effect
infinite loop
cost/latency budget exhaustion

A reliability célja nem az, hogy ezek soha ne történjenek meg.

A cél:

A hibák legyenek felismerhetők, korlátozottak, explicit outcome-mal rendelkezzenek, és ahol lehet, determinisztikus software boundary kezelje őket.

Reliability layers

Hasznos mental model:

Input validation
      ↓
Skill execution
      ↓
Tool/runtime guards
      ↓
Output validation
      ↓
Business validation
      ↓
Side-effect execution
      ↓
Postcondition / audit

Egyetlen layer sem old meg mindent.

Explicit success és failure semantics

Reusable skillnél legyen definiálva, milyen outcome-ok léteznek.

Például:

SUCCESS
PARTIAL_RESULT
INVALID_INPUT
INSUFFICIENT_CONTEXT
NOT_AUTHORIZED
TOOL_UNAVAILABLE
TIMEOUT
BUDGET_EXCEEDED
FAILED

Ez jobb, mint:

try:
    run_skill()
except Exception:
    return "Something went wrong"

A caller így tud policyt alkalmazni.

INSUFFICIENT_CONTEXT → ask for input
TOOL_UNAVAILABLE → retry/fallback
NOT_AUTHORIZED → stop
PARTIAL_RESULT → continue with warning

Recoverable vs terminal failure

Nem minden hiba retry-zandó.

Tipikusan recoverable lehet

network timeout
429 rate limit
transient 503
short-lived tool outage

Tipikusan terminal az adott requestben

invalid input
not authorized
resource permanently not found
business rule violation
unsafe requested action

Gyenge pattern:

retry everything 3 times

Ez csak:

  • lassít,
  • növeli a costot,
  • felesleges loadot generál,
  • write operationnél veszélyes lehet.

Retry policy legyen explicit

Például:

TOOL_TIMEOUT:
  max_attempts: 3
  backoff: exponential

RATE_LIMITED:
  respect_retry_after: true

NOT_AUTHORIZED:
  max_attempts: 0

INVALID_INPUT:
  max_attempts: 0

A retry policy tipikusan runtime/application concern, nem prompt text.

Model retry külön kérdés

Ha a modell invalid structured outputot ad, schema-constrained platformon ezt részben a platform kezelheti.

Semantic failure esetén:

model gives unsupported conclusion

nem biztos, hogy ugyanazt a promptot újra elküldeni jó stratégia.

Lehetséges repair:

original result
 ↓
deterministic validation fails
 ↓
repair prompt with exact validation error
 ↓
new result

De itt is legyen max attempt és budget.

Precondition és postcondition

Klasszikus design-by-contract szemlélet jól működik.

Precondition

Mielőtt a skill fut:

input schema valid
required context available
required capability present
permission scope valid

Postcondition

Skill után:

output schema valid
required evidence present
forbidden action not requested
business invariants preserved

Példa:

Refund Recommendation Skill

postcondition:

amount >= 0
currency supported
recommendation in allowed enum

A tényleges refund végrehajtása előtt további business validation kell.

Deterministic boundary: model recommendation vs business decision

Például a model output:

{
  "recommendation": "APPROVE",
  "amount": 500
}

A business policy:

amount > 100 EUR → manager approval required

A helyes flow:

model recommendation
      ↓
policy engine
      ↓
manager approval required

nem:

model said APPROVE → refund

A model semantic judgementet adhat; a hard invariantet kód enforce-olja.

Timeout minden external boundaryn

Egy agentic skill több helyen blokkolhat:

model call
tool call
retrieval
database
external API
human approval

Mindennek legyen timeout vagy explicit waiting state.

Például:

model timeout: 60s
tool timeout: 10s
overall skill timeout: 90s

A konkrét szám domainfüggő, de az elv:

Ne legyen implicit végtelen várakozás.

Execution budget

Többlépéses skill/agent executionnél több budget is kellhet:

max model calls
max tool calls
max iterations
max tokens
max wall-clock time
max cost

Például:

max_steps = 12
max_tool_calls = 20
max_runtime = 2 minutes

Ha elfogy:

BUDGET_EXCEEDED

legyen explicit outcome.

Stop condition

Egy jó execution nem csak azt tudja, hogyan folytassa, hanem azt is, mikor álljon meg.

Stop lehet:

goal satisfied
terminal failure
user cancellation
approval denied
budget exceeded
no new information
repeated action detected

Ez különösen fontos agentic loopoknál.

Loop detection

Runtime nyilvántarthatja:

same tool + same args repeated N times
same plan repeated
no state change across steps

Például:

query_logs(service=A, last=5m)
query_logs(service=A, last=5m)
query_logs(service=A, last=5m)

ha nincs új információ, állítsuk meg vagy változtassunk stratégiát.

Idempotency write műveleteknél

A retry legnagyobb veszélye side effectnél.

Példa:

create refund
 ↓
server processed it
 ↓
network response lost
 ↓
client retries

Idempotency nélkül:

duplicate refund

Használjunk:

operation_id / idempotency_key

és az external boundary garantálja:

same key → same logical operation

A modell ne generáljon minden retry-nál új operation ID-t.

At-most-once vs at-least-once gondolkodás

Agentic write operationnél is klasszikus distributed systems kérdés van.

Nem az AI a probléma lényege.

Kérdezzük meg:

Mi történik, ha a request sikerült, de a választ nem kaptuk meg?

Ha erre nincs válaszunk, a retry policy veszélyes.

Compensation

Nem minden side effect rollbackelhető egyszerűen.

Példa:

1. create GitHub issue
2. send Slack notification
3. update tracking DB

Ha a 3. hibázik, nem biztos, hogy az első kettőt törölni akarjuk.

Itt saga/compensation szemlélet jöhet:

record partial state
retry failed step
or execute compensating action

A skill orchestration ugyanúgy distributed workflow problem lehet.

Fallback

Tool unavailable esetén lehet fallback:

primary metrics provider unavailable
 ↓
secondary provider

vagy:

live data unavailable
 ↓
return partial result with explicit warning

Veszélyes fallback:

live data unavailable
 ↓
use model training memory as current truth

Current external facthez ne legyen hallucination fallback.

Graceful degradation

Például PR Review:

diff available ✅
source files available ✅
CI results unavailable ❌

Lehet:

PARTIAL_RESULT

és:

"Code review completed; CI/test-result verification was unavailable."

Ez sokszor jobb, mint teljes failure.

Output validation több szinten

Schema validation

required fields
enums
types

Referential validation

Például finding location:

file exists?
line exists?

Evidence validation

finding cites retrieved evidence?

Business validation

recommended action permitted?

Ezek közül sok deterministic.

Example: deployment rollback recommendation

Skill output:

{
  "recommendation": "ROLLBACK",
  "evidence": [
    "5xx increased from 0.2% to 18% after version 7.5.0"
  ]
}

Runtime:

validate deployment still at 7.5.0
 ↓
validate rollback target exists
 ↓
check authorization
 ↓
require production approval
 ↓
execute rollback with operation id

Ez protects against stale reasoning.

A skill döntése és az action execution között változhatott a világ.

Ezért side effect előtt érdemes revalidate current state.

Time-of-check vs time-of-use

AI workflow-kban is klasszikus TOCTOU probléma lehet.

Step 1: skill reads account status
Step 2: user/account changes
Step 3: skill executes action based on stale status

Mutating action előtt friss authoritative validation kell.

Human fallback

Ha a rendszer nem tud biztonságosan dönteni:

low confidence
conflicting evidence
high-risk action
policy ambiguity

legyen lehetőség:

ESCALATE_TO_HUMAN

A human review nem failure, hanem explicit control path.

Observability a reliability része

Ha nem tudjuk megmondani:

which skill version ran?
which model?
which tools?
which retry?
where did it timeout?

akkor a reliability probléma nehezen javítható.

Ez a következő evaluation/observability fejezetben mélyebb téma lesz.

Anti-pattern: catch-all retry

except Exception:
    retry()

különösen write operationnél veszélyes.

Classification kell.

Anti-pattern: prompt-only invariant

"Never refund more than 100 EUR."

Ha ez hard business rule, legyen kódban is.

Anti-pattern: unlimited autonomous retry

try until it works

Ez cost explosiont, infinite loopot vagy repeated side effectet okozhat.

Anti-pattern: silent fallback to guessed data

Tool failure után:

"probably..."

current fact esetén legyen explicit unavailable state.

Takeaways

  • Reliability több layerből áll; nem prompt quality kérdés.
  • Legyen explicit success/failure taxonomy.
  • Különítsük el recoverable és terminal hibákat.
  • Retry policy legyen error-aware, bounded és side-effect-aware.
  • Precondition/postcondition és deterministic validation vegye körül a model executiont.
  • Hard business invariantet ne prompt enforce-oljon.
  • Használjunk timeoutot és execution budgetet.
  • Agentic executionnek explicit stop condition kell.
  • Write retryhoz idempotency és operation state szükséges.
  • Mutating action előtt revalidate current authoritative state-et.
  • Partial result és human escalation legitim outcome.
  • Current data hiányára ne legyen hallucination fallback.