블로그 10: Minecraft 모드 에이전트 - AI 에이전트가 스스로를 평가하게 만들고, 그 점수를 활용해 더 나은 전투 조언자로 개선하기
요약
Minecraft 모드 내 AI 에이전트의 의사결정 품질을 측정하기 위한 평가 프레임워크 구축 과정을 다룹니다. 코드 기반의 결정론적 검증과 LLM-as-Judge 방식을 결합하여 에이전트의 전투 조언 성능을 개선하는 방법을 설명합니다.
핵심 포인트
- 비결정론적 LLM 응답을 평가하기 위한 체계적인 프레임워크의 필요성
- JSON 형식 및 값의 범위를 검증하는 코드 기반 레벨 1 평가
- LLM-as-Judge를 활용하여 주관적이고 맥락적인 의사결정을 평가하는 레벨 2 방식
- 실제 상호작용 데이터를 기반으로 한 평가 데이터셋 구축
블로그 10: Minecraft 모드 에이전트 - AI 에이전트가 스스로를 평가하게 만들고, 그 점수를 활용해 더 나은 전투 조언자로 개선하기
Cloud Swords Mod — 블로그 10
블로그 9에서 저는 Minecraft 모드에 AI 두뇌를 부여했습니다. 전투 상황에 따라 얼마나 많은 아군을 소환할지 결정하는 Strands Agent입니다. 작동은 합니다. 하지만 "작동한다"는 것은 측정 지표(metric)가 아닙니다.
AI가 "좋은" 결정을 내리고 있다는 것을 어떻게 알 수 있을까요? 플레이어의 체력이 하트 3개뿐이고 좀비 8마리가 다가오고 있을 때, 에이전트는 5명의 아군을 소환할까요(정답), 아니면 1명을 소환할까요(사형 선고)? 플레이어가 위협 없이 체력이 가득 차 있을 때, 에이전트는 아무것도 하지 않는 것이 맞을까요, 아니면 아무 이유 없이 미니언을 소환하며 자원을 낭비할까요?
저에게는 평가 프레임워크(evaluation framework)가 필요했습니다. 그래서 직접 만들었습니다. 그리고 심판은요? 또 다른 AI입니다.
문제점: 비결정론적 결정 (Non-Deterministic Decisions)
이 에이전트는 gpt-oss:20b를 사용합니다. 동일한 입력이라도 호출할 때마다 약간씩 다른 출력이 생성될 수 있습니다. 단 하나의 정답이 없기 때문에 assert response == expected와 같은 코드를 작성할 수 없습니다.
평가할 수 있는 것들:
- 동작이 유효한 JSON인가? (결정론적 확인)
- 동작이 범위 내에 있는가? (1~5명의 미니언, 유효한 버프 유형)
- 응답이 위협에 비례하는가? (판단 필요)
- 추론이 일관적인가? (판단 필요)
앞의 두 가지는 코드로 가능합니다. 뒤의 두 가지는 LLM이 필요합니다.
평가 데이터셋: 실제 상호작용 (Real Interactions)
모의 서버(mock server)의 interactions.json을 기억하시나요? 에이전트가 결정을 내릴 때마다 다음과 같이 기록됩니다:
{
"timestamp": "2026-05-19T19:17:34",
"payload": {
...
저는 20개 이상의 실제 상호작용을 가져와 기대되는 동작 범위(expected behavior ranges)를 추가했습니다:
eval_dataset = [
{
"context": {"health": 5, "nearby_mobs": 10, "biome": "nether", "dimension": "the_nether"},
...
레벨 1: 코드 평가기 (무료, 즉시 실행)
def eval_valid_json(response: str) -> bool:
"""응답을 JSON으로 파싱할 수 있는가?"""
try:
...
이 방식은 잘못된 형식의 JSON, 범위를 벗어난 값, 누락된 이유, 터무니없이 불균형한 응답 등 문제의 60%를 즉시 잡아냅니다.
레벨 2: LLM-as-Judge
주관적인 부분 — "이것이 좋은 결정인가?" — 에 대해서는 동일한 모델을 판사(judge)로 사용합니다:
JUDGE_PROMPT = """당신은 Minecraft 모드를 위한 AI 전투 조언자(combat advisor)를 평가하고 있습니다.
플레이어의 컨텍스트(context)와 AI의 결정을 고려하여, 다음 항목에 대해 점수를 매기세요:
...
메타(meta)적인 부분은 다음과 같습니다: 결정을 내리는 것과 동일한 AI 모델이 그 결정을 판정하기도 한다는 점입니다. 이것이 작동하는 이유는 판사가
_기대되는 동작(expected behavior)_을 참조 기준으로 가지고 있기 때문입니다. 즉, 진공 상태에서 평가하는 것이 아닙니다.
평가 실행기 (The Eval Runner)
class CombatAdvisorEval:
def __init__(self, agent):
self.agent = agent
...
시스템 프롬프트 A/B 테스트 (A/B Testing System Prompts)
진정한 강력함은 여기서 나옵니다: 서로 다른 시스템 프롬프트(system prompts)를 테스트하고, 어떤 프롬프트가 더 나은 결정을 만들어내는지 측정할 수 있습니다.
PROMPT_A = """당신은 전투 조언자입니다. 컨텍스트가 주어지면, 하나의 행동을 결정하세요...""" # 원본
PROMPT_B = """당신은 전투 조언자입니다. 중요: 항상 바이옴(biome)의 위험 수준을 고려하세요.
...
프롬프트 B는 네더(Nether) 시나리오에서 더 높은 점수를 받았는데, 이는 바이옴의 위험을 명시적으로 고려했기 때문입니다. 이러한 통찰은 단순한 느낌(vibes)이 아니라 평가(eval)를 통해 얻은 결과입니다.
피드백 루프 (The Feedback Loop)
관찰 (interactions.json)
↓
평가 (코드 체크 + LLM 판사)
...
이것은 LLMOps 시리즈(Part 3: 평가 주도 개발 (Eval-Driven Development))에서 다루었던 것과 동일한 루프이지만, Minecraft 모드에 적용한 것입니다. 이 패턴은 보편적입니다.
결과: 발견한 사항
20개의 시나리오에 대해 평가를 실행한 결과:
| 지표 (Metric) | 프롬프트 v1 | 프롬프트 v2 (바이옴 인식) |
|---|---|---|
| 코드 통과율 (Code pass rate) | 95% | 95% |
| ... |
바이옴을 인식하는 프롬프트는 위협 평가(threat assessment)를 1.2점 향상시켰습니다. 특히 v1이 제대로 대응하지 못했던 네더(Nether) 및 엔드(End) 시나리오에서 두드러졌습니다.
5%의 코드 실패율은 무엇일까요? 모델이 가끔 JSON 앞에 설명 텍스트를 추가할 때 발생하는 JSON 파싱(parsing) 문제입니다. 파서를 더 견고하게 만들어(첫 번째 {와 마지막 }를 찾도록 함) 해결했습니다.
학습된 클라우드/AI 개념
| 평가 개념 (Eval Concept) | 학습 내용 |
|---|---|
| 코드 평가기 (Code evaluators) | 입력 유효성 검사 (Input validation), 스키마 강제 (schema enforcement) |
| ... |
다음 단계로 할 일
- CI에서의 자동화된 평가 (Automated eval in CI) — 모든 프롬프트 변경 시 평가가 트리거되며, 점수가 하락할 경우 차단합니다.
- 플레이어 피드백 (Player feedback) — 각 클라우드 호출 후 따봉(thumbs up/down)을 통해 피드백을 받고, 이를 데이터셋에 다시 반영합니다.
- 시즌별 프롬프트 (Seasonal prompts) — 게임의 단계(초기/중기/후기)에 따라 서로 다른 시스템 프롬프트 (system prompts)를 사용합니다.
- 멀티 모델 비교 (Multi-model comparison) — 비용과 품질 사이의 절충안(tradeoff)을 찾기 위해 gpt-oss:20b vs Claude Haiku vs Nova Lite를 테스트합니다.
전체 그림 (The Full Picture)
10개의 블로그 포스트를 통해, 이 모드는 "클라우드 이름을 가진 7개의 검"에서 다음과 같은 기능을 갖춘 완전한 시스템으로 발전했습니다:
- Python + AI로 생성된 커스텀 텍스처 (Custom textures)
- BFS 알고리즘을 활용한 에너지 시스템 (Energy systems)
- 커스텀 GUI를 갖춘 멀티블록 머신 (Multiblock machines)
- 28개의 주문을 포함한 주문 시스템 (A spell system)
- 회피 메커니즘이 포함된 방어구 세트 (Armor sets)
- 엘리트 성장 과정을 가진 방랑 상인 (Wandering merchants)
- 서버리스 AI 백엔드 (A serverless AI backend)
- AI 의사결정을 위한 평가 프레임워크 (An evaluation framework)
이 모든 과정은 게임 플레이를 통해 클라우드 컴퓨팅 (cloud computing)을 가르칩니다. 모두 오픈 소스 (open source)입니다.
이것으로 Cloud Swords 블로그 시리즈를 마칩니다. 10개의 포스트, 하나의 모드, 그리고 대부분의 자격증 과정보다 더 많은 클라우드 개념을 담았습니다. 읽어주셔서 감사합니다.
코드 (Code):
- 모드 (Mod): cloud-swords-mod-1.20.1
- 백엔드 (Backend): cloud-swords-backend-cdk
- 에이전트 (Agent): cloud-swords-strands-agent
저는 Carlos Cortez이며, 이것은 Breaking the Cloud입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기