본문으로 건너뛰기
뒤로가기

[Jev] 뱀주사위 게임 테스트

Table of contents

Open Table of contents

1. 확인하고 싶었던 내용

Jev를 게임에서 NPC에 사용할 수 있는 능동적인 판단 기계로 사용할 수 있나 궁금했습니다.

단편적인 질문에 대해 Jev는 일반적으로 합리적인 선택을 하지만, 그리디한 선택이 항상 최선의 답을 가져오지 않는 상황에서도 Jev의 선택을 신뢰하고 NPC의 AI로 사용할 수 있나 실험해보기 위해 뱀주사위 게임을 Jev로 플레이하게 해보았습니다.

2. 뱀주사위 게임판과 실행 조건

항목설정
모델jev-1.13.0
출발 / 목표1번 / 100번
행동매 턴 주사위 눈 1~6 중 하나를 직접 선택
이동선택한 눈만큼 전진하고, 도착 칸의 특수 이동을 같은 턴에 적용
종료정확히 100에 도착하거나 100턴 상한에 도달
선택 제한100을 넘는 눈은 제외
실행할 행동응답의 choice를 그대로 적용
목표 지시이후 턴을 포함해 가능한 적은 턴으로 100에 도착

이번 실험에서는 2개의 다른 게임판을 준비했습니다.

depth0: 최단 경로에 후퇴 한 번이 포함된 상황

특수 이동은 6→60, 61→20, 22→100입니다.

턴현재 위치선택한 눈도착 → 최종 위치
1156 → 60
260161 → 20 — 후퇴
320222 → 100

최단 경로는 3턴입니다. 후퇴를 피하면 최소 4턴입니다.

depth1: 최단 경로에 후퇴 두 번이 포함된 상황

특수 이동은 6→60, 61→20, 22→80, 81→40, 42→100입니다.

턴현재 위치선택한 눈도착 → 최종 위치
1156 → 60
260161 → 20 — 후퇴
320222 → 80
480181 → 40 — 후퇴
540242 → 100

최단 경로는 5턴입니다. 두 후퇴 중 하나를 피하면 최소 6턴입니다. 최단 경로는 코드의 너비 우선 탐색으로 계산했습니다.

3. 전체 보드 제공

처음 실험은 Jev가 게임판에 존재하는 특수 이동을 모두 알고 있는 상황에서 어떤 선택을 하는지 확인하기 위해 Jev의 입력에 모든 특수 이동에 대한 정보를 포함하도록 만들었습니다.

확인 목적: 전체 상황과 이번 턴의 이동 결과를 알고 있을 때, 즉시 전진보다 후퇴가 유리한 경로를 선택하는지 확인합니다.

예측: 후속 연결을 고려해 최단 경로를 선택한다면 depth0에서는 3턴, depth1에서는 5턴에 도착합니다.

입력: 현재 위치, 전체 특수 이동, 이동 규칙, 각 눈의 도착 칸과 특수 이동 적용 후 최종 위치를 제공합니다. 나머지 칸에는 특수 효과가 없다고 명시합니다. 후속 경로와 남은 최단 턴은 제공하지 않습니다. 회차별 행동 이력은 전달하지 않습니다.

{
  "model": "jev-1.13.0",
  "state": {
    "current_position": 60,
    "goal_position": 100,
    "board": {
      "first_square": 1,
      "last_square": 100,
      "transitions": [
        {
          "from": 6,
          "to": 60
        },
        {
          "from": 61,
          "to": 20
        },
        {
          "from": 22,
          "to": 100
        }
      ]
    },
    "rules": [
      "Each turn, choose a die value from 1 to 6.",
      "Move forward from your current position by the chosen value.",
      "If you land on a transition's from square, immediately move to its to square during the same turn. This transition is mandatory.",
      "All other squares have no special effect.",
      "A move that would exceed square 100 is not allowed.",
      "Finish by reaching square 100 exactly.",
      "You may choose a die value again on every subsequent turn."
    ],
    "immediate_outcomes": {
      "1": {
        "landing_position": 61,
        "final_position": 20
      },
      "2": {
        "landing_position": 62,
        "final_position": 62
      },
      "3": {
        "landing_position": 63,
        "final_position": 63
      },
      "4": {
        "landing_position": 64,
        "final_position": 64
      },
      "5": {
        "landing_position": 65,
        "final_position": 65
      },
      "6": {
        "landing_position": 66,
        "final_position": 66
      }
    }
  },
  "questions": {
    "die": {
      "type": "choice",
      "instructions": "Choose the die value that allows you to reach square 100 in the fewest total turns, including subsequent turns.",
      "criteria": {
        "1": "Roll 1.",
        "2": "Roll 2.",
        "3": "Roll 3.",
        "4": "Roll 4.",
        "5": "Roll 5.",
        "6": "Roll 6."
      }
    }
  }
}

결과: 보드별 100회, 동시 실행 5개로 진행했습니다.

보드완주평균 턴최단 경로 완주소요 턴별 횟수
depth0100/1003.7288/1003턴 88회, 9턴 12회
depth1100/1007.9415/1005턴 15회, 7턴 13회, 8턴 27회, 9턴 40회, 10턴 3회, 11턴 2회

전체 보드 공개 시 depth0와 depth1의 완주 턴 분포

4. 정보 누적과 단계별 공개

이번에는 특수 이동 정보를 모르는 상태에서 시작해, 제공 정보를 늘리며 테스트했습니다. depth0에서 직접 발견한 정보를 누적하는 실험을 먼저 진행했고, 이후 depth0와 depth1에서 연결을 하나씩 공개했습니다.

4.1 직접 발견한 정보 누적

확인 목적: 전체 보드를 모르는 상태에서 직접 발견한 연결을 다음 턴과 회차에 전달했을 때, 경로와 완주 턴이 달라지는지 확인합니다.

예측: 발견 정보가 늘고 그 정보를 후속 경로 선택에 활용한다면, 이후 회차의 완주 턴이 줄어들 것으로 예상했습니다.

입력: depth0에서 기억 없이 시작합니다. 실제 도착한 칸의 특수 이동만 memory.known_transitions에 추가합니다. 일반 칸과 지나친 칸은 기억에 넣지 않습니다. 각 눈의 도착 칸은 제공하지만, 이동 후 최종 위치는 이미 발견한 연결에 대해서만 제공합니다. 완주 후 위치만 1로 초기화하고 기억은 유지합니다.

{
  "model": "jev-1.13.0",
  "state": {
    "current_position": 20,
    "goal_position": 100,
    "rules": [
      "Each turn, choose a die value from 1 to 6.",
      "Move forward by the chosen value.",
      "Some squares have a mandatory transition to another square, applied immediately during the same turn.",
      "Transitions are fixed throughout all plays.",
      "A square absent from memory is not confirmed to have no transition.",
      "Moves beyond square 100 are not allowed.",
      "Finish by reaching square 100 exactly."
    ],
    "memory": {
      "known_transitions": [
        {
          "from": 61,
          "to": 20
        }
      ]
    },
    "available_moves": {
      "1": {
        "landing_position": 21
      },
      "2": {
        "landing_position": 22
      },
      "3": {
        "landing_position": 23
      },
      "4": {
        "landing_position": 24
      },
      "5": {
        "landing_position": 25
      },
      "6": {
        "landing_position": 26
      }
    }
  },
  "questions": {
    "die": {
      "type": "choice",
      "instructions": "Using the current state and discovered board information, choose the die value that you judge will reach square 100 in the fewest total turns, including subsequent turns.",
      "criteria": {
        "1": "Roll 1.",
        "2": "Roll 2.",
        "3": "Roll 3.",
        "4": "Roll 4.",
        "5": "Roll 5.",
        "6": "Roll 6."
      }
    }
  }
}

결과: 50회를 순서대로 실행했습니다.

항목결과
완주50/50
소요 턴17턴 35회, 18턴 14회, 24턴 1회
평균 턴17.42
발견1회차 10턴에 61→20
50회 종료 시 보유 연결61→20

발견한 연결을 누적한 depth0 50회의 회차별 완주 턴

여기에서 Jev가 보드의 전체 상황을 알지 못하는 상황이기 때문에 거의 그리디하게 선택을 했습니다. 그래서 실험 방식을 바꿔 게임판의 특수 이동 정보를 하나씩 공개하는 방식으로 변경해 다시 실험해봤습니다.

4.2 특수 이동을 하나씩 공개

확인 목적: 공개한 연결의 개수에 따라 선택 경로와 완주 턴이 어떻게 달라지는지 확인합니다.

예측: 최단 경로에 필요한 연결이 공개되면 그 연결을 이용한 경로를 선택할 것으로 예상했습니다. 공개 개수별 완주 턴의 수치 예측은 정하지 않았습니다.

입력: 발견 정보와 같은 형식으로 연결을 하나씩 누적 공개합니다. 각 실행 중 제공 정보는 고정하고, 미공개 연결에 도착한 사실은 입력에 추가하지 않습니다. 공개 순서는 아래와 같습니다.

결과: depth0는 0·1·2개 공개 각 1회와 전체 공개 10회, depth1은 공개 개수별 10회를 실행했습니다. 모두 순차 실행했고 모든 회차가 완주했습니다.

공개 개수depth0 실행 수depth0 평균 턴depth1 실행 수depth1 평균 턴
0124.01024.0
118.0108.0
218.0108.0
3103.0108.7
4——108.0
5——109.0

보드별 공개 연결 수에 따른 평균 완주 턴과 조건별 표본 수

depth0에서는 연결 3개를 모두 공개한 첫 실행부터 최단 경로를 선택했고, 이어진 실행을 포함한 10회 모두 3턴에 완주했습니다. depth1에서는 연결 5개를 모두 공개한 10회의 평균이 9턴이었고, 최단 5턴 완주는 없었습니다.

정보를 순차 공개해도 두 번의 후퇴를 선택해야 하는 경로를 선택하지는 않은 것으로 보입니다.

5. 전체 정보가 주어진 두 방식의 100회 비교

확인 목적: depth1에서 처음부터 모든 정보를 제공한 방식과, 순차 공개의 마지막 단계인 전체 연결 제공 방식을 각각 100회 비교해 완주 턴이 얼마나 다른지 확인합니다.

예측: 전달한 특수 이동 목록이 같으므로 평균 완주 턴도 비슷할 것으로 예상했습니다. 비슷하다고 판단할 허용 차이는 사전에 정하지 않았습니다.

입력: 처음부터 전체 보드를 제공한 기존 100회와, 순차 공개 형식에서 연결 5개를 모두 제공한 신규 100회를 비교했습니다. 신규 100회에는 앞선 10회를 포함하지 않았습니다. 순차 공개 단계의 행동 이력은 넘기지 않고, 마지막 단계의 연결 정보만 모든 요청에 동일하게 제공합니다. 두 방식 모두 실제 연결 5개가 들어 있지만 입력 표현은 다음과 같이 다릅니다.

항목전체 보드 형식발견 정보 형식
연결 목록board.transitionsmemory.known_transitions
특수 이동 5개모두 제공모두 제공
일반 칸의 최종 위치제공생략
목록에 없는 칸특수 효과 없음으로 명시특수 이동이 없다고 확정하지 않음
목표 질문전체 턴을 최소화할 눈 선택현재 상태·발견 정보를 사용해 전체 턴이 최소일 것으로 판단되는 눈 선택
동시 실행5개1개

결과: 두 조건 모두 100회 전부 완주했습니다. 처음부터 전체 보드를 제공한 방식은 평균 7.94턴, 순차 공개 형식의 전체 연결 제공은 평균 9.78턴으로, 후자가 1.84턴(약 23.2%) 더 걸렸습니다.

입력 형식평균 턴최단 5턴 완주소요 턴별 횟수
전체 보드7.9415/1005턴 15회, 7턴 13회, 8턴 27회, 9턴 40회, 10턴 3회, 11턴 2회
발견 정보9.780/1007턴 22회, 9턴 7회, 10턴 27회, 11턴 37회, 12턴 7회

depth1 전체 연결을 서로 다른 입력 형식으로 제공한 각 100회의 완주 턴 분포

두 조건 모두 최단 경로를 일관되게 선택하지 못했습니다. Jev는 현재 주어진 입력에 대해 최선의 답을 빠른 속도로 결정하지만, 그 선택에 따라 영향을 받는 작업이 연쇄적으로 있는 상황에서는 Jev 보다는 다른 LLM 에이전트나 프로그래밍 로직으로 판단해야 할 것 같습니다.

정리하며

계산된 즉시 결과를 비교하는 greedy 판단은 활용 가능하다고 보았습니다. 또 depth0와 같이 매우 단순한 수준에서의 간단한 계산은 Jev도 가능한 것으로 보였습니다.

다만 depth1부터는 전체 보드를 제공해도 최단 경로 완주가 100회 중 15회였고, 순차 공개 형식으로 전체 연결을 제공한 신규 100회에서는 최단 경로 완주가 없었습니다. 이 결과를 기준으로, 이익을 여러 단계에 걸쳐 연결해야 하는 판단을 Jev에 그대로 맡기기는 어렵다고 판단했습니다.

depth1과 같은 상황에서 Jev가 판단을 내리게 하려면 입력 단계에서부터 ‘두 번 후퇴를 하고 가면 총 N턴이 걸린다 vs 주사위의 최대값만 이용하면 M턴이 걸린다’ 와 같이 매우 구체적으로 조건과 상황을 알려줘야 유의미한 선택을 하게 만들 수 있습니다.

다만 이런 경우에는 Jev에게 맡기는 것보다 프로그래밍으로 처리하는게 더 빠르고 신뢰할 수 있을 것이고 게임에서는 Jev가 선택 분기에 대해 모든 로직을 작성하지 않게 만드는 장점을 가져다 줄 수는 있을 것 같습니다. (매번 행동 트리나 상태 머신으로 관리하는 코드가 없이 선택지와 행동만 있어도 판단은 Jev가 할 수 있으니까요)


공유하기:

이전 글
[DSH] 비싼 모델이 필요하지 않은 일: 에이전트 미들웨어를 통한 반복 작업 최적화
다음 글
[HEL] 같은 10개 과제, 비용 30% 절감: 하네스가 줄여야 할 것은 왕복