Observation and Environment State¶
Observation: a loop kapcsolata a valósággal¶
Egy agentic loop nem csak a saját korábbi szövegére reagál. A környezetből új adatot kell kapnia.
Ezt nevezhetjük observationnek.
Példák:
- tool result,
- API response,
- file content,
- test output,
- database query result,
- deployment state,
- metrics/logs,
- user response,
- approval/rejection,
- external event.
Mental model:
Environment
↓
Observation
↓
Runtime state
↓
Model context
↓
Next decision
A kulcs:
A modell belső feltételezése nem environment state.
Current state vs model assumption¶
Például egy coding agent korábban ezt olvasta:
PaymentRetryTest = failing
Majd módosított kódot.
Ezután nem feltételezheti:
"Most már biztos passzol."
Új observation kell:
run_test(PaymentRetryTest)
↓
exit_code = 0
Ez a closed-loop működés lényege.
Authoritative state¶
Nem minden contextben lévő információ ugyanolyan autoritatív.
Például deployment esetén:
User says: production runs v7.4.1
Old memory says: production runs v7.3.9
Deployment API says: production runs v7.4.2
Ha az aktuális production state a kérdés, akkor a deployment API lehet canonical source.
Hasznos kategóriák:
Authoritative current state
Derived state
Historical observation
User-reported state
Model hypothesis
Ezeket ne mossuk össze.
Observation envelope¶
Production runtime-ban hasznos lehet minden observationt metadata-val tárolni.
Például:
{
"type": "DEPLOYMENT_STATE",
"source": "kubernetes-adapter",
"observed_at": "2026-08-30T14:40:00Z",
"scope": "production/payment-service",
"status": "SUCCESS",
"data": {
"version": "7.4.2",
"ready_replicas": 4,
"desired_replicas": 4
}
}
Ez több szempontból jobb, mint pusztán:
"Everything looks healthy."
mert van:
- source,
- timestamp,
- scope,
- structured payload,
- error state.
Stale observation¶
Egy observation idővel elavulhat.
Például:
14:00 deployment healthy
14:05 new rollout begins
14:06 agent wants to restart one pod based on 14:00 state
A 14:00 observation már lehet stale.
Ezért bizonyos action előtt kellhet refresh.
sensitive action
↓
refresh relevant state
↓
validate preconditions
↓
execute
Observe-before-act¶
Különösen mutating action előtt fontos pattern.
Például:
Goal: stop failed staging deployment
Gyenge:
model remembers deployment is still running
↓
cancel_deployment(id)
Jobb:
get_deployment(id)
↓
status == RUNNING ?
↓
request cancel
Ez csökkenti a race condition és stale-assumption problémát.
Time-of-check vs time-of-use¶
Klasszikus TOCTOU probléma agentic rendszernél is létezik.
observe balance = 100 EUR
↓
other process changes balance
↓
agent acts based on old balance
A valódi enforcementet a tool/domain service végezze atomikusan, ahol szükséges.
A modell observationje nem helyettesíti a transaction boundaryt.
Observation normalization¶
External tool output gyakran túl nagy vagy provider-specific.
Például Kubernetes API response helyett a modelnek lehet elég:
{
"deployment": "payment-service",
"version": "7.4.2",
"ready": 3,
"desired": 4,
"conditions": [
"Progressing=True",
"Available=False"
]
}
Architecture:
External system
↓
Adapter
↓
Normalized observation
↓
Agent runtime
Előny:
- kevesebb token,
- kisebb coupling,
- könnyebb evaluation,
- könnyebb security filtering,
- stabilabb context.
Raw data vs interpreted observation¶
Néha külön érdemes tárolni:
Raw evidence
↓
Normalized observation
↓
Model interpretation
Például log line:
ERROR duplicate key value violates unique constraint payment_id_key
Normalized observation:
{
"category": "DATABASE_CONSTRAINT_ERROR",
"resource": "payment",
"constraint": "payment_id_key"
}
Model hypothesis:
A retry may be attempting to insert the same payment twice.
A hypothesis nem ugyanaz, mint az observation.
Fact vs inference separation¶
Ez különösen fontos incident diagnosisnál.
Például:
FACT:
Error rate increased from 0.2% to 12% at 14:03.
FACT:
Deployment v7.4.2 completed at 14:02.
HYPOTHESIS:
v7.4.2 caused the regression.
A rendszer akkor lesz auditálhatóbb, ha ezt explicit külön kezeli.
Missing observation¶
Ha egy szükséges adat nem érhető el:
query_metrics → timeout
ne generáljunk fake state-et.
Explicit observation status:
{
"type": "ERROR_RATE",
"status": "UNAVAILABLE",
"reason": "METRICS_TIMEOUT"
}
A következő decision lehet:
RETRY
USE_ALTERNATIVE_SOURCE
ASK_HUMAN
STOP_BLOCKED
Unknown vs false¶
Nagyon fontos háromértékű mental model:
TRUE
FALSE
UNKNOWN
Például:
"Is production healthy?"
Ha metrics API nem elérhető, a válasz nem:
healthy = false
hanem:
health = UNKNOWN
Az UNKNOWN megakadályozza, hogy a hiányzó adatból negatív vagy pozitív tényt fabrikáljunk.
Observation freshness policy¶
Nem minden adatnál ugyanaz a freshness igény.
Például:
Architecture guideline → days/months
Repository file content → current commit
Deployment state → seconds/minutes
Account balance → immediate/current
Human approval → current run state
A runtime capability metadata tartalmazhat ilyet:
freshness_requirement = 30s
vagy action-specific rule:
Before mutating deployment, state must be observed within last 10 seconds.
Observation cache¶
Caching hasznos, de veszélyes.
Jó lehet:
repository metadata
static policy
unchanged artifact hash
Veszélyes lehet:
current balance
current deployment state
lock ownership
approval status
A cache policy domainfüggő legyen, ne általános agent trükk.
Event-driven observations¶
Nem minden observationt az agent kérdez le.
Lehet event:
build finished
approval granted
deployment failed
user replied
Ilyenkor:
Event
↓
update run state
↓
resume loop
Ez később fontos long-running agenteknél.
Human response mint observation¶
Például agent kérdez:
"A vagy B környezetet vizsgáljam?"
User:
"Productiont."
Ez nem új top-level promptként kezelendő feltétlenül, hanem az aktuális run state-hez tartozó observationként:
WAITING_FOR_HUMAN
↓
human_response(environment=production)
↓
RUNNING
Observation history vs current state¶
Különválasztás:
Observation log = mi történt
Current state = mi igaz most a runtime szerint
Például:
obs1: test failed
obs2: patch applied
obs3: test passed
Current state:
target_test = PASS
A history audit/debug célra kell; a current state decisionhöz.
Context projection¶
Nem kell minden observationt minden model callba visszatenni.
Gyenge:
all 100 previous tool results
+ all logs
+ all intermediate text
Jobb:
canonical state
↓
context builder
↓
current goal
relevant recent observations
important historical evidence
active constraints
Ez összeköti az observationt a context engineeringgel.
Example: incident diagnosis¶
Goal: explain checkout error spike
Iteration 1:
Action: query error rate
Observation: 12% error from 14:03
Iteration 2:
Action: read recent deployments
Observation: payment-service v7.4.2 deployed 14:02
Iteration 3:
Action: query affected logs
Observation: duplicate-key errors began 14:03
Model hypothesis:
The new release likely introduced duplicate writes in retry path.
A runtime továbbra is külön tárolja a tényeket és a hypothesis-t.
Anti-pattern: conversation history mint truth¶
Earlier assistant message:
"Production is probably on v7.4.1"
Nem válhat canonical environment state-té attól, hogy korábban le lett írva.
Current truth újraobserválható.
Anti-pattern: prose-only tool result¶
Gyenge:
"Looks like deployment mostly works but one thing seems odd."
Jobb tool contract:
{
"status": "DEGRADED",
"ready": 3,
"desired": 4,
"unhealthy_pods": ["payment-7cc8f"]
}
Majd a modell magyarázza.
Anti-pattern: stale state alapján write¶
Soha ne legyen a logika:
model saw state 10 minutes ago
→ destructive action now
ha a domain current-state validationt igényel.
Takeaways¶
- Az observation a loop friss kapcsolata a környezethez.
- Model assumption, hypothesis és environment fact külön kategória.
- Current state-hez használjunk authoritative source-ot és lehetőleg timestampelt observationt.
- Mutating action előtt gyakran kell observe-before-act és friss precondition check.
- Tool outputot érdemes normalizálni, de a raw evidence és model interpretation maradjon megkülönböztethető.
- Hiányzó adat legyen
UNKNOWN/UNAVAILABLE, ne kitalált érték. - Freshness és caching policy domainfüggő.
- Observation history és canonical current state ne legyen ugyanaz.
- A context builder a state releváns projectionjét adja a modellnek, nem feltétlen a teljes történetet.