서론
AI 에이전트가 액션(action)을 전송할 때 — 메시지를 보내거나, 슬롯을 예약하거나, 설정을 토글하는 경우 — 그 액션이 성공했는지 여부를 알아야 합니다. 하지만 모든 백엔드가 동일한 품질의 답변을 제공하는 것은 아닙니다.
어떤 백엔드는 정확히 무슨 일이 일어났는지 알려줍니다. 어떤 백엔드는 사용자가 스스로 파악할 수 있을 만큼 충분한 정보를 제공합니다. 그리고 어떤 백엔드는 아무것도 제공하지 않습니다.
만약 에이전트가 모든 백엔드를 동일하게 취급한다면, 제공자(provider)가 응답을 멈췄을 때 잘못된 결정을 내리게 됩니다. 해결책은 액션을 전송한 '후'가 아니라, 사전에 명시적으로 역량(capability)을 모델링하는 것입니다.
네 가지 계층 (The Four Tiers)
`enum class ProviderCapabilityTier {
FULL, // 전달 및 수락 확인 완료
RECONCILABLE, // 직접적인 확인은 없지만, 전송 후 상태를 조회하여 비교 가능
...
FULL — 제공자가 확정된 결과를 반환합니다. 전달이 발생했고 액션이 수락되었음을 알 수 있습니다. 쓰기 API가 있는 캘린더 제공자나 전달 영수증(delivery receipts)을 사용하는 메시징 플랫폼 등이 이에 해당합니다.
RECONCILABLE — 전송 시점에 직접적인 확인은 없지만, 나중에 제공자의 상태를 조회하여 전송 전 스냅샷과 비교할 수 있습니다. 이 차이점(diff)이 무엇이 변경되었는지 알려줍니다.
PARTIAL — 제공자가 수신을 인정하지만, 실제로 액션이 수행되었는지 여부는 알 수 없습니다. 도착했다는 것은 알지만, 성공적으로 처리되었다는지는 모르는 상태입니다.
BLIND — 전송하고 잊어버립니다(Fire and forget). 영수증도 없고 조회 가능한 상태 정보도 없습니다. 단지 액션을 전송했다는 것만 압니다.
왜 전송 전에 이것이 중요한가 (Why It Matters Before Dispatch)
이 계층은 에이전트의 재조정 전략(reconciliation strategy)이 무엇이어야 하는지를 결정합니다. 그리고 이 결정은 이미 오지 않는 응답을 기다리고 있는 '후'가 아니라, 액션을 전송하기 '전'에 이루어져야 합니다.
`data class DispatchStrategy(
val tier: ProviderCapabilityTier,
val reconciliationKey: String?,
...
액션 기록에 연결하기 (Wiring It Into the Action Record)
지난 10월 22일 게시물에서 언급했듯이, ActionRecord는 전달 및 수락 상태를 포함합니다. 여기에 계층(tier) 정보가 추가됩니다:
`data class ActionRecord(
val actionId: String,
val dispatchId: String,
...
‘BLIND’ 제공자의 경우, eligibleForReconciliationAt은 Instant.MAX입니다. 즉, 해당 기록은 자동화된 조정(reconciliation) 대상이 될 수 없습니다. 사람이 개입하거나 상위 레벨의 신호가 해결하기 전까지는 계속 DENIED_UNRESOLVED 상태를 유지합니다.
‘RECONCILABLE’ 제공자의 경우, 일관성 창(consistency window)이 조정 작업이 기록에 접근하기 전에 최소한의 나이를 강제합니다. 이는 지난 10월 22일 게시물에서 다룬 것과 동일한 복제 지연 보호 기능입니다.
규칙 (The Rule)
계층(tier)은 실패 시점이 아니라 등록 시점에 모델링해야 합니다. 전송(dispatch)이 조용히 실패했을 때는 이미 너무 늦어서 어떻게 처리할지 결정하기 어렵습니다.
에이전트가 상호작용하는 모든 제공자는 선언된 계층을 갖게 됩니다. 모든 액션 기록은 그 계층이 내포하는 전략을 담고 있습니다. 다운스트림(downstream)의 조정 및 확인 처리 시스템은 단순히 기록을 읽기만 하면 되며, 어떤 제공자와 다루고 있는지 알 필요가 없습니다.
지금까지의 시리즈:
- 파트 1: 두 축 상태 모델(Two-axis state model) + DENIED_UNRESOLVED
- 파트 2: 컨텍스트 전파(Context propagation) + 신뢰도 임계값(confidence thresholds)
- 파트 3: 지연된 확인 경쟁(Late confirmation race) + 최종 상태 확인(terminal state check)
- 파트 4: 제공자 역량 계층(Provider capability tiers) ← 오늘 (today)