멀티 에이전트 시스템을 개선하는 가장 큰 방법은 에이전트의 중요도를 낮추는 것
The biggest improvement to my multi-agent system was making the agents less important
핵심 요약
에이전트를 시스템의 핵심이 아닌 대체 가능한 작업자로 설계하고, 권한과 상태 관리를 시스템 외부로 분리해야 합니다.
- 시스템 아키텍처 — 에이전트 중심에서 작업자 중심으로 전환하여 시스템 안정성 확보
- 권한 분리 — 추론 능력과 실행 권한을 분리하여 에이전트가 규칙을 수정하지 못하게 제한
- 결정론적 설계 — 반복되는 작업은 에이전트 대신 규칙과 워크플로우로 자동화
- 조직적 설계 — 에이전트 시스템을 관리, 감사, 제어 체계를 갖춘 조직처럼 운영
지난 몇 주 동안 실무에 쓰고 있는 꽤 규모 있는 멀티 에이전트 시스템의 아키텍처를 싹 갈아엎었다.
가장 큰 개념적 변화는 의외로 간단했다.
이제 에이전트가 시스템 그 자체가 되길 원치 않는다.
시스템 내부에서 언제든 갈아끼울 수 있는 일꾼이길 바랄 뿐이다.
원래는 다들 그렇듯 나도 역할 위주로 생각했다.
디렉터
→ 리서처
→ 애널리스트
→ 실행자
→ 리뷰어
이것도 여전히 가치는 있지만, 작업이 길어지고 결과가 중요해지면 훨씬 더 중요한 질문이 생긴다.
"일꾼을 교체했을 때 무엇이 남는가?"
Codex를 다른 모델, 더 싼 모델, 결정론적 스크립트, 전문 에이전트, 심지어 사람으로 바꿔도 다음 것들은 잃고 싶지 않다.
- 프로젝트 상태
- 원래 목표
- 규칙과 방법
- 권한
- 지금까지 모은 증거
- "완료"의 정의
- 이미 시도해 본 기록
그래서 내가 지향하는 아키텍처는 이런 모양이다.
권한 있는 상태(authoritative state)
→ 제한된 작업 계약(bounded task contract)
→ 역량 라우팅(capability routing)
→ 적절한 일꾼(appropriate worker)
→ 구조화된 결과(structured result)
→ 가능한 경우 결정론적 검사(deterministic checks)
→ 필요시 독립적인 의미론적 검증(independent semantic validation)
→ 검증된 상태 업데이트(verified state update)
→ 다음 작업
일꾼은 일시적이다.
작업, 권한, 증거는 영구적이어야 한다.
이 생각은 몇 가지 다른 변화를 가져왔다.
첫째, "완료"는 이제 일꾼이 선언한다고 끝나는 게 아니다.
작업이 외부 시스템을 건드렸다면, 시스템이 독립적으로 결과 상태를 다시 읽어와야 한다.
파일을 만들기로 했으면 파일을 확인하고,
기록을 바꾸기로 했으면 기록을 읽어보고,
코드를 배포하기로 했으면 배포된 상태를 검증해야 한다.
모델이 "다 끝냈어"라고 말할 수는 있다.
그건 그냥 주장일 뿐, 증거가 아니다.
둘째, 추론 자율성과 실행 권한을 분리하고 있다.
성능 좋은 모델한테는 탐색하고, 가정을 의심하고, 완전히 다른 전략을 제안할 자유를 줄 수 있다.
그렇다고 해서 그 모델이 자기 권한이 뭔지, 어떤 규칙을 따라야 하는지, 돈을 얼마나 쓸 수 있는지, 승인 절차를 건너뛸 수 있는지까지 결정하게 둬선 안 된다.
에이전트가 똑똑해질수록 이런 경계선을 에이전트 외부로 빼는 게 훨씬 중요해진다.
셋째, 추론이 필요 없는 작업에서 추론을 걷어내는 데 훨씬 공격적으로 변했다.
새로운 문제에 강력한 추론이 필요하면 쓰면 된다.
하지만 똑같은 패턴이 반복되고 해결책이 왜 먹히는지 알게 됐다면:
경험 → 규칙
규칙 → 테스트
테스트 → 워크플로우
성숙한 에이전트 시스템은 의외로 지루하고 결정론적인 소프트웨어가 꽤 많이 들어있어야 한다.
최신 모델이 이미 아는 계산을 다시 하고, JSON 스키마를 체크하고, ID를 대조하거나 파일 존재 여부를 확인하게 만들고 싶지 않다.

