AI Agents Need Runtime State Checks, Not Just Better Prompts
개요
AI 에이전트의 신뢰성은 단순히 프롬프트 개선을 넘어 런타임 상태 관리의 정확성에 달려있으며, 이는 비용 효율성과 안전한 운영을 위해 필수적입니다.
주요 내용
* AI 에이전트의 런타임 상태 관리의 중요성:
* AI 에이전트는 단순히 모델 호출이 아니라 현재 단계, 작업 상태, 이전 메시지, 도구 결과, 승인, 최대 턴 수, 재시도 횟수, 백그라운드 작업 상태, 사용자 입력 상태, 중지 이유 등 다양한 상태를 가진 상태 머신입니다.
* 이러한 상태가 잘못되면 모델 응답이 좋더라도 에이전트가 부정확하게 작동할 수 있습니다 (예: 사용자 오도, 컨텍스트 누락, 위험한 승인 처리).
* 위험한 패턴: 권한 없는 활동:
* 에이전트 실패는 단순히 충돌이 아니라 "계속됨" 형태로 나타날 수 있으며, 이는 작업 상태가 오래되었거나, 중지 조건이 불분명하거나, 최대 턴 수를 초과했음에도 런타임이 계속될 때 발생할 수 있습니다.
* 비용에 민감한 에이전트의 경우, 불필요한 지속은 추가적인 API 호출로 이어져 비용 증가를 유발합니다.
* 안전한 패턴: 모든 프로바이더 호출 전 런타임 상태 확인:
* AgentRuntimeState 객체 (runId, status, stepCount, maxSteps, retryCount, budgetRemaining, model, modelPriceKnown, hasRealUserApproval, lastStopReason, recentProgress 등)를 정의하고, 각 프로바이더 호출 전에 이 상태를 확인하여 호출 허용 여부를 결정해야 합니다.
* needs_input, missing_real_approval, max_steps_exceeded, unknown_model_pricing, budget_exceeded, no_progress_retry 등의 조건을 검사하여 부적절한 호출을 방지합니다.
* 생성된 텍스트를 승인으로 오인하지 않기:
* 에이전트 트랜스크립트에 나타나는 텍스트가 인간의 명시적인 승인을 의미하는 것은 아닙니다.
* ApprovalEvent 객체 (runId, approvedBy, approvedAt, scope)를 사용하여 명시적인 런타임 이벤트를 승인으로 처리해야 합니다.
* 최대 턴 수는 명확한 중지 이유를 생성해야 함:
* 최대 턴 수에 도달하면 stopped 상태와 함께 max_turns_exceeded와 같은 구조화된 중지 이유를 생성하여 디버깅을 용이하게 하고 우발적인 계속을 방지해야 합니다.
* 상태가 실행을 제어해야 함:
* 백그라운드 에이전트의 경우 상태 정확성이 매우 중요하며, 런타임 상태가 실행의 진실 공급원(source of truth)이 되어야 합니다.
* AI CostGuard의 역할:
* AI CostGuard는 AI 에이전트 애플리케이션을 위한 로컬 우선 TypeScript/Node.js 사전 호출 런타임 가드입니다.
* 재시도 폭풍, 프롬프트 루프, 최대 단계 폭발, 무제한 에이전트 실행, 알 수 없는 모델 가격 책정, 예산 초과, 제어되지 않는 프로바이더 호출과 같은 위험한 프로바이더 호출을 실행 전에 방지하는 데 중점을 둡니다.
시사점
AI 에이전트의 실패는 점차 프롬프트나 모델의 약점이 아닌 런타임 상태 관리의 버그, 승인 문제, 오래된 상태, 불분명한 중지 이유와 같은 런타임 오류로 나타나고 있으며, 백그라운드에서 실행되는 에이전트는 실제 상태 머신과 런타임이 각 프로바이더 호출이 여전히 허용되는지 결정하는 시스템을 필요로 합니다.
댓글
GitHub Discussions