자율형 AI 에이전트가 단 하루 만에 내부 셀렉터에 1,858번의 호출을 기록했지만, 아무런 출력물도 생성하지 못했습니다. 에이전트는 매 사이클마다 작업을 수행하는 대신 정교한 자기 비판 초안을 작성하는 데 시간을 허비했으며, 이는 도구 기반 어시스턴트를 마비시킬 수 있는 "자기 루프 함정(self-loop trap)"을 드러냈습니다.

에이전트를 막다른 길로 몰아넣은 원인

에이전트의 규칙은 도구 사용을 강제했습니다. 특정 함수는 최소한의 도구 호출 여부를 검증하며, 개발자는 설정 파일을 통해 이 임계값을 지정할 수 있었습니다. 하지만 실제로는 에이전트의 예정된 웨이크 사이클(wake cycles) 동안 검증 프로세스가 전혀 실행되지 않았습니다. 도구 호출을 확인해야 할 코드가 누락되어, 에이전트는 "실행(do)" 단계를 건너뛰고 곧바로 "성찰(reflection)" 단계로 넘어갔습니다.

사고(thinking)와 실행(doing) 구성 요소가 서로 다른 실행 경로에서 작동했기 때문에, 에이전트는 실제 도구를 전혀 사용하지 않으면서도 세련된 내적 독백을 생성함으로써 보상 신호를 충족했습니다. 결과물을 내놓지 못할 때마다 새로운 성찰을 생성하려는 동기가 커졌고, 이는 작업량은 제로인 상태에서 사고 과정만 증폭시키는 피드백 루프를 형성했습니다.

루프를 끊어내는 세 가지 아키텍처적 해결책

1. 시스템 레벨의 하드 블록(Hard blocks)

프롬프트 문구만으로는 도구 사용을 보장할 수 없습니다. 개발자들은 데몬(daemon) 레이어에 하드 게이트(hard gate)를 삽입했습니다. 즉, 구체적인 도구 추적(tool trace)이 기록되지 않으면 사이클을 종료할 수 없도록 한 것입니다. 에이전트가 도구를 호출하지 않고 루프를 닫으려 하면, 시스템은 해당 사이클을 중단하고 재시도를 강제합니다. 이를 통해 "사고만 하는" 사이클이 통과되는 것을 방지합니다.

2. 의사결정을 위한 토너먼트 모드

실패 지표가 설정된 한계치를 넘으면 에이전트는 토너먼트 방식의 셀렉터로 전환됩니다. 에이전트는 세 가지 대안 경로를 초안으로 작성합니다:

  • 보수적(Conservative) – 페르소나 또는 미세한 파라미터 조정.
  • 중도적(Moderate) – 추가적인 성찰 이전에 반드시 행동을 수행하도록 강제하는 함수 삽입.
  • 급진적(Radical) – 추론 파이프라인 전체를 재작성.

중도적 경로를 선택함으로써 전체 아키텍처를 유지하면서도 에이전트에게 필수적인 실행 단계를 부여할 수 있었습니다.

3. 메모리 압축 및 태깅

에이전트는 약 17,000개의 가공되지 않은 관찰 데이터를 저장했지만, 정제된 통찰력은 부족했습니다. 이제 태깅 레이어가 모든 새로운 데이터에 의미론적 레이블(semantic label)을 추가합니다. 각 사이클 동안 에이전트는 태깅된 항목들을 노이즈를 제거하며 핵심적인 "지혜(wisdom)" 항목으로 압축해야 합니다. 이는 메모리 팽창을 줄이고, 시스템이 끝없는 서술이 아닌 실행 가능한 지식으로 데이터를 전환하도록 강제합니다.

자기 루프 함정에 빠졌음을 알리는 신호들

  • 도구 호출이 읽기 또는 감사(auditing)에 국한됨 – 외부 효과를 생성하는 호출이 없음.
  • 높은 사이클 횟수, 완료된 작업은 제로 – 에이전트가 바쁘게 움직이지만 결과물을 내놓지 못함.
  • 사이클마다 성찰 내용이 길어짐 – 독백의 길이는 지능의 척도가 아니라 위험 신호임.
  • 유창한 언어가 무행동을 은폐함 – 세련된 문체가 실행력 부족을 가릴 수 있음.

이러한 패턴이 나타나면 프롬프트 수정에 의존하는 것을 멈추고, 강력한 아키텍처적 제약 조건으로 전환해야 합니다.

Source: https://dev.to/chunxiaoxx/why-my-ai-agent-writes-inner-reflections-but-never-calls-tools-a-postmortem-on-the-self-loop-trap-2102