Otonom Ajanlarda Determinizm ve Sonsuz Döngü Bariyerleri: LangGraph ve Stateful Mimari Analizi
Quick Summary
운영 환경의 자율 에이전트는 중앙 상태 그래프와 정적 반복 제한, 의미적 정체 감지, 토큰 소비 속도 감시를 결합한 결정론적 통제 계층 안에서 작동해야 한다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
운영 환경의 자율 에이전트는 중앙 상태 그래프와 정적 반복 제한, 의미적 정체 감지, 토큰 소비 속도 감시를 결합한 결정론적 통제 계층 안에서 작동해야 한다.
📌 핵심 요약
- 코드 작성 에이전트와 테스트 에이전트를 상태 없이 연결하면 표면적인 코드 수정과 동일한 오류 보고가 반복되면서 비용과 지연만 증가하는 무한 루프가 발생할 수 있다.
- LangGraph와 같은 상태 유지형 그래프에서는 에이전트를 노드로, 전환을 간선으로 정의하고 코드·오류·반복 횟수·이력 등을 중앙 상태 객체에 보관해 다음 경로를 결정론적으로 선택한다.
- 정적 반복 횟수 제한은 루프를 강제로 종료할 수 있지만, 실제로 해결에 가까워지는 반복과 같은 문제를 맴도는 반복을 구분하지 못한다.
- 코드와 오류를 임베딩한 뒤 최근 기록과 코사인 유사도를 비교하는 의미적 루프 탐지기는 표현만 달라진 동일한 실패를 찾아내고, 다른 해결 전략을 시도하도록 의미적 백오프를 적용한다.
- 토큰 총량뿐 아니라 소비 증가 속도까지 감시하고 임계치를 넘으면 작업을 중단해 사람의 검토로 넘김으로써 자율성을 유지하면서도 비용과 운영 위험을 통제한다.
🧩 주요 포인트
- 코드 작성 에이전트와 테스트 에이전트를 상태 없이 연결하면 표면적인 코드 수정과 동일한 오류 보고가 반복되면서 비용과 지연만 증가하는 무한 루프가 발생할 수 있다.
- LangGraph와 같은 상태 유지형 그래프에서는 에이전트를 노드로, 전환을 간선으로 정의하고 코드·오류·반복 횟수·이력 등을 중앙 상태 객체에 보관해 다음 경로를 결정론적으로 선택한다.
- 정적 반복 횟수 제한은 루프를 강제로 종료할 수 있지만, 실제로 해결에 가까워지는 반복과 같은 문제를 맴도는 반복을 구분하지 못한다.
- 코드와 오류를 임베딩한 뒤 최근 기록과 코사인 유사도를 비교하는 의미적 루프 탐지기는 표현만 달라진 동일한 실패를 찾아내고, 다른 해결 전략을 시도하도록 의미적 백오프를 적용한다.
- 토큰 총량뿐 아니라 소비 증가 속도까지 감시하고 임계치를 넘으면 작업을 중단해 사람의 검토로 넘김으로써 자율성을 유지하면서도 비용과 운영 위험을 통제한다.
🧠 상세 정리
1. 자율성과 무감독 실행을 혼동하는 설계 오류
글은 에이전트에게 과업만 설명하면 나머지는 스스로 처리할 것이라는 통념에서 출발한다. 저자는 이런 방식이 시제품에서는 작동할 수 있지만, 운영 환경에서는 자율성을 무감독 상태와 혼동한 명백한 아키텍처 오류라고 본다. 운영 중인 다중 에이전트 시스템에는 결과를 생성하는 능력뿐 아니라 진행 상태, 반복 양상, 비용 변화와 중단 조건을 외부에서 판단하는 통제 장치가 필요하기 때문이다. 따라서 논의의 중심은 에이전트의 지능을 높이는 데 있지 않고, 상태 유지형 그래프와 결정론적 경로 선택을 통해 자율 행동의 허용 범위를 설계하는 데 있다. 저자가 다루는 대표적 장애는 코드 작성 에이전트와 테스트 에이전트가 서로 오류와 수정본을 주고받다가 끝없이 반복되는 상황이다.
2. 코드 작성자와 테스트 담당자의 무한 반복 구조
코드 작성 에이전트가 함수를 만들면 테스트 에이전트가 실행 결과에서 오류를 찾고, 자연어로 오류를 전달해 수정을 요청한다. 정상적인 경우에는 이 반복을 통해 문제가 해결되지만, 코드 작성 에이전트가 근본 원인을 찾지 못하면 변수 이름 변경, 괄호 위치 조정, 불필요한 형 변환과 같은 표면적 수정만 반복할 수 있다. 테스트 에이전트는 여전히 오류가 남았다는 응답을 반환하고, 두 에이전트는 해결에 가까워지지 않은 채 수십 차례 왕복한다. 각 왕복은 새로운 언어 모델 호출, 과금되는 토큰, 네트워크 지연을 발생시키므로 논리적 정체가 곧 운영 비용의 누적으로 이어진다. 상태가 없는 두 에이전트는 직전 메시지에만 반응하고 전체 이력을 보지 못하기 때문에 자신들이 같은 실패를 되풀이한다는 사실을 스스로 알아차리기 어렵다.
3. 중앙 상태 그래프를 통한 결정론적 제어
저자는 에이전트 사이의 상호작용을 단순한 대화 체인이 아니라 상태를 보존하는 그래프로 모델링한다. LangGraph와 같은 구조에서는 각 에이전트가 노드가 되고 작업 전환은 간선으로 표현되며, 모든 실행 정보는 중앙의 상태 그래프 객체를 통해 전달된다. 예시의 상태 객체에는 작업 식별자, 최신 코드, 마지막 오류, 현재 반복 횟수, 최대 반복 횟수, 코드와 오류의 전체 이력이 포함된다. 각 노드는 호출 전후에 이 상태를 읽고 갱신하며, 다음에 실행할 노드는 언어 모델의 즉흥적 판단이 아니라 명시적인 라우팅 함수가 선택한다. 이 구조는 에이전트가 직접 서로에게 작업을 넘기는 대신 중앙 상태와 통제 계층을 반드시 거치게 함으로써 관찰 가능성과 중단 가능성을 확보한다.
4. 정적 반복 제한의 역할과 한계
테스트 결과에 오류가 없으면 라우팅 함수는 작업을 최종 처리 단계로 보내고, 오류가 있으면서 반복 횟수가 최대치에 도달하면 사람의 검토 단계로 전환한다. 두 조건에 해당하지 않을 때만 반복 횟수를 증가시키고 코드 작성 에이전트에게 다시 기회를 준다. 이런 정적 제한은 무한 실행을 유한한 범위로 묶는 가장 기본적인 안전장치이며, 통제 장치 없는 자기 수정 루프가 예산을 소진하는 일을 방지한다. 그러나 반복 횟수는 몇 번 수행했는지만 알려 줄 뿐, 각 반복이 해결에 가까워졌는지는 판단하지 못한다. 복잡한 리팩터링을 열 차례 만에 성공시킨 과정과 열 차례 동안 동일한 오류를 맴돈 과정을 같은 값으로 처리하기 때문에, 진행의 질을 판별할 별도의 계층이 필요하다.
5. 임베딩 기반 의미적 정체 감지
의미적 루프 탐지기는 코드의 문자가 달라졌다는 사실보다 논리적으로 같은 실패가 반복되는지를 확인하기 위해 도입된다. 저자는 각 반복에서 생성된 코드와 오류 문장을 로컬 ONNX 모델로 임베딩 벡터로 변환하고, 최근 일정 개수의 벡터와 코사인 유사도를 비교한다. 새 벡터와 과거 벡터의 유사도가 설정된 임계치, 예시로 제시된 0.92 이상이면 변수명이나 주석 등 표면은 달라도 같은 막다른 길을 반복하고 있다고 판정한다. 탐지기는 비교에 필요한 기록이 충분하지 않을 때는 새 벡터를 저장하고, 윈도 크기가 찬 뒤에는 오래된 벡터를 밀어내며 최근 기록을 유지한다. 이 방식은 단순 문자열 비교로는 놓치기 쉬운 의미적 정체를 수치화해, 반복 횟수가 한계에 도달하기 전에 개입할 근거를 제공한다.
6. 즉시 중단 대신 적용하는 의미적 백오프
의미적 정체가 감지되더라도 저자는 시스템을 곧바로 종료하지 않고 의미적 백오프 단계를 실행한다. 이 단계에서는 이전 시도들의 요약과 이미 실패한 아키텍처 접근법을 시스템 프롬프트에 주입해, 코드 작성 에이전트가 같은 방법을 다시 제시하지 못하도록 한다. 이어서 다른 라이브러리나 다른 알고리즘처럼 기존과 구별되는 해결 전략을 선택하도록 유도한다. 이는 자율성을 완전히 제거하기보다, 실패 이력을 근거로 탐색 방향을 바꾸게 하는 제한된 두 번째 기회다. 결과적으로 시스템은 맹목적인 재시도를 차단하면서도 정적 반복 제한만으로는 조기에 포기할 수 있는 해결 가능성을 일정 범위 안에서 보존한다.
7. 토큰 소비 속도를 감시하는 선제적 예산 장벽
논리적 루프를 제어하는 것만으로는 운영 안전이 완성되지 않으므로, 저자는 토큰 소비가 얼마나 빠르게 증가하는지도 별도로 추적한다. 에이전트가 정체되면 각 반복에서 설명이 길어지고 오류 스택도 커질 수 있어, 토큰 사용량이 단순히 일정하게 늘기보다 가속되는 양상을 보일 수 있다. 최대 토큰 총량만 설정하면 한도에 거의 도달할 때까지 경고하지 못하고, 중단 시점에는 이미 상당한 비용이 발생했을 가능성이 있다. 예시의 예산 감시기는 일정 구간의 시작과 끝 토큰 값을 이용해 반복당 평균 증가량을 계산하고, 그 값이 지정된 임계치 이상이면 위험한 소비 속도로 판단한다. 이처럼 속도 기반 감시는 총량 한도에 닿기 전에 비용 급증을 포착해 선제적으로 자율 실행을 멈추기 위한 장치다.
8. 사람의 검토와 세 겹의 외부 감독 체계
통합 라우팅에서는 먼저 의미적 정체를 확인해 발견되면 의미적 백오프로 보내고, 이어 토큰 소비 속도가 임계치를 넘었는지 검사해 사람의 검토 단계로 전환한다. 두 위험 조건이 없을 때에만 테스트 성공 여부와 정적 반복 횟수를 확인하는 기본 라우팅을 계속한다. 사람의 검토 단계에 들어가면 실행은 일시 중단되고, 현재 코드와 오류 이력, 토큰 증가 상황 등 누적된 상태가 검토 화면에 제공되며 자동화된 결정권은 수동 판단으로 넘어간다. 정적 반복 제한, 의미적 루프 탐지, 소비 속도 장벽이 결합되면 에이전트 내부의 자율성 바깥에 결정론적인 감독 벽이 형성된다. 저자가 제시한 흐름도는 에이전트 간 직접 통신보다 중앙 상태와 통제 계층을 강조하며, 운영 환경의 안전은 인공지능의 자율 판단이 아니라 명시적인 아키텍처 경계와 비상 제동 장치에서 나온다는 결론을 보여 준다.
🧾 핵심 주장 / 시사점
- 다중 에이전트 분리는 그 자체로 문제가 아니며, 실패의 핵심은 분리된 에이전트가 공유 상태와 상위 라우팅 규칙 없이 직전 메시지에만 반응하도록 구성되는 데 있다.
- 안전한 재시도는 횟수 제한만으로 충분하지 않고, 반복이 실질적인 진전인지 의미적으로 동일한 정체인지 판별한 뒤 실패한 접근을 다음 문맥에 반영해야 한다.
- 운영 통제는 논리적 실패와 비용 위험을 함께 다뤄야 하며, 반복 횟수·의미적 유사도·토큰 소비 속도 중 하나라도 위험 신호를 보이면 경로를 변경하거나 사람에게 권한을 넘겨야 한다.
✅ 액션 아이템
- 코드 작성·테스트 에이전트 연동 경로에 중앙 상태 객체를 두어 코드·오류·반복 횟수·이력을 누적 보존한다.
- 정적 반복 제한만으로 끝내지 않고, 코드·오류 임베딩의 코사인 유사도 기반 의미적 탐지로 동일 실패 반복을 판별해 백오프 전략을 전환한다.
- 토큰 총량뿐 아니라 토큰 소비 증가 속도를 함께 추적해 임계치 초과 시 작업을 즉시 중단하고 사람 검토로 이관한다.
❓ 열린 질문
- 중앙 상태 그래프에서 어떤 상태 필드를 기준으로 에이전트 전환 경로를 결정론적으로 선택해야 일관성이 확보되는가?
- 의미적 루프 탐지의 코사인 유사도 임계값은 어떤 범위가 동일 실패 재현을 잡되 새로운 해결 시도를 놓치지 않게 하는가?
- 토큰 소비 증가 속도 임계치는 어떤 방식으로 계산해 자동화 중단과 사람이 개입하는 전환 시점을 정할 것인가?