반복 행동을 스스로의 학습 신호로 바꿔 장기 에이전트의 루프를 끊는다
DeLoop: Repeated Actions as Self-Supervision for Long-Horizon Agents
무엇인가
장기 호라이즌 LLM 에이전트는 저장소를 살피고, 명령을 실행하고, 도구를 호출하며 수십 단계를 진행한다. 이때 자주 발생하는 실패가 이미 했던 작업을 다시 하는 것이다. 같은 인자로 같은 도구를 다시 호출하면 당연히 같은 관측이 돌아오고, 그 스텝은 새로운 정보를 하나도 추가하지 않는다. 논문은 이를 '루프'로 정의한다. 구체적으로 각 도구 호출을 정규화한 κ(a_t)와 관측 o_t를 묶어 시그니처 x_t=(κ(a_t), o_t)를 만들고, t보다 앞선 어떤 i에 대해 x_t=x_i이면 그 스텝을 반복(s_t=1)으로 표시한다. 궤적에 이런 스텝이 하나라도 있으면 '루핑 런'이며, 논문이 보고하는 루프율은 전체 런 중 루핑 런의 비율이다. 관측이 새로 나온 재호출은 루프로 치지 않는다는 점이 정의의 핵심이다.
어떻게 동작하나
문제는 이 실패가 비용과 실패율을 동시에 끌어올린다는 것이다. CodeGym에서 Qwen3-8B는 전체 히스토리를 다 줘도 29.0%의 런에서 루프를 보이지만, 히스토리를 4,096토큰으로 요약 압축하면 57.3%, 2,048토큰에서는 64.7%까지 치솟는다. 루핑 런은 평균 6.5개의 루프 행동을 포함하고, 루프 없는 런보다 태스크당 10.5개 많은 행동과 약 1.1만 개 많은 토큰을 쓴다. 실패와의 연관도 뚜렷하다. 평가한 Qwen3·Gemini 6개 모델 평균으로 루핑 런의 59.5%가 실패해, 루프 없는 런의 33.4%보다 훨씬 높다. Qwen3-8B는 85% 대 68%, Gemini 3.1 Pro는 48% 대 12%다. 저자들은 압축이 왜 루프를 늘리는지도 실험으로 보인다. 253개 CodeGym 태스크에서 재구성한 300개 히스토리에서, 가장 최근 완료된 도구 호출 기록을 남기면 다음 행동 샘플의 3.3%만 그 호출을 반복했지만 기록을 지우면 48.8%가 반복했다. 그런데 기록을 잘 남기는 요약(행동 원장, 실행된 호출 트레이스)을 써도 루프율은 52.0~62.7%로 표준 요약(57.3%)과 크게 다르지 않고, ACON 46.3%, LLMLingua-2 46.7%에 그친다. 즉 컨텍스트를 잘 고르는 것만으로는 부족하고, 에이전트 정책 자체가 기록을 활용하도록 학습해야 한다는 것이 논문의 진단이다.
무엇과 다른가
DeLoop의 절차는 단순하다. 먼저 압축된 에이전트를 학습 태스크에 굴리고, 위의 구조적 탐지기로 각 롤아웃에서 루프 행동을 찾는다. 그 루프 행동 a_t를 거부 응답 y-로 쓴다. 같은 롤아웃 안에서 에이전트가 나중에 루프를 벗어나면, 루프를 깬 첫 행동 a_t'(단, s_u=0이고 κ(a_u)≠κ(a_t)인 최초 시점)을 선택 응답 y+로 쓴다. 두 행동 모두 루프 직전 히스토리 x=h_<t에 조건화해 (x, y+, y-) 쌍을 만든다. 롤아웃이 끝날 때까지 복구하지 못하면 그 루프에는 쌍을 만들지 않는다. 한 롤아웃에서 여러 쌍이 나올 수 있고, 최종적으로 태스크에 실패한 롤아웃에서도 복구 구간만 있으면 학습 데이터가 된다. 학습은 고정된 기준 정책 π_ref를 둔 DPO 손실로 진행한다. 같은 컨텍스트 x에서 선택 행동의 로그 확률비가 거부 행동의 로그 확률비보다 커지도록 β=0.05로 미세조정한다. 태스크 보상, 정답 라벨, LLM 심판이 전혀 필요 없다는 것이 이 방법의 요점이다. Qwen3-8B는 CodeGym에서 채굴한 8,000쌍으로 LoRA DPO 1에폭을 돌린다. 추론 시에는 학습된 정책이 매 스텝 다음 행동을 생성하고, 히스토리가 4,096토큰을 넘으면 같은 모델이 요약을 작성해 컨텍스트를 갱신한다.
어떻게 쓰나
CodeGym 300개 홀드아웃 태스크에서 Qwen3-8B의 루프율은 57.3%에서 6.1%로 9.4배 줄었고, 태스크당 스텝은 15.00에서 4.67로, 토큰은 47% 감소했으며 태스크 성공률은 유지됐다. 비교 대상인 학습 없는 컨텍스트 기법들은 42.7~65.3%에 머물렀고, 정답 라벨을 쓴 DPO 베이스라인도 22.3%였다. 모델을 키워도 효과가 유지된다. Qwen3-14B는 루프가 3.5배 줄고 토큰 35% 감소, 성공률 45.1%→52.3%(+7.2포인트), Qwen3-32B는 루프 38.5%→12.9%, 토큰 29% 감소, 성공률 37.7%→44.8%(+7.1포인트)다. 절제 실험도 방법의 구성을 뒷받침한다. 루프를 깬 행동만 모방하면 루프율이 37.7%에 그치지만, 루프 행동을 거부 예시로 함께 넣으면 6.1%가 된다. KTO·IPO·온라인 GRPO도 모두 15.0% 이하로 낮추지만 DPO가 가장 낮은 루프율과 가장 높은 성공률을 냈다. 루프 플래그를 스텝 페널티로 준 GRPO는 57.3%→15.0%다. 학습 후 남은 반복 중 새 정보를 주는 비율은 29.9%에서 69.8%로 올라, 무의미한 반복이 걸러졌음을 보여준다.
전제와 한계
일반화 범위도 넓다. CodeGym 쌍에 ALFWorld·Open-AgentRL·Terminal-Bench 롤아웃에서 같은 라벨 없는 규칙으로 채굴한 4,635쌍을 더한 DeLoop-Mix(총 12,635쌍)는 압축 하 CodeGym 성공률을 25.1%에서 30.3%로 올렸고, 전체 히스토리에서도 31.7%→36.2%로 높였다. 히스토리 설정 5종(전체 히스토리부터 2,048토큰 요약, 4,096토큰 절단까지)에서 루프율은 4.7~12.8%로 유지됐고, 메모리 정책 7종에서도 루프율·스텝·토큰이 모두 감소했다. ALFWorld, Open-AgentRL, AppWorld, ScienceWorld 네 환경 모두에서 루프가 줄었고(AppWorld 최대 32.8포인트), Open-AgentRL 성공률은 43.9%→45.5%로 올랐다. Terminal-Bench에서는 태스크당 비생산적 중복 호출이 16.6회에서 6.9회로, BrowseComp-Plus 830개 질의에서는 루프율이 22.4%에서 1.2%로 떨어지면서 정확도는 유지됐다. CodeGym만으로 학습한 Qwen3-32B가 ALFWorld로 제로샷 전이해 루프율 64.9%→54.5%, 성공률 33.6%→42.5%를 기록한 점도 주목할 만하다. LiveCodeBench, MT-Bench, IFEval 성능은 보존됐다.
개발자 관점에서 이 논문의 실용적 메시지는 두 가지다. 첫째, 에이전트 로그에서 '동일 인자 + 동일 관측'이라는 결정론적 규칙만으로 학습 데이터를 뽑을 수 있으므로, 보상 모델이나 정답 트레이스가 없는 사내 에이전트에도 곧바로 적용 가능한 파이프라인이다. 둘째, 중복 호출 차단기 같은 추론 시점 가드레일은 정책을 바꾸지 못한다는 점을 실험으로 못 박는다. 차단기를 붙여도 Qwen3-8B는 71.3%의 태스크에서 이미 실행한 호출을 다시 제안했고(차단기 없을 때 69.8%), DeLoop 적용 후에는 13.6%로 떨어졌다. 컨텍스트 압축을 쓰는 에이전트를 운영 중이라면 루프율을 별도 지표로 계측하고, 압축 프롬프트 개선이 아니라 정책 학습 쪽을 손대야 한다는 것이 이 결과의 함의다.
저자들이 명시한 전제와 한계도 분명하다. 학습 쌍은 에이전트가 같은 롤아웃 안에서 스스로 루프를 벗어난 경우에만 만들어지므로, 끝까지 루프에 갇힌 롤아웃은 감독 신호를 주지 못한다. 루프의 정의 자체가 '동일 인자·동일 관측'이라는 구조적 일치에 의존하기 때문에, 관측이 조금씩 달라지는 의미상의 반복이나 헛도는 탐색은 잡지 못한다. 학습 데이터는 각 모델 자신의 압축 롤아웃에서 채굴하며, 압축 프롬프트와 압축 시점(4,096토큰)은 고정해 두고 정책만 바꾼다. 요약 생성은 갱신된 가중치를 공유하지만 별도의 학습 목표를 갖지 않는다. 또한 태스크 성공 보상만으로는 GRPO를 돌리지 않았는데, 보상이 에피소드당 한 번만 주어지고 스텝 단위 정답 보상을 줘도 GRPO 그룹의 2.7%만 정보를 갖기 때문이다. 즉 이 방법은 성공률을 끌어올리는 주된 수단이 아니라 이미 발생한 루프를 제거해 비용을 줄이고 간접적으로 성공률을 회복하는 수단으로 제시된다.