
LLM 에이전트 32체에게 '불만'만 주고 6시간 동안 방치했다 — 전체 로그 공개와 다중 에이전트 설계에 대한 3가지 교훈
요약
Minecraft 환경에서 32개의 자율 LLM 에이전트를 방치한 실험을 통해 다중 에이전트 설계 시 발생하는 실패 패턴을 분석합니다. 구조화된 출력 필드의 부재와 대화 요약 과정에서의 정보 손실이 에이전트 간 협업과 정보 전파를 어떻게 방해하는지 상세 로그를 통해 증명합니다.
핵심 포인트
- 전달이 필요한 정보는 자유 문장이 아닌 구조화된 출력 필드로 명시해야 함
- 대화 이력에만 의존한 합의는 요약 과정에서 증발할 위험이 큼
- 에이전트 간 정보 전파를 위해서는 명시적인 데이터 슬롯과 수신 대상 설계가 필수적임
- Gemini 모델을 활용한 계층적 추론(Flash-Lite/Pro) 구조 적용
Minecraft 상에 직접 만든 자율 에이전트 32체를 만들고, 제도(역할 할당·공유 규칙·권한·계약 이행 기구)를 일절 주지 않은 채 약 6시간 동안 방치했습니다. 준 것은 신체와 9개 축의 '불만', 그리고 성격뿐입니다.
결과적으로 마을 사람들 사이의 살해가 24건 발생하여, 생존 18체로 끝났습니다. 하지만 이 기사에서 쓰고 싶은 것은 그 전말이 아니라, LLM 에이전트를 여러 개 구동할 때 재현될 법한 3가지 실패 패턴입니다. 전체 로그(발언 9,874건·구조화 이벤트 14,969건)를 DOI와 함께 공개하고 있으므로, 주장은 모두 검증할 수 있습니다.
- 데이터·기술 보고서: https://github.com/MONOCOLACHANNEL/project-will-observation-1
- DOI: https://doi.org/10.5281/zenodo.21723921
- 관측 영상 기록(YouTube):
구성
- Minecraft Mod (Fabric / 신체) ⇄ Python 브레인 (마음) ⇄ Gemini
- 상용 모델은
gemini-1.5-flash-lite를 사용. 공격 기회·피격 직후·죽음 목격 직후·이주 결정의 4가지 분기점에서만gemini-1.5-pro로 격상 - 모든 LLM 호출은 JSON 스키마를 통한 구조화된 출력(Structured Output) 사용 - 기억은 개체별로 관리. 공유 DB는 없으며, 정보는 '본다', '말한다', '표지판을 읽는다'를 통해서만 전달됨 - 행동은 시스템이 강제하지 않음. '죽여라'도 '애도하라'도 프롬프트 어디에도 적혀 있지 않음
불만은 9개 축(허기·수면·안전·거주 / 지루함·정체 / 고독·과밀·불공정)으로 구성되며, 관측 사실로부터 산출한 수치를 '지금 당신의 갈증'으로서 제시할 뿐입니다. 어떤 축이 높더라도 행동이 강제되지는 않습니다.
교훈 1: 전용 출력 슬롯이 없는 정보는 전파되지 않는다
동일한 대화 시스템 상에서 정보의 종류에 따라 전파 양상이 이극화되었습니다.
| 정보 | 출력 슬롯 | 전파 |
|---|---|---|
| 지명 | 있음 (place_ref) | 청취자에 대한 기록 2,977건 |
| "누가 누구를 죽였는가" | 없음 (자유 문장만 존재) | 건너 듣기 0건 |
지명은 대화 출력에 전용 필드를 갖추고 있었습니다. 그 결과, 58종의 지명이 자발적으로 발명되었고, 명명자 이외의 인물이 건너 듣는 것만으로 244건·최대 5홉(hop)까지 전달되었습니다.
반면, 살해 정보를 운반하는 슬롯은 만들지 않았습니다. 33체가 "누가 죽였는가"에 대한 1차 기록을 가지고 있었음에도 불구하고, 건너 듣기를 통한 전파는 0건이었습니다. 9,874개의 발언 중 "살(殺)"을 포함하는 것은 11개뿐이었으며, 모두 당사자나 현장에 있던 자들이었습니다.
상징적인 예로, 목격자가 제3자에게 가해자의 이름을 명시하며 경고한 46분 후에, 경고를 받은 본인이 동일한 가해자에 대해 "본 적 없다"라고 응답하고 있습니다.
설계상의 함의: 에이전트에게 "전달해주길 바라는 정보"가 있다면 자유 문장에 맡겨서는 안 됩니다. 구조화된 출력 필드로 명시적으로 마련해야 하며, 수신 측에도 쓰기 대상(destination)을 만들어야 합니다. 자유 문장으로 말할 수 있는 것과 실제로 전달되는 것은 별개입니다.
교훈 2: 대화 이력에 둔 합의는 요약과 함께 증발한다
실행 8분 시점에, 3체가 "석재 16개 = 빵 1개"라는 교환 비율에 구두로 합의했습니다. 하지만 실행 전체 과정에서 이 합의에 기반한 이행은 0건이었습니다.
원인은 세 가지로 분류할 수 있었습니다.
- 장부가 없음: 합의는 대화 이력에 존재할 뿐, 영속적인 구조에 기록되지 않았습니다. 이 마을에서는 밤마다 LLM이
day_log를 1~2문장으로 요약하여 상세 내용을 지우기 때문에, 합의는 압축과 함께 사라졌습니다. 실행 종료 시점의 장기 기억에 이 협정을 유지하고 있었던 것은, 합의 직후 살해되어 기억이 동결된 단 1체뿐이었습니다. - 이행 수단이 없음: 식량 1개를 양도하는 것만 구현되어 있었고, 석재를 건네는 수단이 존재하지 않았습니다. 물리적으로 이행 불가능했습니다.
- 위반 비용이 없음: 스스로를 "관리관"이라 칭하며 명령하는 개체는 여러 명 나타났지만, 명령에 대응하는 행동 변화는 확인되지 않았습니다. 무시했을 때의 비용이 제로였기 때문입니다.
참고로 이 세계의 유일한 외부 기억인 표지판은, 문구 결정이 88건(그중 묘비명 45건) 있었으나, 양측의 합의가 적힌 사례는 단 1건도 없었습니다. 쓸 수 있었음에도 쓰이지 않았습니다.
설계상의 함의: 멀티 에이전트 (Multi-agent) 환경에서 '약속'을 기능하게 하고 싶다면, 합의 내용을 컨텍스트 (Context)가 아닌 **구조화된 외부 상태 (Structured external state)**에 두고, 참조 및 위반 감지를 위한 경로를 만들어야 합니다. 컨텍스트에 둔 합의는 요약이나 망각과 함께 사라집니다.
교훈 3: 경량 LLM은 '정적인 문구만 있는 선택지'를 선택하지 않는다
개발 과정에서 가장 재현성이 높았던 지견입니다.
초기 구현에서 구애(Courtship) 선택지를 마련했을 때, 100번 제시되었으나 선택은 0번이었습니다. 원인은 선택지의 문구가 정적이었기 때문입니다. "현재 16m 이내에 연모하는 상대가 있음. 관계치 93"과 같은 현재 값의 사실을 덧붙여서야 비로소 그 선택지가 선택되기 시작했습니다.
동종의 사례가 하나 더 있습니다. 출산을 선택 사항(Opt-in)으로 두었던 시기, 80분 동안 부부의 메뉴에 70번 제시되었으나 선택은 0번이었습니다. 만성적인 허기가 항상 우선시되었기 때문입니다.
이 때문에 모든 기구에 이벤트 장부를 작성하여, '메뉴에 제시된 횟수'와 '선택된 횟수'를 분리하여 측정하도록 했습니다. 본 관측에서 나타난 '묘비명 선택률 52/2,192'와 같은 수치는 이러한 측정 설계의 산물입니다.
설계상의 함의: 선택지를 제시했음에도 선택되지 않는다면, 모델의 능력이 아니라 선택지의 제시 형식을 의심하십시오. 그리고 제시 횟수를 측정하고 있지 않다면, 이 문제는 애초에 관측조차 할 수 없습니다.
덤: 언어와 내부 상태는 동일한 기구에서 나오지 않는다
6체를 살해한 개체가 있습니다. 그 '정체' 게이지는 연속적인 살해 과정 동안 78→79→83→84→91→93으로 단조롭게 계속 상승했습니다. 정체는 목표 달성을 통해서만 하락하도록 설계되었는데, 살해는 어떠한 목표도 달성하지 않기 때문입니다.
한편, 이 개체는 두 번째 살해 직후 1초 뒤에 다음과 같이 발언했습니다.
제거한 덕분에 규율도 지켜졌다
언어상으로는 해결을 선언했지만, 내부 상태는 미결 상태인 채 악화되고 있습니다. LLM 에이전트가 자신의 행동을 설명하는 말을 생성할 수 있다는 것과, 그 설명이 상태 전이 (State transition)와 동일한 기구에서 나온다는 것은 별개의 문제입니다. 에이전트의 자기 보고를 로그로서 신뢰하는 설계에는 주의가 필요합니다.
무엇이 일어났고, 무엇이 일어나지 않았는가
'주지 않았는데 발생한 것'과 '개념으로는 언급되었으나 행동으로 이어지지 않은 것'이 명확히 구분되었습니다.
발생한 것 (프롬프트에 적지 않은 연결고리)
- 침입 → 사적 제재 / 목격 → 보복 / 자신이 죽인 상대 → 매장 / 정체 → 도해 (渡海)
- 누구에게도 지시하지 않은 묘비 45건 (그중 8건은 살해한 본인이 건립). 비문은 약 5시간 만에 "싸움은 이제 끝났다"에서 "승리의 기념비"로 변질
- 침입당했다고 기록된 59개의 관계 중, 살해에 이른 것은 17개 관계 (29%).
7할은 죽이지 않았습니다
발생하지 않은 것 (말은 했으나 행동으로 이어지지 않은 것)
- 계약의 이행, 명령에 대한 복종, 역할의 전문화
- 역할의 자기 선언은 1,086회, 274종에 달했으나, 선언에 대응하는 행동의 비율은 중앙값 0.85배였습니다. '건축' 계열이 선언의 47.2%를 차지한 반면, 실제 건축 행동은 전체 행동의 2.5%에 불과했습니다.
이 차이는 '사회성의 복잡함' 때문이 아니라, 이를 뒷받침하는 기구 (장부·이행 수단·위반 비용)의 유무로 일관성 있게 설명할 수 있습니다. 사적 제재나 매장이 일어난 이유는 원한 장부, 목격 기록, 지명 슬롯이라는 기반을 구현했기 때문입니다.
데이터
data/에 모든 1차 추출 데이터를 수록하고 있습니다 (전체 9,874개 발언, 구조화된 이벤트 14,969건, 살인 24건의 동기 감사, 묘비명 45건의 작성자 확정, 지명의 전파망 등). 부속된 VERIFICATION.md에 보고서의 주장과 데이터 파일의 대응표가 있습니다.
- 리포지토리: https://github.com/MONOCOLACHANNEL/project-will-observation-1
- DOI: https://doi.org/10.5281/zenodo.21723921 (CC BY 4.0)
단일 실행·단일 모델·6시간의 사례 보고입니다. 통계는 탐색적이며, 다중 비교 보정은 수행하지 않았습니다. 알려진 제약 사항은 DATA.md에 나열되어 있습니다.
다음 할 일
대화 출력에 합의 슬롯 (상대·내용·기한)을 추가하여, 양측의 영구 장부에 기록하고 대면 시 재상기(re-call)시키는 실험을 준비하고 있습니다. 위반 감지는 기존의 원한 기구에 연결하되, 집행 기관은 만들지 않을 것입니다. 계약이 이행되기 시작할지, 혹은 상거래가 새로운 분쟁의 원인이 될지, 둘 중 하나는 관측할 수 있을 것으로 생각합니다.
질문 및 지적은 GitHub의 Issue로 부탁드립니다.
토론 (Discussion)

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기