LoopGain: 수렴하면 멈추는 AI 에이전트 루프 비용 컨트롤러

LoopGain 소개

AI 에이전트가 스스로 출력을 검증하고 고쳐 쓰는 반복 루프는 언제 멈춰야 할지를 모를 때 시간과 돈을 낭비합니다. 현업의 에이전트 루프는 거의 예외 없이 max_iterations=N 을 종료 정책으로 씁니다. 이 방식은 딜레마를 안고 있습니다. 상한을 크게 잡으면 이미 답이 나온 뒤에도 계속 돌아 연산을 낭비하고, 작게 잡으면 아직 덜 다듬어진 출력을 그대로 내보내게 됩니다.

LoopGain은 이 고정 상한을 제어이론에 기반한 정지·롤백 정책으로 대체하는 오픈소스 비용 컨트롤러입니다. 루프의 오류를 실시간으로 측정해, 실제로 수렴한 순간 멈추고 품질이 나빠지기 시작하면 가장 좋았던 지점으로 되돌립니다. 이 판단의 이론적 근거는 전기공학의 피드백 발진기 분석에서 나온 바크하우젠 조건(Barkhausen criterion, 1921) 으로, 루프 게인(loop gain)이 특정 조건을 넘으면 계가 안정 대신 발산·진동으로 넘어간다는 오래된 결과입니다.

LoopGain은 측정 가능한 오류 신호(error signal) 가 있는 모든 반복 워크플로에 적용됩니다. 검증-수정 루프, 정제 패스, 도구 호출 재시도 체인, 자기 교정이 붙은 RAG, 린터 피드백을 받는 코드 생성, 다단계 추론 루프가 모두 대상입니다. LangGraph, CrewAI, AutoGen, LangChain, OpenAI Agents SDK, Claude Agent SDK용 어댑터를 기본 제공하며, 커스텀 스택은 원시 API로 붙일 수 있습니다. 순수 파이썬으로 작성돼 런타임 의존성이 없습니다.

LoopGain의 오류 신호와 사용법

LoopGain에 사용자가 제공해야 하는 단 하나는 오류 신호입니다. 매 반복마다 현재 출력이 얼마나 틀렸는지를 나타내는 음이 아닌 숫자 하나면 됩니다. 값이 작을수록 좋고, 0이면 완료를 뜻합니다. LoopGain은 루프가 무엇을 하는지 알지 못하며, 오직 이 숫자의 궤적만 보고 계속할지, 멈출지, 되돌릴지를 결정합니다.

루프에는 이미 출력이 아직 충분치 않다는 것을 아는 어떤 방법이 있기 마련이므로(그렇지 않다면 계속 고쳐 쓸 이유가 없습니다), 그것을 숫자로 바꾸면 됩니다. 코드 생성 루프라면 실패한 테스트 개수, 구조화 추출이라면 스키마 위반 수, 자기 교정 RAG라면 아직 빠진 필수 사실의 개수, 린트 루프라면 린트 오류 개수가 그대로 오류 신호가 됩니다. 문제 목록을 그대로 넘기면 observe() 가 그 길이를 크기로 사용합니다.

세 줄이면 측정 가능한 오류 신호가 있는 임의의 반복 루프를 감쌀 수 있습니다.

from loopgain import LoopGain

lg = LoopGain(target_error=0.1)

while lg.should_continue():
    errors = verifier.verify(output)
    lg.observe(errors, output=output)
    output = reviser.revise(output, errors)

result = lg.result
print(result.outcome)              # "converged" | "oscillating" | "diverged" | "stalled" | "max_iterations"
print(result.best_output)          # 오류가 가장 낮았던 반복의 출력
print(result.iterations_used)
print(result.savings_vs_fixed_cap)

품질에 자연스러운 "0"이 없어 목표를 정하기 애매하면 target_error=None 으로 두면 됩니다. 이때 LoopGain은 정확한 목표값을 기다리는 대신 숫자가 더 이상 나아지지 않는 지점(plateau) 에서 멈춥니다.

LoopGain의 동작 원리

LoopGain은 매 반복에서 경험적 루프 게인(Aβ = E(n) / E(n-1)) 을 측정해 평활화된 시계열로 노출합니다. 다만 실제 정지·계속 판단은 단일 값이 아니라 오류 궤적 전체를 네 개의 특징으로 분류해 내립니다.

E_ratio   = E_current / E_first      # 누적 감소 비율
slope_log = log10(E)의 OLS 기울기     # 기하적 추세 방향
slope_p   = 기울기의 t-검정 p-value   # 통계적 유의성
osc_std   = 추세 제거된 log10(E)의 표준편차  # 진동 크기

이 특징들로 궤적을 다섯 개의 상태 중 하나로 분류하고, 상태마다 정해진 행동을 취합니다.

상태 조건 행동
FAST_CONVERGE E_first의 10% 이하로 누적 감소 계속
CONVERGING p < 0.05 인 음의 기울기, 또는 누적 50% 이하 계속(상승 반전 감시)
STALLING 유의한 기울기도, 감지되는 진동도 없음 2회 연속 관측 후 정지, 최적값 반환
OSCILLATING 추세는 평평한데 잔차 분산이 큼 정지, 최적값 반환
DIVERGING p < 0.05 인 양의 기울기 그리고 누적 110% 초과 중단, 최적값으로 롤백

여기에 단락(short-circuit) 이 더해집니다. 관측된 오류가 target_error 이하로 떨어지면 즉시 TARGET_MET 상태로 멈춥니다. 개발팀은 이 판단이 의도적으로 보수적 이라고 설명합니다. 종료 전에 통계적 유의성과 의미 있는 누적 변화를 모두 요구해, 노이즈가 많은 실제 LLM 오류 계열에서 성급한 중단이 나오지 않게 하기 위함입니다. 저자들은 N=1000개의 결정론적 모의 궤적에서 5개 영역에 걸쳐 매크로 평균 98.8%의 분류 정확도를 보고했으며, 신뢰할 만한 추세 유의성을 위해 최소 6회 반복을 권장합니다.

LoopGain의 최적값 롤백

LoopGain은 관측한 모든 출력을 오류 점수와 짝지어 버퍼에 보관합니다. 종료 시점에는 마지막 반복이 아니라 오류가 가장 낮았던 반복(argmin(error)) 의 출력을 돌려줍니다. 특히 발산(DIVERGING) 으로 중단할 때 반환되는 출력은 마지막 것이 아니라 그때까지 본 것 중 가장 좋은 것입니다. 덕분에 발산 감지가 "쓰레기를 안고 중단"이 아니라 "지금까지 본 최선을 안고 중단"으로 바뀌며, 사실상 공짜 품질 하한선이 됩니다.

LoopGain의 벤치마크와 정직한 한계

개발팀은 10개 워크로드 셀에 걸친 2,000회 페어드(paired) 시행 결과를 공개했습니다(벤치마크 저장소 에서 직접 재현 가능). 보고된 수치는 다음과 같습니다.

  • max_iter=20 대비 API 지출 92.8% 감소 (벤치마크 총 지출 $27.05 → $1.94)
  • 시행당 중앙값 벽시계 시간 30.9초 → 2.1초로 약 15배 단축
  • 품질은 속도와 맞바꾸지 않고 보존(1,800회 판정 비교에서 가중 선호도 0.678)
  • 사전 등록한 6개 킬 기준(kill criteria) 중 0개 발동

아래는 LoopGain의 자체 호스팅형 대시보드 데모 화면으로, 팀 전체 루프의 수렴 상태, 제거된 낭비 비용, 롤백 현황과 개별 실행의 오류· 궤적을 한눈에 보여줍니다. 텔레메트리는 옵트인이며, 수신기(receiver)와 대시보드 모두 오픈소스라 자체 호스팅할 수 있습니다.

한편 개발팀은 한계도 앞세워 밝히고 있습니다. LoopGain이 감지하는 것은 정답 여부가 아니라 수렴 이라는 점입니다. 즉 더 반복해도 나아지지 않는다는 것은 알 수 있어도, 그 답이 맞는지는 알지 못합니다. 오류 신호가 0을 가리키면 LoopGain은 그것을 믿고 멈추므로, 사각지대가 있는 검증기(verifier) 는 여전히 틀린 답에 대해 성공을 보고할 수 있습니다. 실제로 코드 생성 워크로드에서 수렴 판정된 실행의 4.5%(16/355) 는 루프 안의 모든 검사를 통과했지만 별도로 떼어 둔 전체 테스트 스위트는 통과하지 못했습니다. 그래서 저자들은 정지 시점에 감당할 수 있는 가장 강한 검증기를 함께 쓰라고 권합니다. LoopGain은 언제 멈출지를 정하고, 그 답이 충분히 좋은지는 사용자가 정합니다.

LoopGain 설치 및 관련 저장소

설치는 한 줄이며 순수 파이썬, 무의존성, Python 3.10 이상을 지원합니다.

pip install loopgain

Claude Code 사용자는 loopgain-plugin 으로 저장소 전체에서 감쌀 수 있는 루프(리터럴·재귀·그래프 사이클·시맨틱) 를 찾아 파일 단위로 검토된 diff를 제안받을 수 있습니다(자동 적용은 하지 않음). LoopGain 생태계는 라이브러리 본체 외에도 익명 루프 텔레메트리를 수집하는 telemetry-receiver, 자체 호스팅 가능한 dashboard, 재현 가능한 loopgain-bench 로 나뉘어 있습니다.

LoopGain의 라이선스

LoopGain 라이브러리 본체는 Apache License 2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:house: LoopGain 공식 홈페이지

:bar_chart: LoopGain 대시보드 라이브 데모

:github: LoopGain 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: