LLM 에이전트는 실행 중간에 망가집니다. 도구 오류가 연쇄되고, 같은 행동을 반복하면서 루프에 빠지고, 목표에서 이탈하고, 결과를 날조합니다.
표준 해법인 매 스텝마다 두 번째 LLM으로 판단하기는, 감시 LLM 비용이 에이전트 본체보다 더 큽니다.
이 논문은 정상 실행 데이터만으로 학습한, 스텝당 200마이크로초짜리 감시기로 실패를 실시간으로 잡고, 복구까지 합니다.
어떤 결과가 나왔나
2,823개 실제 에이전트 실행 에피소드로 검증했습니다. 모델은 qwen2.5 7b/3b, llama3.1 8b, gemini-2.5-flash까지 다섯 가지이고, 프레임워크도 세 개(bespoke, LangGraph, AutoGen)를 썼습니다.
가장 인상적인 숫자들을 정리하면 이렇습니다:
- 행동 모니터(ESN-CUSUM): 실패의 71%를 5% 오탐 예산에서 탐지, AUROC 0.872
- 결정론적 검증: 실패의 60%를 0% 오탐으로 탐지 (커버리지 체크 포함 96%)
- 수리(롤백 + 재실행): 실패한 실행의 45%를 회수, 작업 성공률 52% → 73%
이 모든 게 스텝당 200마이크로초, 추가 모델 호출 약 1회의 비용으로 이루어집니다.
감시기는 어떻게 생겼나
에이전트가 매 스텝에서 내보내는 관측 신호 세 가지를 모읍니다. 의미 임베딩(char-3-gram 해시, 모델 다운로드 불필요), 토큰 불확실성(logprob 기반), 액션 메타데이터(도구 타입, 지연시간, 에러 여부)입니다.

이걸 echo-state network(ESN)에 먹입니다. ESN은 “고정된 랜덤 순환 맵 + 폐형 최소제곱”이라, 학습이 1.7초면 끝납니다. 같은 데이터로 GRU를 학습하면 68초가 걸리죠.
작은 변화를 누적해서 잡는 건 CUSUM이라는 고전 기법입니다. 채널별로 따로 누적하고, 가장 반응이 큰 채널의 알람을 씁니다.
오탐이 0인 계층이 따로 있다
행동 모니터도 좋지만, 오탐률이 5%이고 모델을 바꾸면 재보정해야 합니다. 여기에 “결정론적 검증”이라는 계층을 얹습니다.
하는 일은 아주 단순합니다. 에이전트가 “총 42달러”라고 했으면, 도구 결과에서 실제 숫자들을 찾아 더해봅니다. 필수 도구 호출이 누락되진 않았는지 확인합니다. 도구 결과가 해당 도구가 반환할 수 있는 형태인지 검사합니다.
이 검증은 정상 에피소드 1,825개 중 단 하나도 오탐으로 건드리지 않았고, 모델족을 바꿔도 재보정 없이 그대로 작동했습니다.

“틀린 곳”만 알려주면 된다
실패로 판정된 실행은 롤백해서 다시 돌립니다. 이때 에이전트에게 어떤 정보를 줄까가 재밌는 발견으로 이어집니다.
정답을 직접 알려주는 것보다 “어느 검증이 실패했는지” 이름만 알려주는 게 더 효과적이었습니다 (45% vs 36% 회수율). 정답을 직접 주는 것보다 스스로 다시 계산하게 두는 것이 더 잘 작동합니다.
솔직한 한계 보고
이 시스템이 못하는 것도 분명히 보고합니다:
- 콘텐츠 오염(결과 텍스트가 바뀌지 않는 경우)에서는 탐지율이 0%에 가깝습니다
- 주입이 아닌 자발적 환각에 대해서는 거의 무작위 수준입니다 (AUROC 0.31–0.42)
- 다른 모델로 옮기면 재보정 없이는 50/50입니다

ESN 말고 다른 건 안 되나
여기서 재밌는 점은, 핵심 기여는 ESN보다 “채널별 max 융합 래퍼”에 가깝다는 겁니다. 같은 래퍼를 GRU에 씌워도 탐지율 0.76까지 올라갑니다. ESN을 쓰는 이유는 오탐율이 더 낮고(0.069 vs 0.113), 학습이 100배 빠르기 때문입니다.

현실적인 배포 조언
에이전트를 운영 중이라면, 비용이 거의 0이고 오탐이 없는 결정론적 검증을 기본으로 깔고, 그 위에 200µs/step 행동 모니터를 얹고, 가장 비싼 LLM 판단자는 앞 두 계층이 못 잡는 것만 에스컬레이션하는 구조가 합리적입니다.
더 실습해보고 싶은 분들께
에이전트 루프와 하네스 최적화를 직접 실험해보고 싶다면 두 자료를 추천합니다:
코드, 2,823개 트레이스, 데모 영상이 모두 공개되어 있습니다.