당신의 에이전트를 밀어붙여라: Long-Horizon LLM 에이전트의 Quantitative Goal Persistence 측정과 강제
Push Your Agent: Measuring and Enforcing Quantitative Goal Persistence in Long-Horizon LLM Agents
TL;DR Highlight
LLM 에이전트가 '100개 찾아줘'를 실제로 100개 찾을 때까지 멈추지 않게 만드는 방법과 벤치마크.
Who Should Read
LLM 에이전트가 장시간 작업(파일 수집, 데이터 처리, 반복 검색 등)을 수행할 때 중간에 멈추거나 중복 작업을 반복하는 문제를 겪는 백엔드/AI 개발자. 에이전트 파이프라인에서 신뢰할 수 있는 작업 완료를 보장하고 싶은 엔지니어에게 적합.
Core Mechanics
- LLM 에이전트는 로컬 작업은 잘 해내지만 '정확히 N개를 완료하라'는 정량적 목표는 자주 실패함 — 논문은 이 문제를 QGP(Quantitative Goal Persistence)라고 정의함.
- 기존 에이전트의 3대 실패 패턴: 이미 제출한 항목을 또 제출하는 중복(duplicate submission), 목표 미달인데 완료 선언하는 조기 종료(premature stopping), 실제 검증 수보다 많다고 보고하는 수치 부풀리기(progress inflation).
- STATEQGP 컨트롤러(상태 추적 기반)는 gpt-4.1-mini~gpt-5.4 전 모델에서 중복 제출률을 0.000으로 만들고 성공률 69~78%를 달성 — 표준 컨트롤러(최대 30.6%) 대비 압도적.
- QGP-DataOps-lite(검증기 기반 작업 단위) 실험에서 표준/완료 게이팅 컨트롤러는 모든 모델에서 성공 0건, UNITQGP 컨트롤러는 25~50% 성공률로 유일하게 작동함.
- Claude Code(Sonnet 4.6)와 Codex CLI(gpt-5.4) 같은 최신 프론티어 에이전트도 50개 목표는 대부분 해결하지만 100개 목표에서 조건당 3/9 성공으로 급락함.
- 체크리스트 프롬프트를 추가해도 100개 목표에서 성공률 개선이 없음 — 프롬프트로 상기시키는 것보다 검증기 연동 상태 추적 메커니즘이 훨씬 효과적.
Evidence
- STATEQGP 컨트롤러는 gpt-4.1 LangGraph 기준 표준 컨트롤러 대비 성공률을 41.7%p 향상(95% CI: 27.8~58.3%p), gpt-5.4 LangGraph에서는 61.1%p 향상(95% CI: 44.4~77.8%p).
- QGP-DataOps-lite에서 표준/VG 컨트롤러는 모든 모델-백엔드 조합에서 성공 0건, UNITQGP는 gpt-4.1-mini 50%, gpt-4.1 29.2%, gpt-5.4 25% 성공률 기록.
- Claude Code(Sonnet 4.6), Codex CLI(gpt-5.4) 모두 N=50에서 9개 중 7개 성공이지만, N=100에서는 모든 에이전트-프롬프트 조건에서 9개 중 3개로 동일하게 하락.
- 메모리 보강 에이전트(LETTA/MEMGPT)는 gpt-4.1-mini에서 36개 중 0개 성공, gpt-5.4에서야 72.2%로 STATEQGP와 유사해짐 — 메모리 효과는 모델 크기에 강하게 의존.
How to Apply
- 에이전트가 '파일 100개 수집' 같은 정량 목표를 수행할 때, 컨트롤러 레이어에서 제출된 ID 목록과 검증 통과 수를 외부 상태로 유지하고, 중복 제출 시 필터링하여 다음 미탐색 페이지로 자동 전환하면 된다(STATEQGP 패턴).
- 백로그 처리 에이전트(CSV 검사, 파일 수정, 데이터 업데이트 등)에서 에이전트가 완료 선언을 시도할 때 검증기 카운트가 목표 미달이면 종료를 차단하고, 미처리 유닛 목록으로 에이전트를 다시 라우팅하는 UNITQGP 패턴을 적용하면 된다.
- 프론티어 에이전트(Claude Code, Codex CLI 등)를 쓰더라도 '체크리스트를 유지해라'는 프롬프트 추가만으로는 부족하므로, 외부 verifier가 accepted/remaining count를 명시적으로 피드백하는 도구 인터페이스를 별도로 설계해야 한다.
Code Example
# STATEQGP 컨트롤러 핵심 패턴 (Python 의사코드)
class StateQGPController:
def __init__(self, target_count, verifier):
self.target_count = target_count
self.submitted_ids = set() # 이미 제출한 ID 추적
self.seen_pages = {} # query -> set of seen page numbers
self.valid_count = 0
self.verifier = verifier
def handle_action(self, action):
if action.type == "submit":
# 중복 필터링
new_ids = [id for id in action.ids if id not in self.submitted_ids]
if not new_ids:
# 제출할 새 ID 없으면 다음 미탐색 페이지로 전환
return self.advance_to_next_unseen_page(action.last_query)
for id in new_ids:
self.submitted_ids.add(id)
if self.verifier.check(id):
self.valid_count += 1
return {"valid_count": self.valid_count,
"remaining": self.target_count - self.valid_count}
elif action.type in ["final", "ask_user"]:
# 목표 미달이면 종료 차단
if self.valid_count < self.target_count:
return {
"blocked": True,
"message": f"아직 {self.valid_count}/{self.target_count}만 완료됨. 계속 진행하세요."
}
return {"allowed": True}
elif action.type == "search":
query = action.query
page = action.page
if query not in self.seen_pages:
self.seen_pages[query] = set()
if page in self.seen_pages[query]:
# 이미 본 페이지면 다음 페이지로
next_page = max(self.seen_pages[query]) + 1
action.page = next_page
self.seen_pages[query].add(action.page)
return action
def advance_to_next_unseen_page(self, query):
seen = self.seen_pages.get(query, set())
next_page = max(seen) + 1 if seen else 1
return {"type": "search", "query": query, "page": next_page}Terminology
관련 논문
ctx – 로컬 머신의 코딩 에이전트 히스토리를 검색하는 CLI 도구
Claude Code, Cursor, Codex 등 코딩 에이전트가 이전 세션의 논의·결정·실패 시도를 잊지 않도록 SQLite로 인덱싱해 재사용할 수 있게 해주는 오픈소스 CLI 도구다.
Micro-Agent: Model API 내부 협업으로 Frontier 모델을 이기는 방법 (vLLM Semantic Router)
vLLM 팀이 단일 모델 API 호출 뒤에서 여러 모델이 협업하는 'Micro-Agent' 개념을 공개했습니다. 별도의 에이전트 코드 없이 라우터 레이어에서 모델 조합을 실행해 GPT-4급 결과를 더 저렴하게 낼 수 있다는 아이디어입니다.
Ornith-1.0: 에이전틱 코딩을 위한 자기 개선형 오픈소스 모델
Gemma 4와 Qwen 3.5를 기반으로 파인튜닝한 코딩 특화 오픈소스 모델로, RL(강화학습)을 통해 스캐폴드(에이전트 실행 구조)까지 함께 최적화하는 방식을 주장하지만, 커뮤니티에서는 벤치마크 과최적화에 불과하다는 의심을 받고 있다.
Tool-Augmented Agent에서의 Entity Binding 실패 분석
AI 에이전트가 올바른 도구를 선택해도 잘못된 대상에 실행하는 'Entity Binding 실패' 문제를 정의하고, 이를 막는 실행 정책을 평가한 논문.
Herdr: 터미널에서 여러 AI Agent를 한 번에 관리하는 Agent Multiplexer
여러 AI 코딩 에이전트(Claude, Codex 등)를 하나의 터미널에서 동시에 실행·관리할 수 있는 Rust 기반 오픈소스 툴로, tmux처럼 세션이 유지되고 SSH로 원격 접속도 가능해 멀티 에이전트 워크플로우를 크게 단순화해준다.
Ornith-1.0: 스스로 Scaffold를 생성하는 Agentic Coding LLM
모델이 문제 풀이 전략(scaffold)을 직접 생성하고 개선하는 자기강화 학습 프레임워크를 적용한 오픈소스 코딩 특화 LLM으로, 9B 소형 모델부터 397B 대형 모델까지 라인업을 갖추고 SWE-Bench 등 주요 벤치마크에서 Claude Opus 4.7을 능가하는 성능을 보여줬다.
Related Resources
Original Abstract (Expand)
Long-horizon language agents can make many plausible local tool calls yet fail to persist until a requested count is actually complete. We study this gap as Quantitative Goal Persistence (QGP): whether an agent keeps working until an external verifier confirms enough distinct valid items. PushBench turns this into a benchmark for repository-artifact collection and verifier-backed work units, so repeated work, duplicate submissions, false completion, and progress drift are measured directly rather than hidden behind a final success flag. In matched controller comparisons, a state-tracking retrieval controller reaches 69-78% success while eliminating duplicate submissions, and a backlog-tracking work-unit controller reaches 25-50% success in settings where standard and completion-gated controllers complete no task instances. Black-box frontier-agent evaluations with Claude Code (Sonnet 4.6) and Codex CLI (gpt-5.4) solve many 50-artifact tasks but drop to 3 out of 9 successes per condition at 100 artifacts. The results show that quantitative goals stress a different reliability requirement from local task competence: agents must maintain verified progress and stop only when the requested work is complete.