당신의 AI 에이전트는 완료되었다고 말했지만, 사실은 아니었습니다. 이를 포착하는 방법
요약
AI 에이전트가 시스템상으로는 성공적으로 종료되었음에도 불구하고, 실제로는 잘못된 결과물을 생성하거나 자원을 낭비하는 실패 모드들을 분석합니다. 기존 인프라 모니터링이 포착하지 못하는 에이전트 특유의 오류 유형과 그 위험성을 다룹니다.
핵심 포인트
- 기존 모니터링은 인프라 상태만 감시하여 에이전트의 논리적 오류를 놓침
- 고스트 런: 작업은 완료되었으나 유효하지 않은 결과물을 생성하는 현상
- 무한 루프: 도구 호출을 반복하며 토큰 비용만 발생시키고 수렴하지 못하는 상태
- 정체: 타임아웃 없이 리소스나 응답을 기다리며 진행이 멈춘 상태
지난 화요일, 콘텐츠 생성 에이전트 (content generation agent)가 밤새 작동했습니다. 모든 작업을 완료했습니다. 모든 작업에 대해 성공을 보고했습니다. 종료 코드 (Exit codes)도 깨끗했습니다.
하지만 출력값은 작업의 80%에서 틀렸습니다. 에이전트는 자신의 작업을 스스로 평가했고, 기준을 충족했다고 판단하여 각 작업을 완료로 표시했습니다. 에이전트 자신의 정의로는 — 완료된 것이었습니다. 하지만 유용한 그 어떤 정의로 보더라도 — 완료되지 않은 것이었습니다.
다음 날 아침 사람이 출력물을 검토하기 전까지는 아무도 몰랐습니다.
이것은 기존의 모니터링 (monitoring) 시스템이 포착하도록 설계되지 않은 AI 에이전트의 실패 모드 (failure mode)입니다. 충돌 (crash)도 아니고, 예외 (exception)도 아니며, 에러율 (error rate)의 급증도 아닙니다. 프로세스는 올바르게 완료되었으나 잘못된 출력을 생성한 경우입니다.
사람의 검토로 발견하기 전에 — 혹은 더 나쁘게는, 검토조차 이루어지지 않기 전에 — 이를 감지하는 방법을 소개합니다.
기존 모니터링이 이를 놓치는 이유
당신의 에러 모니터 (error monitor)는 예외 (exceptions)를 감시합니다. 에이전트는 예외를 발생시키지 않았습니다.
당신의 업타임 모니터 (uptime monitor)는 다운타임 (downtime)을 감시합니다. 에이전트는 내내 실행 중이었습니다.
당신의 APM 도구는 지연 시간 (latency)과 처리량 (throughput)을 감시합니다. API 호출이 완료되고 응답이 도착하는 등 두 가지 모두 정상적으로 보였습니다.
당신의 로그 (logs)는 다음과 같이 보여줍니다: 에이전트 시작됨, 작업 처리됨, 에이전트 완료됨. 깔끔한 실행입니다.
이 도구들 중 그 어떤 것도 에이전트가 무엇을 생성해야 했는지, 실제로 무엇을 생성했는지, 또는 그 두 가지가 일치하는지 여부를 알지 못합니다. 이들은 에이전트 주변의 인프라 (infrastructure)를 감시할 뿐입니다. 에이전트 자체를 감시하는 사람은 아무도 없습니다.
성공처럼 보이는 네 가지 실패 모드
1. 고스트 런 (Ghost run) — 완료되었으나, 유용한 것을 생성하지 못함
에이전트가 종료됩니다. 종료 코드 (Exit code)는 깨끗합니다. 작업은 완료로 표시됩니다. 출력물은 존재합니다 — 기술적으로는 말이죠. 하지만 그 출력물은 작업을 수행하지 못합니다. 에이전트는 너무 느슨한 기준을 사용하여 자신의 작업을 스스로 평가했고, 자신의 기준치를 충족한 뒤 종료했습니다.
당신의 모니터링 관점: 성공적인 실행.
현실 관점: 컴퓨팅 자원 (compute) 낭비, 잘못된 출력, 잘못된 상태를 상속받는 다운스트림 프로세스 (downstream processes).
2. 무한 루프 (Infinite loop) — 실행 중이지만, 아무것도 생성하지 못함
에이전트는 계속 실행됩니다. 도구 호출 (Tool calls)이 계속 발생합니다. 토큰 (Tokens)이 계속 쌓입니다. 프로세스는 정상적으로 보입니다. 하지만 실제로 일어나고 있는 일은 — 에이전트가 동일한 도구를 47번이나 호출했고 결과에 수렴 (Converge)하지 못하고 있는 것입니다. 완료 이벤트 (Completion event)는 전혀 발생하지 않습니다.
모니터링 상으로는: 정상적인 프로세스, 약간의 지연.
실제 상황은: 4.80달러의 토큰 비용 발생, 유용한 출력물은 0, 워커 (Worker)가 몇 시간 동안 점유됨.
3. 정체 (Stall) — 살아있지만, 진행되지 않음
에이전트가 기다리고 있습니다. API 응답을 기다리거나, 도구 결과 (Tool result)를 기다리거나, 혹은 영원히 도착하지 않을 리소스를 기다리고 있습니다. 루프 (Looping)를 도는 것이 아니라, 그냥 갇혀 있는 상태입니다. 프로세스는 살아있고, 진전은 없으며, 타임아웃 (Timeout)도 발생하지 않습니다.
모니터링 상으로는: 정상적인 프로세스, 일반적인 지연 시간 (Latency).
실제 상황은: 4시간 동안 멈춰 있음, 의존 프로세스 (Dependent processes)들이 차단됨, 출력이 무기한 지연됨.
4. 토큰 소모 (Token burn) — 작동 중이지만, 비용이 10배 발생
에이전트가 실제로 작동하고 있습니다. 진전을 보이고 있습니다. 하지만 작업 범위 (Task scope)가 어딘가에서 확장되었거나, 프롬프팅 (Prompting)이 비효율적이거나, 혹은 추론 루프 (Reasoning loop)가 효율적으로 수렴하지 못한 채 토큰을 소비하고 있습니다. 결국에는 완료됩니다. 해당 실행 한 번에 대한 OpenAI 청구 금액은 0.04달러가 아니라 12달러입니다.
모니터링 상으로는: 성공적인 실행.
실제 상황은: 300배의 비용 초과, 발생 여부에 대한 신호 없음.
실제로 모니터링해야 하는 것
에이전트가 실행되었는지 여부가 아닙니다. 에이전트가 평소와 같은 방식으로 실행되었는지 여부입니다.
이를 위해서는 기준점 (Baseline)이 필요합니다. 이 작업 유형에 대해 이 에이전트의 정상적인 실행은 어떤 모습인가요?
- 보통 몇 번의 도구 호출 (Tool calls)을 수행하나요?
- 보통 몇 번의 반복 (Iterations)이 필요한가요?
- 보통 얼마나 오래 실행되나요?
- 보통 얼마나 많은 토큰을 소비하나요?
- 완료하기 전에 보통 출력 이벤트 (Output event)를 생성하나요?
실행이 해당 기준점에서 벗어날 때 — 35회가 아닌 47번의 도구 호출, 23분이 아닌 45분, 0.04달러가 아닌 12달러의 토큰, 완료 전 출력 이벤트 없음 — 그것이 바로 신호 (Signal)입니다.
당신이 설정한 임계값 (Threshold)이 아닙니다. 당신이 학습한 '정상'으로부터의 일탈 (Deviation)이 신호입니다.
NotiLens로 AI 에이전트 모니터링 설정하기
설치:
pip install notilens
npm install @notilens/notilens
notilens.com에서 자격 증명(credentials)을 가져오세요 → Topic → 새로운 토픽(topic) 생성.
기본 설정 — 자동 계측 (auto-instrumentation)
가장 빠른 방법입니다. patch=True를 사용하면 OpenAI, Anthropic, 그리고 LangChain 호출을 자동으로 계측 (auto-instrument) 합니다.
Python
import notilens
nl = notilens.init(
...
Node.js
import { NotiLens } from '@notilens/notilens';
const nl = NotiLens.init('content-agent', {
...
전체 계측 (Full instrumentation) — 루프 및 출력 추적
루프 탐지 (loop detection) 및 고스트 런 탐지 (ghost run detection)를 포함한 완전한 가시성을 확보하려면 다음을 사용하세요:
Python
import notilens
nl = notilens.init(name="content-agent", token="TOKEN", secret="SECRET")
...
Node.js
import { NotiLens } from '@notilens/notilens';
const nl = NotiLens.init('content-agent', { token: 'TOKEN', secret: 'SECRET' });
...
고스트 런 탐지 (The ghost run detection) — output_generated가 중요한 이유
run.output_generated() 호출은 고스트 런 탐지기 역할을 합니다.
run.output_generated()를 먼저 호출하지 않고 run.complete()를 호출하는 실행(run)은 NotiLens가 플래그(flag)를 표시합니다. 에이전트는 완료되었다고 말했지만, 완료 전에 출력 이벤트(output event)가 도착하지 않은 것입니다. 이것이 바로 신호입니다.
run.output_generated()는 단순히 에이전트가 끝났을 때가 아니라, 실제로 출력이 생성되었음을 확인한 후에만 배치하세요. 즉, 에이전트가 종료된 것뿐만 아니라 유용한 결과물이 나왔을 때 호출해야 합니다.
정체 탐지 (Stall detection)
느린 도구(tools)나 외부 API에서 멈춰 있는 에이전트를 위한 설정입니다:
Python
run.wait("Awaiting external API response")
result = call_slow_api()
run.progress("API response received, continuing")
run.wait()는 종료(non-terminal)가 아니며, 실행(run)은 계속됩니다. NotiLens는 에이전트가 이벤트 사이에 보통 어느 정도의 시간을 소비하는지 학습하며, 그 간격이 비정상적(anomalous)이 되면 알람을 울립니다. 평소 200ms 내에 응답하던 도구가 4시간 동안 정체된다면, 그것이 바로 경고 대상입니다.
토큰 및 비용 추적
run.metric("tokens", tokens_used_this_call)
run.metric("cost_usd", round(tokens_used_this_call * 0.0000002, 6))
NotiLens는 이러한 지표들을 실행(run)별로 축적하여 학습된 베이스라인 (baseline)과 비교합니다. 평소보다 10배 많은 토큰을 소비하는 실행이 발생하면 비용 이상 (cost anomaly) 알림이 울립니다. 별도로 설정할 예산 제한은 없습니다. 베이스라인 자체가 제한이 됩니다.
알림의 모습
✅ task.started Content agent — task started
🔄 task.loop [1] Processing: Article 1
🔄 task.loop [2] Processing: Article 2
...
루프 횟수 편차. 출력 이벤트 없음. 토큰 이상. 세 가지 신호가 하나의 알림으로 결합되어, 아침 검토 단계에서 발견되는 것이 아니라 에이전트가 여전히 실행 중인 동안에 발생합니다.
AI 에이전트를 위한 전체 모니터링 체크리스트
-
run.start(): 작업이 시작될 때 발생 -
run.loop(): 에이전트의 매 반복 (iteration)마다 호출 -
run.metric("tool_calls", 1): 반복마다 누적 -
run.metric("tokens", n): 토큰 사용량 추적 -
run.metric("cost_usd", n): 실행당 비용 추적 -
run.wait(): 에이전트가 느린 호출로 인해 일시 중지될 때 발생 -
run.output_generated(): 유용한 출력이 확인되었을 때만 발생 -
run.complete(): 성공적으로 완료되었을 때 발생 -
run.fail(): 처리되지 않은 예외 (unhandled exceptions) 발생 시 발생 -
run.error(): 치명적이지 않은 도구 (tool) 오류 발생 시 발생
요약
에이전트가 완료되는 것과 에이전트가 올바른 일을 하는 것은 서로 다른 두 가지 이벤트입니다.
기존의 모니터링은 첫 번째 이벤트를 감시합니다. 여러분은 두 번째 이벤트를 감시해야 합니다.
run.complete() 이전에 run.output_generated()가 호출되는 것이 그 확인 작업의 가장 단순한 형태입니다. 루프 횟수, 토큰 추적, 정체 탐지 (stall detection) 등 그 외의 모든 요소는 편차를 자동으로 감지할 수 있게 해주는 베이스라인 (baseline)을 구축합니다.
LangChain, CrewAI, AutoGen, LlamaIndex, Pydantic AI 또는 모든 커스텀 에이전트 루프 (agent loop)와 함께 작동합니다.
notilens.com — 7일 무료 체험, 신용카드 불필요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기