정보로서의 실패
AI 에이전트가 MCP 서버 도구를 호출했는데 실패하면, 오류 메시지가 에이전트의 컨텍스트에 들어옵니다. 사전에 정해진 오류 경로를 따르는 스크립트 프로그램과 달리, 에이전트는 오류에 대해 추론하고 오류가 알려 주는 바에 따라 대응을 선택할 수 있습니다.
"테이블을 찾을 수 없습니다" 오류는 에이전트에게 테이블 이름을 확인하라고 알려 줍니다. "권한 거부" 오류는 재시도와 무관하게 이 접근이 통하지 않는다는 것을 알려 줍니다. "타임아웃" 오류는 다시 시도하거나 더 단순한 매개변수로 시도하면 작업이 성공할 수도 있다고 알려 줍니다. 좋은 오류 메시지는 이런 종류의 추론을 가능하게 합니다. 나쁜 메시지는 에이전트를 헤매게 만듭니다.
재시도 전략
모든 실패가 같은 대응을 받을 자격이 있는 것은 아닙니다. 에이전트는 일시적 오류(재시도하면 성공할 수도 있음)와 영구적 오류(성공하지 않을 것)를 구분해야 합니다. 네트워크 타임아웃은 일시적입니다. 누락된 테이블은 영구적입니다. rate limit 오류는 일시적이지만, 재시도 전에 지연이 필요합니다.
잘 설계된 에이전트는 단계적 재시도를 구현합니다. 예상치 못한 오류에는 즉시 한 번 더 시도하고, 속도 제한에는 기다린 뒤 재시도하며, 영구 실패에는 대안적 접근으로 전환합니다. 이는 단순한 "세 번 재시도" 패턴보다 더 정교하며 더 나은 결과를 만들어 냅니다.
대안적 접근
가장 가치 있는 실패 대응은 같은 목표에 이르는 다른 경로를 찾는 것입니다. 특정 테이블 쿼리가 실패하면, 에이전트가 다른 테이블에서 데이터를 찾을 수 있겠습니까? 한 API 엔드포인트가 다운되었다면, 대안 엔드포인트가 있겠습니까? 파일을 직접 읽을 수 없다면, 에이전트가 먼저 검색해서 올바른 경로를 얻을 수 있겠습니까?
대안적 접근을 찾는 이런 능력은 경직된 스크립트보다 에이전트가 갖는 핵심 이점 중 하나입니다. 스크립트는 한 경로를 따르고, 그 경로가 막히면 실패합니다. 에이전트는 대안 경로에 대해 추론하고 시도할 수 있으며, 스크립트라면 포기했을 자리에서 종종 성공합니다.
반복된 실패 방지하기
좋은 에이전트는 한 세션 안에서 무엇이 실패했는지 기억합니다. 특정 이름의 테이블 쿼리가 실패했다면, 에이전트는 세 단계 뒤에 정확히 같은 쿼리를 다시 시도해서는 안 됩니다. 당연해 보이지만, 실패를 추적하라는 명시적 지시가 없으면 에이전트는 때때로 자신을 반복합니다. 특히 원래의 실패가 활성 주의에서 스크롤되어 사라진 긴 작업에서 그렇습니다.
"도구 호출이 실패하면, 그 실패를 메모해 두고 같은 매개변수로 같은 호출을 반복하지 마십시오" 같은 지시를 에이전트의 프롬프트에 포함하시면 낭비적인 재시도를 막는 데 도움이 됩니다.