AI 에이전트 도구 호출 실패: 왜 잘못된 인자(Malformed Arguments)가 프로덕션 환경의 1위 문제인가 — 그리고 이를 어떻게
요약
프로덕션 환경의 AI 에이전트 실패 원인 1위는 모델의 추론 오류가 아닌 도구 호출 시 발생하는 잘못된 인자(Malformed Arguments)와 스키마 미준수입니다. 도구 인터페이스와 모델 사이의 명확한 에러 신호 전달 체계가 부족할 때 비용 급증과 무한 재시도 문제가 발생합니다.
핵심 포인트
- 에이전트 실패의 주된 원인은 모델의 환각보다 도구 오용(Tool Misuse)임
- 잘못된 인자 전달은 스키마 준수 실패와 데이터 타입 오류를 포함함
- 도구 응답이 손상되었을 때 실행 가능한 에러 신호를 제공하는 것이 중요함
- 벤치마크 점수와 실제 프로덕션 환경의 도구 호출 충실도 사이에는 간극이 존재함
2026년 5월, Gabriel Anhaia는 프로덕션 환경에서 다단계 에이전트(multi-step agent)를 운영해 본 사람이라면 누구나 익숙할 법한 프로덕션 트레이스(production trace)를 공개했습니다.
한 고객 서비스 에이전트가 데이터베이스 조회 도구(database lookup tool)를 호출했습니다. 해당 도구는 잘린(truncated) JSON 블롭(blob)을 반환했습니다. 상위 게이트웨이(upstream gateway)에 아무도 문서화하지 않은 4KB 응답 제한이 있었기 때문입니다. 모델은 응답이 손상되었음을 정확히 식별하고 재시도(retry)하기로 결정했습니다. 도구는 동일하게 잘린 페이로드(payload)를 반환했습니다. 모델은 다시 재시도했습니다. 그리고 또 했습니다. 무려 17번이나 말이죠. 매 턴마다 컨텍스트(context)가 커지며 전체 프롬프트 라운드 트립(prompt round-trip)이 발생했고, 토큰(tokens)이 쌓이며 비용이 급증했습니다. 이 모든 것이 도구와 모델 사이에서 "이 응답은 형식이 잘못되었습니다(this response is malformed)"라는 메시지를 실행 가능한 신호(actionable signal)로 변환해 주는 장치가 없었기 때문에 발생한 일이었습니다.
모델은 틀리지 않았습니다. 모델은 훈련받은 대로, 즉 명백한 일시적 실패(transient failure)에 대해 재시도하는 작업을 정확히 수행하고 있었습니다. 실패의 원인은 모델이 아니었습니다. 그것은 도구가 반환한 내용과 에이전트가 추론할 수 있는 내용 사이의 간극(gap)이었습니다.
그 간극이 바로 대부분의 AI 에이전트 출력 품질 문제가 발생하는 지점이며, 대부분의 팀이 가장 마지막에 살펴보는 곳이기도 합니다.
도구 오용은 프로덕션 환경에서 가장 흔한 AI 에이전트 실패 원인입니다
Latitude의 2026년 관측성 프레임워크(observability framework) 보고서에 따르면, 도구 오용(tool misuse)은 프로덕션 환경에서 에이전트 특유의 가장 흔한 실패 모드(failure mode)입니다. 환각(hallucination)도, 추론 실패(reasoning failures)도, 불충분한 컨텍스트(inadequate context)도 아닙니다. 가장 흔한 실패는 에이전트가 잘못된 인자(arguments)로 도구를 호출하거나, 필수 필드(required fields)를 누락하거나, 잘못된 데이터 타입(data types)을 사용하는 것이며, 그 후 명확한 에러 신호(error signals)를 생성하지 못하는 방식으로 실패하는 것입니다.
이것이 중요한 이유는 일반적인 진단 본능을 뒤집기 때문입니다. 에이전트가 잘못된 출력을 생성할 때, 첫 번째 질문은 거의 항상 "모델이 무엇을 틀렸는가?"입니다. 프로덕션 실패 데이터를 기반으로 한 더 생산적인 질문은 "도구 인터페이스(tool interface)에서 무슨 일이 일어났는가?"입니다.
구조적인 이유는 명확합니다. 잘 설계된 에이전트(agent)는 단순히 텍스트를 생성하는 모델이 아니라, 모델의 추론(reasoning)으로 연결된 도구 호출(tool invocation)의 체인입니다. 그 체인의 각 연결 고리는 정확한 필드 이름, 정확한 데이터 타입, 정확한 중첩 구조(nesting structures)와 같은 구체적인 스키마(schema) 기대치를 가집니다. 모델은 매 호출마다 이 모든 조건을 충족해야 합니다. 프로덕션 환경의 다단계 워크플로우(multi-step workflows)에서 나타나는 전형적인 컨텍스트 윈도우(context window) 길이에서, 모델은 벤치마크 점수가 시사하는 것보다 스키마 준수(schema compliance) 측면에서 더 자주 실패합니다. 이는 벤치마크가 일반적으로 중간 단계의 도구 호출 충실도(tool call fidelity)가 아닌 최종 출력 정확도를 측정하기 때문입니다.
2단계에서의 단 하나의 잘못된 인자(malformed argument)는 해당 출력에 의존하는 이후의 모든 단계를 조용히 오염시킵니다. 이러한 오염이 반드시 즉각적인 하드 실패(hard failure)를 일으키는 것은 아닙니다. 오염은 파이프라인(pipeline)을 통해 계속 전달되어 다음 단계로 넘어가고, 결국 잘못된 답변, 불완전한 결과, 또는 도구가 깨끗한 데이터를 반환했다면 에이전트가 올바르게 처리했을 행동으로 나타나게 됩니다.
도구 호출 실패의 세 가지 유형 — 그리고 왜 각각 다른 처리가 필요한가
모든 도구 호출 실패가 동일하게 나타나는 것은 아니며, 에이전트의 올바른 대응은 어떤 유형을 다루고 있느냐에 따라 크게 달라집니다.
**스키마 불일치 (Schema mismatch)**는 가장 위험한 유형입니다. 도구가 데이터를 반환했지만, 에이전트가 약속받은 계약(contract)을 준수하지 않는 경우입니다: 잘못된 필드 타입, 필수 키(required keys) 누락, 유효하지 않은 JSON, 잘린 페이로드(truncated payloads) 등이 이에 해당합니다. Anhaia의 트레이스(trace)에서 기록된 재시도 루프(retry-loop) 함정이 바로 이 유형에 속합니다. 올바른 대응은 동일한 인자로 재시도하는 것이 아닙니다. 도구 자체가 고장 난 상태이므로, 동일한 재시도는 동일한 쓰레기 값을 생성할 뿐입니다. 명시적인 스키마 검증(schema validation) 로직이 없는 에이전트는 "일시적인 네트워크 오류"와 "구조적으로 깨진 응답"을 구분할 방법이 없으며, 두 경우 모두 재시도하는 것을 기본값으로 삼습니다.
**부분적 데이터 (Partial data)**는 재시도가 가능하지만, 다른 매개변수(parameters)가 필요합니다. 도구가 유효하고 형식이 잘 갖춰진(well-formed) 데이터를 반환했지만, 데이터가 불완전한 경우입니다. 예를 들어, 페이지네이션(pagination)이 결과 중간에 끊겼거나, 타임아웃(timeout)으로 인해 현재까지 사용 가능한 데이터만 반환되었거나, 외부 API의 속도 제한(rate-limit)으로 인해 47개의 레코드 중 3개만 반환된 상황입니다. 동일한 호출을 반복하는 것은 도움이 되지 않습니다. 대신 더 작은 페이지 크기, 더 좁은 필터, 또는 다른 시간 범위와 같이 수정된 호출이 도움이 될 수 있습니다.
**의미론적 쓰레기 (Semantic garbage)**는 포착하기 가장 어렵습니다. 도구가 유효하고 형식이 잘 갖춰진 완전한 데이터를 반환했지만, 스키마 검증(schema validation)으로는 감지할 수 없는 방식으로 데이터가 잘못된 경우입니다. 에이전트가 ID를 기대하는 필드에 고객 이름을 전달했거나, 검색 API의 필터 값이 정답과 의미론적으로는 인접하지만 구문론적(syntactically)으로 올바르지 않아 결과가 0건으로 반환된 상황이 이에 해당합니다. 응답 자체는 정상적으로 보이지만, 요청한 내용과 비교했을 때 콘텐츠가 전혀 말이 되지 않습니다.
각 클래스는 서로 다른 하류(downstream) 실패 패턴을 생성합니다. 인자(argument), 스키마 컨텍스트(schema context), 그리고 응답을 순차적으로 캡처하는 도구 수준의 계측(instrumentation) 없이는, 사후에 이 세 가지 클래스를 구분하기 위해 실행 추적(execution traces)을 수동으로 재구성해야 하며, 이는 확장성(scale)이 없습니다.
기존의 출력 품질 평가가 이를 놓치는 이유
대부분의 팀은 두 가지 평가 방식 중 하나로 AI 에이전트의 출력 품질에 접근합니다. 의미론적 품질을 위한 LLM-as-judge 방식, 또는 형식 및 콘텐츠 검증을 위한 정적 출력 게이트(static output gates) 방식입니다. 두 방식 모두 최종 단계인 마지막 응답만을 평가하며, 중간 단계의 도구 호출(tool calls)까지는 파고들지 못합니다.
이것이 바로 구조적인 사각지대입니다. 2025년 7월에 게시되어 86개의 댓글을 생성했던 Hacker News 스레드 "AI 에이전트 벤치마크는 망가졌다 (AI agent benchmarks are broken)"는 이 구조적인 논거를 다른 형태로 제시했습니다. 해당 스레드에서 반복적으로 관찰된 내용은 다음과 같습니다. 최종 출력 품질(final-output quality)로만 평가되는 에이전트는 아무것도 하지 않음으로써 태스크의 38%를 통과할 수 있으며, 대부분의 벤치마크에서 사용되는 평가 아키텍처(LLM이 LLM의 출력을 판단하는 방식)는 테스트 대상과 동일한 사각지대를 공유한다는 점입니다. 스레드에서 명확히 명명하지는 않았지만, 여기서 도출되는 필연적인 결론은 다음과 같습니다. 만약 최종 출력 평가가 벤치마크 수준에서 에이전트 품질을 나타내는 불충분한 대리 지표(proxy)라면, 합성 벤치마크(synthetic benchmarks)가 결코 시험하지 못하는 방식으로 도구가 실패하는 프로덕션(production) 수준에서는 훨씬 더 형편없는 대리 지표가 된다는 것입니다.
오프라인 평가(Offline evaluation)로는 이 간극을 메울 수 없습니다. 프로덕션에서의 도구 호출(tool call) 실패는 특정 컨텍스트 윈도우(context window) 상태, 특정 데이터 페이로드(data payloads), 그리고 특정 모델 버전과 특정 외부 API의 현재 동작 사이의 상호작용 효과로부터 발생합니다. 2,000 토큰의 컨텍스트에서는 도구 스키마(tool schema)를 올바르게 처리하는 모델이라도, 동일한 지시문(instructions)이 주어졌음에도 12,000 토큰에서는 대략적이거나 부분적으로만 올바른 인자(arguments)를 생성할 수 있습니다. 이러한 성능 저하는 컨텍스트에 민감하고(context-sensitive), 분포에 민감하며(distribution-sensitive), 프로덕션 트레이스(production traces)를 기반으로 작동하지 않는 그 어떤 평가 파이프라인에서도 보이지 않습니다.
문제는 팀들이 평가를 하지 않는 것이 아닙니다. 평가가 잘못된 수준에서 이루어지고 있다는 점입니다.
침묵하는 실패: 출력은 맞지만 과정이 틀렸을 때
이와 관련하여 포착하기가 훨씬 더 어려운 실패 모드(failure mode)가 있습니다. 바로 에이전트가 잘못된 중간 과정을 거쳐 올바른 최종 출력을 만들어내는 경우입니다.
에이전트가 올해 보고서 대신 작년 보고서를 참조합니다. 6개월 전에는 유효했지만 지금은 더 이상 사용되지 않는(deprecated) API 엔드포인트를 쿼리합니다. 값을 직접 쿼리하는 대신 — 이번 사례에서는 운 좋게 맞았을지라도 — 중간값을 추론해 버립니다. 출력값은 최종 출력 검증(final-output validation)을 통과합니다. 그리고 그대로 사용됩니다. 이러한 실패는 동일한 동작이 다른 데이터에서 잘못된 답을 내놓을 때까지 보이지 않습니다.
이러한 유형의 실패 — 즉, 출력은 맞지만 과정이 틀린 경우 — 를 감지하려면 궤적 평가(trajectory evaluation)가 필요합니다. 에이전트가 무엇을 생성했는지뿐만 아니라, 어떻게 그 결과에 도달했는지, 즉 어떤 도구 호출(tool calls)을 어떤 순서로, 어떤 인자(arguments)와 함께 수행했는지, 그리고 각각의 호출이 무엇을 반환했는지를 확인해야 합니다. 그러한 추적(trace) 없이는 과정상의 실패(process failures)는 정의상 보이지 않습니다.
Waxell이 이를 처리하는 방식
Waxell Observe는 모든 모델 호출과 도구 사용을 순서대로 캡처합니다. 즉, 첫 번째 추론(inference)부터 최종 출력에 이르기까지 에이전트 실행의 전체 궤적을 모든 도구 호출 인자와 응답을 포함하여 순차적이고 문맥에 맞게 기록합니다.
이는 최종 출력 대시보드와 도구 호출 수준의 거버넌스(governance) 사이의 구조적 차이입니다. 도구 인터페이스에서의 출력 모니터링(output monitoring at the tool interface)을 통해 팀은 최종 응답뿐만 아니라 실행 궤적(execution trace) 내에서 스키마 위반(schema violations) 및 인자 형식 오류를 감지할 수 있습니다. 또한 어떤 특정 도구 호출이 실행 전반에 걸쳐 저하된 출력을 생성하는지 식별하고, 컨텍스트 창(context window) 길이에 따른 실행 경로를 비교하며, 긴 컨텍스트 상태와 스키마 준수 드리프트(schema compliance drift) 사이의 상관관계를 프로덕션 장애가 발생하기 전에 포착할 수 있습니다.
출력 검증 정책(Output validation policies)은 이를 실행 전 강제(pre-execution enforcement) 단계로 확장합니다. 즉, 최종 답변이 실패하는 경우뿐만 아니라, 실행 도중 정의된 스키마 계약(schema contracts)을 위반하는 중간 도구 호출 출력을 플래그(flag)로 표시합니다. 이를 통해 품질 강제(quality enforcement)의 시점을 사후 탐지에서 실행 중 개입(mid-run intervention)으로 상류(upstream)로 이동시킵니다.
Waxell Observe는 단 2줄의 코드로 초기화되며 200개 이상의 라이브러리를 자동 계측(auto-instruments)합니다. 이는 팀이 각 도구 호출(tool call)에 계측 코드를 수동으로 추가할 필요가 없음을 의미합니다. 모든 호출은 추적(traced)됩니다. 모든 인자(argument)는 캡처됩니다. 사용 가능한 50개 이상의 정책(policy) 카테고리에는 최종 응답뿐만 아니라 개별 단계 수준에서 작동하는 콘텐츠, 품질 및 추론(reasoning) 정책이 포함됩니다. 정책 검사는 0.045ms p95 지연 시간(latency)으로 실행되므로, 도구 수준의 강제 적용(enforcement)은 프로덕션 파이프라인에 의미 있는 오버헤드를 추가하지 않습니다.
프로덕션 투입 전 출력 품질을 테스트하려는 팀을 위해, Waxell의 테스트 환경을 사용하면 프로덕션으로 승격하기 전에 정의된 품질 계약(quality contracts)에 따라 관리되는 에이전트 워크플로를 실행할 수 있습니다. 이를 통해 도구 수준의 스키마 회귀(schema regressions)가 고객에게 노출되는 실패가 아닌 테스트 단계에서 드러나게 됩니다.
FAQ
AI 에이전트에서 도구 인자 부패(tool argument rot)란 무엇인가요?
도구 인자 부패(tool argument rot)란 AI 에이전트가 도구를 호출할 때 잘못된 형식(malformed), 부정확하거나 스키마를 위반하는 인자가 점진적으로 생성되는 현상을 말합니다. 이는 잘린 JSON, 필수 필드 누락, 잘못된 데이터 타입 또는 구문적으로 유효하지 않은 페이로드(payload)를 생성합니다. 관측성(observability) 전문가들에 따르면 이는 에이전트 특유의 가장 흔한 프로덕션 실패 모드이며, 최종 출력 환각(hallucination)보다 더 교활합니다. 왜냐하면 반드시 즉각적인 하드 실패(hard failures)를 일으키지는 않기 때문입니다. 2단계에서의 잘못된 도구 호출은 그에 의존하는 이후의 모든 단계에 대한 컨텍스트(context)를 오염시킵니다.
왜 AI 에이전트의 출력 품질은 테스트 단계가 아닌 프로덕션 환경에서 저하되는가?
프로덕션 환경에서의 도구 호출(tool call) 실패는 특정 컨텍스트 윈도우(context window) 상태, 특정 외부 API의 동작, 그리고 합성 테스트 케이스(synthetic test cases)로는 실행되지 않는 모델 버전과 실제 데이터 분포 간의 상호작용 효과로부터 발생합니다. 2,000 토큰의 컨텍스트에서는 도구 스키마(tool schema)를 올바르게 처리하는 모델이, 동일한 지시사항을 가진 12,000 토큰의 컨텍스트에서는 부정확한 인자(arguments)를 생성할 수 있습니다. 이러한 컨텍스트 민감형 저하(context-sensitive degradation)는 프로덕션 트레이스(trace) 데이터가 있어야만 드러나기 때문에 오프라인 평가(offline evaluation)로는 감지할 수 없습니다.
도구 오용(tool misuse)과 도구 실패(tool failure)의 차이점은 무엇인가?
도구 오용은 에이전트 측의 문제입니다. 에이전트가 잘못된 인자로 도구를 호출했거나, 작업에 맞지 않는 도구를 선택했거나, 도구 오류를 올바르게 처리하지 못한 경우를 의미합니다. 도구 실패는 도구 측의 문제입니다. 도구가 오류, 빈 응답, 또는 잘못된 형식의 데이터(malformed data)를 반환한 경우입니다. 두 경우 모두 하류(downstream)의 잘못된 출력을 생성합니다. 이 둘의 구분은 해결책 측면에서 중요합니다. 도구 오용은 에이전트가 보내는 내용을 변경해야 하며, 도구 실패는 에이전트가 받는 내용을 해석하고 처리하는 방식을 변경해야 합니다.
프로덕션 환경에서 AI 에이전트의 도구 호출 품질 문제를 어떻게 감지하는가?
유일하게 신뢰할 수 있는 접근 방식은 각 에이전트 실행의 전체 트레이스(trace) 내에서 인자(argument), 스키마 컨텍스트(schema context), 그리고 응답을 캡처하여 모든 도구 호출을 계측(instrument)하는 것입니다. 사후 최종 출력 평가(post-hoc final-output evaluation)는 에이전트가 출력에 도달하기 위해 어떻게 탐색했는지를 볼 수 없기 때문에 프로세스 실패를 놓치게 됩니다. 스키마 검증 정책(schema validation policies)을 포함한 실시간 도구 호출 트레이싱(real-time tool-call tracing)을 사용하면 팀이 실행 중에 잘못된 인자(malformed arguments)를 포착하고, 컨텍스트 윈도우 길이에 따른 실행 경로를 비교하며, 어떤 특정 도구 호출이 품질 저하를 일으키는지 식별할 수 있습니다.
AI 에이전트 파이프라인에서 침묵하는 실패(Silent failures)란 무엇인가?
침묵하는 실패(Silent failures)란 에이전트가 잘못된 중간 과정(intermediate process)을 거쳐 최종 출력값은 올바르게 생성하는 실행을 의미합니다. 예를 들어, 오래된 데이터(stale data)를 참조하거나, 더 이상 사용되지 않는 API 엔드포인트(deprecated API endpoint)를 사용하거나, 직접 쿼리해야 할 값을 추론(inferring)하여 도출하는 경우가 이에 해당합니다. 이러한 출력은 검증(validation)을 통과하여 실행에 반영되지만, 에이전트는 잘못된 경로로 목적지에 도달한 것입니다. 침묵하는 실패는 에러 신호를 발생시키지 않고 축적됩니다. 이를 포착할 수 있는 유일한 방법은 궤적 평가(trajectory evaluation)입니다. 즉, 단순히 최종 응답(terminal response)만을 확인하는 것이 아니라, 에이전트 실행의 모든 단계를 추적(tracing)해야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기