에이전트를 이틀 동안 무인(Unattended)으로 실행하는 데 필요한 것
요약
에이전트를 장시간 무인(Unattended)으로 실행할 때 발생하는 허위 완료, 비수렴, 컨텍스트 고갈 문제를 해결하기 위한 설계 전략을 다룹니다. 검증기 도입, 작업과 판단의 분리, 재시도 예산 및 서킷 브레이커 설정을 통해 안정적인 에이전트 워크플로우를 구축하는 방법을 설명합니다.
핵심 포인트
- 허위 완료 방지를 위해 보고서가 아닌 아티팩트 기반의 기계적 검증 수행
- 작업 수행 에이전트와 판단 에이전트를 분리하여 신뢰성 확보
- 비수렴(무한 루프) 방지를 위해 단계별 재시도 예산 및 서킷 브레이커 적용
- 실패 시 무한 재시도 대신 정의된 실패 경로로 라우팅하는 구조 설계
Favur는 2048 게임에 대한 작업 명세서(Statement of Work)를 바탕으로 Meta Muse Spark 1.1에서 이틀 동안 무인(Unattended)으로 실행되었습니다. 이 과정에서 단 한 번의 인간 개입 없이 6번의 세션에 걸쳐 테스트를 포함한 131개의 파일을 생성했습니다.
몇 시간 이상의 무인 실행은 소수의 방식으로 실패합니다. 더 나은 모델은 출력 품질의 한계치를 높여주지만, 이러한 실패 요인들을 제거하지는 못합니다. 왜냐하면 이는 모델의 특성이라기보다 모델을 루프(Loop) 내에서 장시간 실행할 때 발생하는 특성이기 때문입니다. 다음은 하네스(Harness)가 각 요인에 대해 수행하는 작업이며, 여기에는 하네스가 해결하지 못하는 한 가지 요인도 포함됩니다.
허위 완료 (False completion)
작업을 수행하지 않고도 단계가 성공했다고 보고하는 경우입니다. 감독 하에 이루어지는 실행(Supervised run)에서는 단 1분의 비용만 발생합니다. 하지만 무인 실행(Unattended run)에서는 후속 단계들이 그 결과를 바탕으로 진행되므로, 오류가 깨끗한 롤백(Rollback) 지점을 지나 몇 시간 후에나 드러나게 됩니다.
완료 여부는 보고서가 아닌 아티팩트(Artifacts)를 기준으로 제어됩니다. 각 단계 유형에는 이를 진행시킬 수 있는 정확히 하나의 도구가 있으며, 단계가 종료되기 전에 검증기(Validators)가 실행됩니다.
검증기가 실질적인 부분입니다. 검증은 최소 두 개의 컨텍스트 문서(Context documents)를 인용해야 합니다. 커밋(Commit)은 커밋 해시(Commit hash)와 비어 있지 않은 커밋된 파일 목록이 없으면 거부됩니다. 수락 기준(Acceptance criteria)은 성공을 주장하는 산문(Prose) 형태가 아니라, 구조화된 필드(Structured fields)로 반환되어 기계적으로 확인됩니다. 아티팩트가 사용 가능한 곳에서는 어떠한 주장도 수락되지 않는데, 이는 모델이 무엇이든 주장할 수는 있지만 자신이 수행하지 않은 커밋에 대한 해시를 생성할 수는 없기 때문입니다.
작업과 판단은 분리됩니다. 개발 워크플로우를 실행하는 에이전트는 코드를 작성하지 않습니다. 대신 서브 에이전트(Sub-agents)를 순차적으로 배치하고 게이트(Gates)를 강제합니다. 테스트 생성은 구현(Implementation)보다 앞선 별도의 위임된 단계이며, 구현 단계는 해당 테스트를 통과시키기 위해 존재합니다. 검증 실패 시에는 다음 단계로 진행하는 대신 구현 단계로 다시 경로를 돌립니다.
비수렴 (Non-convergence)
장기 실행을 종료시키는 실패는 감지 가능한 충돌(Crash)이 아니라, 정상 작동처럼 보이는 루프(Loop)입니다. 프로세스는 살아있고, 요청이 발행되고 있으며, 토큰이 소비되고 있고, 출력이 생성되고 있습니다.
일반적인 형태는 무제한 재시도(unbounded retry)가 아니라, 에이전트가 둘 다 틀린 두 가지 후보 솔루션 사이를 오가며 결코 종료되지 않는 진동(oscillation)입니다.
이는 세 가지 수준에서 제한됩니다. 각 단계(step)는 재시도 예산(retry budget)을 가집니다. 예산을 모두 소진하면 재시도하는 대신 해당 단계를 실패로 처리하며, 종료 상태(terminal state)는 다시 대기(pending) 상태로 돌아갈 수 없으므로 실패한 단계가 사이클을 다시 장전(re-arm)하거나 재시작할 수 없습니다. 실패한 단계는 실행을 종료하는 대신 선언된 실패 경로(failure path)로 라우팅됩니다. 단계가 이전 계획 단계로 다시 라우팅될 수 있는 경우, 재진입(re-entry) 횟수가 계산되며 상한선(cap)에 도달하면 단계가 격상됩니다. 또한 각 에이전트는 전체 실행 동안의 누적 실패를 계산하는 서킷 브레이커(circuit breakers)를 탑재하여, 단일 단계의 반복된 실패와 서로 다른 단계에서 동일한 오류가 반복되는 것을 구분합니다.
컨텍스트 고갈 (Context exhaustion)
작업 단위 도중에 컨텍스트(context)가 고갈되면, 다음 세션에서 안전하게 재개할 수 없는 반쯤 구현된 기능이 남게 되며, 일반적인 결과는 거의 완료된 작업을 폐기하는 것입니다.
대화 기록은 모델의 컨텍스트 제한에 도달하기 전, 채워진 수준에 따라 단계적으로 요약되거나 삭제됩니다. 한계치에 가까워지면 요청을 완료할 수 없는 상태에서 발행하는 대신 요청 자체를 강제로 차단(hard-blocked)합니다.
작업 드리프트 (Task drift)
작업 드리프트(Task drift)는 이 프레임워크(harness)가 해결하지 못하는 유일한 실패 요인입니다. 출력이 원래 작업과 여전히 관련이 있는지에 대한 의미론적 검사(semantic check)가 없으며, 에이전트의 작업이 주제와 관련이 있는지 평가하는 장치도 없습니다.
드리프트에 대한 제약은 구조적입니다. 단계는 검증기(validators)를 통과할 때까지 진행될 수 없습니다. 진행 도구는 단계 유형별로 고정되어 있습니다. 단계 요구사항은 출력이 생성되기 전, 진입 시점에 주입되므로 단계가 제출해야 하는 증거는 사후에 평가되는 것이 아니라 사전에 알려집니다. 완료된 계획 단계의 전략 지식은 실행의 남은 기간 동안 유지되므로, 결정된 사항을 다시 도출하는 과정이 드리프트의 원인이 되는 것을 방지합니다.
리뷰 품질 (Review quality)
리뷰에서의 실질적인 실패는 자동화된 리뷰어가 잘못된 코드를 승인하는 것이 아닙니다. 그것은 생성된 대규모 디프 (diff)에 대한 인간의 리뷰가 훑어보기 (skimming) 수준으로 저하되는 것이며, 코드 생성 비용이 저렴해질 때 검증 부담이 사라지는 것이 아니라 이동하게 된다는 점입니다.
이는 자동화된 리뷰가 신뢰할 수 있을 만큼 믿을 만할 때만 개선되는데, 이를 위해서는 리뷰어가 어느 방향으로든 틀렸을 때 비용을 부담해야 합니다.
리뷰어는 결과물을 생성하기 전에 파일을 읽어야 합니다. 모든 결과물은 심각도 (severity)를 가집니다. 오탐 (false-positive) 차단기는 실제 문제가 아닌 결과물이 세 번 발생하면 작동하며, 이는 과도한 플래깅 (over-flagging)에 비용을 매김으로써 이를 무료 헤지 (free hedge)로 남겨두지 않도록 합니다.
숨겨진 능력 격차 (Concealed capability gaps)
능력에 근거한 포기 (Capability-justified abandonment)는 점수 감점이 없습니다. 능력이 부족하여 중단하고 보고하는 에이전트는 중단했다는 이유로 점수가 깎이지 않습니다.
이러한 추론은 메커니즘보다는 인센티브 구조에 기반합니다. 정직한 포기에 대해 페널티를 부여하면 에이전트가 격차를 숨기게 만들며, 숨겨진 격차는 조작된 작업 (fabricated work)으로 채워지게 됩니다.
세션 간 상태 (State across sessions)
컨텍스트 리셋 (context reset)은 이전 상태에 대한 기억 없이 세션을 시작합니다. 이틀간의 실행에서 이는 절반만 구현된 작업이 그렇게 식별되지 않은 채 남아있고, 새로운 에이전트가 스스로 해석할 수 없는 상태에서 재개됨을 의미합니다.
이번 실행은 6개의 세션에 걸쳐 진행되었습니다. 체크포인트 (Checkpoints)는 주기적으로 작성되며, 에이전트의 완료 또는 실패 시 즉시 작성됩니다. 해당 상태는 세션 경계를 넘어 지속되므로, 각 세션은 통과 및 실패한 단계 세트가 온전하게 유지된 상태로 재개되었습니다. 체크포인팅은 실행을 차단하지 않습니다.
출력 (Output)
작업 기술서 (SOW)는 2048의 복제본이 아닌 창의적인 변형을 명시했으므로, 테마는 모델이 선택했습니다. 타일은 차가운 상태에서 불안정한 상태로 진행됩니다.
실행은 빌드된 게임을 실행하고 플레이하며, 테스트 스위트 (test suite)가 통과(green)되었다고 보고하는 대신 이동, 병합 및 업적 이벤트를 생성했습니다. 무인 (unattended) 실행에서 이는 테스트 통과보다 더 강력한 완료 신호입니다.
해당 리포지토리는 https://github.com/awesoftsolutions/idea_meta-muse-2048-game에서 오픈 소스로 공개되어 있습니다.
전체 실행 기록은
에서 확인할 수 있습니다.리플레이 (Replay)는 https://favur.dev/go/devto/the2048에서 구동하거나 단계별로 진행(step through)할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기