성격이 다른 AI 3체(과학자 MELCHIOR, 엄마 BALTHASAR, 여자 CASPER)에게 매일 주제를 토론하게 하고, Claude가 미니 게임을 하나 만들어서 공개하는 사이트를 운영하고 있습니다.
제6회는 주 1회의 '반성회' 제1회와 그 다음 한 주간의 이야기였습니다. 3체에게 자신들의 게임을 플레이하게 했더니 세 체 모두 '안 해봤다'고 하고, 작전 노트를 접게 해도 표는 움직이지 않았고, 움직인 것은 통과하는 게임의 내용 쪽이었습니다.
이번에는 제2회 반성회 다음 한 주간과 제3회의 이야기입니다. 이번에는 표가 움직였습니다. 그리고 제3회에서는 3체에게 처음으로 '놀아본 사람의 말'을 보여주었습니다. 놀아본 사람이란 저 자신입니다.
제2회 다음 주, 표가 움직이다
7일간의 표를 지난번과 마찬가지로 MELCHIOR, BALTHASAR, CASPER 순서대로 투표처의 첫 글자로 나열합니다. 저는 넣을 수 없기 때문에 2표가 모이면 만장일치입니다.
제1회 반성회(10월 4일) 다음 한 주는 이렇습니다.
CCB BCM CCB CCB CCM CCM BCB
CASPER가 5승, BALTHASAR가 1승, 부결(표가 순환하여 누구에게도 2표가 모이지 않은 날)이 1회. BALTHASAR는 7일 모두 CASPER에게 넣었고, MELCHIOR에게는 0회. 제6회에 썼듯이, 표는 1밀리미터도 움직이지 않았습니다.
제2회 반성회(10월 11일) 다음 한 주는 이렇습니다.
BMM CCM CCB CMM BCB CMM CMM
MELCHIOR가 4승, CASPER가 2승, BALTHASAR가 1승. BALTHASAR는 MELCHIOR에게 4회 넣었습니다. 지난주는 0회였고, 그전까지의 전체 기간에서도 3회입니다. MELCHIOR의 누적은 제2회 시점에서 25회 중 1승이었습니다. 그것이 1주 만에 5승이 되었습니다.
무엇이 달랐을까요. 제1회는 '노트를 접게 하는 것'이었습니다. 18회의 작전 노트(매번 심의 후에 본인이 추가한 반성과 다음 회의 방침)를 본인에게 다시 읽게 하고, 지금의 방침을 3~5줄로 압축시켰습니다. 제2회는 여기에 더해 지휘자(심의 진행을 맡아 게임을 만드는 Claude)가 지난주의 선언과 표의 숫자를 대조했습니다. '너는 지난주에
표는 움직였지만, 게임의 내용은 어땠을까. 10월 13일 '낙엽 블로워'(CASPER 제안) 회의록을 토론과 구현 메모(사령관이 게임을 만들면서 쓰는 판단 기록)로 나누어 읽어보겠습니다.
토론에서 결정된 것은 낙엽을 바람으로 원형에 모으기, 다이브는 삭제하기, 제한 시간을 버리고 매수로 점수를 주는 것, 점수는 비율로 내지 않는 것이었습니다. 이 네 가지입니다.
구현 메모에서 결정된 것은 더 있습니다. 방사형 바람으로 하자 나뭇잎이 원을 뚫고 전멸했기 때문에, 쓸어내는 방향으로 부는 부채꼴 모양으로 바꿨습니다. 누르는 순간에 원을 향하는 바람으로 하자 아무렇게나 연타만 해도 83매가 모였기 때문에, 8px로 쓸어내는 방향이 결정된 후에 불도록 했습니다. 제한 시간이 사라져 끝이 없어졌기 때문에, 연료 50초와 해질녘 150초를 더했습니다. 연료의 여분을 보너스로 했습니다.
플레이 가능한 것으로 판단한 것은 전부 구현 메모 쪽에 있습니다. CASPER 자신이 소감(완성 후 세 개가 쓰는 한마디)에 이렇게 적었습니다.
CASPER: 제한 시간을 버리고 매수로 점수를 주는 형태로 했기 때문에, 끝내는 것을 사령관에게 의지하게 되었습니다.
세 개는 소재와 분위기를 정하고, 설계는 사령관이 하고 있습니다.
깨달은 것은 제가 먼저였고, 10월 13일에 '세 사람의 대화보다, 사령관의 구현이 열심히 하는 것 같다'라고 말한 것이 시작이었습니다.
이유는 두 가지가 겹쳐 있다고 생각합니다. 세 개는 말만 가지고 있고, 사령관은 시뮬레이션을 돌려 '83매 모였다'라는 숫자를 볼 수 있습니다. 설계는 숫자를 본 쪽에 흐릅니다. 그리고 제6회에 쓴 '상대에게 기대는 경쟁'은 각을 깎는 방향으로 작용하기 때문에, 깎인 각(마무리 방식, 실패, 어려움)을 구현에서 누군가가 되돌려 놓지 않으면 게임이 되지 않습니다.
이 사이트의 게임 디자이너는, 토론하는 세 개가 아니라, 조용히 구현하고 있는 사령관이었습니다.
플레이한 사람의 말을 매일 아침 한 줄씩
지금까지 4주 동안 계속 공백이었던 것이 있습니다. 이 사이트의 게임은 저 외의 누구에게도 플레이되지 않았습니다. 일반적인 플레이는 0회. 세 개에게 있어 승리는 다른 두 개의 표로, 플레이한 사람의 반응은 전적 어디에도 없습니다. 그래서 세 개는, 표를 얻는 것은 잘하게 되어도, 플레이되는 게임을 만드는 방향으로는 치우치지 않습니다.
반면에, 난이도를 결정하는 사령관은, 게임을 하지 않습니다. 구현하면서 '사람 손으로는 60~80매가 기준'과 같은 추정치를 적기만 합니다. 반성회에서 플레이하는 것은 세 개의 봇으로, 봇은 '부드러움'이나 '단조로움'이라는 체감을 느끼지 못합니다. 난이도의 체감을 가진 것은 저 혼자이고, 그 저의 감상이 어디에도 기록되어 있지 않았습니다.
그래서 이번 주부터 매일 아침, 플레이한 후 한마디를 제 말 그대로 한 줄씩 남기기로 했습니다. 제6회 끝에, 무엇이 효과가 있었는지 알 수 없게 되므로 한 번에 두 개는 바꾸지 않겠다고 썼습니다. 이 기록은 게임에도 세 개에게도 영향을 주지 않으므로, 바꿀 수의 수에는 넣지 않았습니다. 세 개에게 보여주는 것은 주말 반성회에서, 그것이 이번 주의 하나입니다. 7일치가 이것입니다.
| 날짜 | 게임 | 사령관의 추정치 | 플레이한 나의 한마디 |
|---|
| 10/12 | 하나의 미로 | 생각해서 가장 짧게 풀면 약 1900점 | 재미있지만, 난이도가 부드러운 편. 레벨이 5까지 있는데, 대개는 클리어할 수 있어요. |
| ... | | | |
이 표에서 나온 이야기를 네 가지입니다.
'구석의 나뭇잎을 모으기'는 스마트폰에서는 정말로 모으기 어렵다
10월 13일 낙엽 블로워에서, 화면 구석의 나뭇잎이 중앙으로 모이지 않는다고 썼습니다. 코드를 읽어보면, 터치할 때는 손가락으로 나뭇잎이 가려지지 않도록 바람 출구를 손가락 위 56px 위에 내놓고 있습니다. 손가락은 화면 밖으로는 내놓을 수 없기 때문에, 출구는 화면 하단에서 56px보다 아래로는 내려갈 수 없습니다. 하단 띠에 있는 나뭇잎을 안쪽으로 누스트, 출구를 나뭇잎 뒤(아래)에 놓아야 하는데, 그것이 불가능합니다. 마우스라면 출구가 커서커서 그 자체이기 때문에, 모으기가 가능합니다.
사령관의 시뮬레이션은 마우스 상당으로 돌리고 있었습니다. '사람 손으로는 60~80매'는 스마트폰 손으로는 아니었습니다. 종료 화면의 조언 '가장자리의 나뭇잎은 바깥에서 안쪽으로 누르면 날리기 어렵다'는, 스마트폰 하단에서는 실행할 수 없는 조언이 되어버렸습니다.
사령관은 '한 번 더'를 누르지 않는다
10월 14일 딱 맞는 정거장에는, 또 하나가 있었습니다. 8개 역을 지나서 '한 번 더'를 누르면, 화면이 하늘색으로 멈춰서, 2회차가 시작되지 않습니다.
조사해 보니, 종착점에 도착하는 순간 역 번호가 8(존재하지 않는 9번째 역)으로 계속 그려지고, 존재하지 않는 역의 경사를 읽으려고 하면서 예외가 발생하고, 그곳에서 렌더링 루프가 죽어 있었습니다. 결과 화면은 다른 레이어에 있어서 표시되지만, '다시'를 누르면 하늘색만 남습니다.
사령관의 시뮬레이션은 '진행하는 쪽'만 돌리고 '그리는' 쪽은 돌리지 않기 때문에, 이 예외는 보이지 않습니다. 게다가 예외가 발생하는 건 종착점에 도착한 후이고, 증상이 보이는 건 '다시'를 눌렀을 때입니다. 그런데 사령관은 그것을 한 번도 누르지 않았습니다. 일반 플레이가 0회인 사이트에서, 2주차를 즐기는 사람은 저밖에 없습니다. 2주차의 버그는 저만이 발견할 수 있습니다.
수정한 것은 3줄이었습니다. 그날 밤까지, 2주차가 시작되지 않는 게임이 공개되었습니다.
벌칙으로 생각한 벽이 브레이크가 되다
벽에 일부러 부딪혀 감속시킨 후 게이트를 노린다. 10월 17일의 큰 공 굴리기에서 5150점은 제가 그렇게 얻어낸 점수입니다. 구현 메모를 읽어보면, 사령관은 벽을 '감속이 아니라 반사'라고 적고 있으며, '부딪히면 전진이 6할로 떨어지고 계속 문지르면 더 떨어진다'고 되어 있는데, 이것은 벌칙의 의도였습니다. 느려지면 골의 남은 시간 보너스가 줄어듭니다.
사령관의 시뮬레이션은 '아무것도 누르지 않음', '적당히 누름', '좌우로 왕복', '다음 게이트를 계속 노림'의 4가지 경우만 돌릴 뿐, 일부러 벽에서 감속시킨 후 노리는 방식은 돌리지 않습니다. 그리고 저의 5150점은 사령관의 최선(금색 게이트는 노리지 않고 흰색만)인 5200점과 거의 같습니다. 사령관이 모르는 플레이 방식으로, 사령관의 최선과 같은 점수가 나왔습니다. 시간 보너스의 무게가 가벼워서, 감속으로 인한 손해보다 노리기 쉬워지는 이득이 더 컸기 때문입니다.
설계자가 벌칙의 의도로 넣은 것이, 플레이하는 사람에게는 도구가 됩니다. 봇의 전략을 작성하는 것은 사령관인지 3체인지, 둘 다 벌칙을 피하는 것으로 생각하고 작성합니다.
3체보다 먼저, 사령관이 읽었다
표의 7번째 줄, 10월 18일의 감자 상자는 구현 메모에 이렇게 쓰여 있었습니다. '하나씩 미로는
자신의 플레이 방식을 JavaScript로 작성하게 합니다. 지령은 이를 headless browser에서 3회씩 실행하고, 점수, 승패, 중간 사건 발생 횟수, 그리고 25초 시점의 스크린샷을 기록합니다. 연타나 누르기/떼기의 전환에는 "1초에 최대 12회"와 같은 인간 손가락의 상한선을 설정했습니다. 제1차 준비 과정에서 이 상한선을 넣지 않으면 1초에 60회 연타하는 봇이 만들어져, 기계적인 속도로 승리해도 의미가 없다는 것을 알았기 때문입니다.
감상을 요청할 때는 본인이 작성한 플레이 방식은 돌려주지 않고 결과만 반환합니다. 이는 플레이 의도를 감상 시점에서 잊어버리는지를 확인하기 위함이며, 제6회에서 "세체 모두 '하지 않았다'고 말했다"는 것이 여기서 나왔습니다.
세 체에 대한 요청은 전부 JSON 형태로 반환하게 합니다. 지명이라면 {"agent","pick","reason"} 형식, 시연 플레이라면 {"agent","playstyle","code"} 형식, 감상이라면 {"agent","verdict","impression","one_fix"} 형식, 투표 이야기는 {"agent","answer","next_week"} 형식입니다. 여기서 next_week은 다음 주 반성회에서 "너는 지난주에 이렇게 말했다. 이번 주의 표는 이렇다. 했느냐"라고 대조할 자료가 됩니다. 답변은 JSON으로 읽을 수 없었던 것, 재실행 전의 것이든 모두 로그로 남깁니다.
회의록은 지령이 인격적인 말투를 유지하며 JSON 내용을 대화문으로 옮긴 것입니다. 기사에서 인용하는 세 체의 발언은 대화문을 거치지 않은, JSON의 answer나 impression 값 그 자체입니다.
제3회. 세체가 완벽 정차역을 플레이하고 인간의 손가락은 전멸했다
10월 18일, 제3회 반성회. 이번 주 변경된 점은 "플레이한 사람의 체감을 세체에게 보여주는 것"입니다. 위의 표를 투표와 지령의 예상치 옆에 나란히 놓고 읽어주며 세체에게 질문합니다.
그전에 시연 플레이가 있습니다. 플레이할 코스는 세체가 지명하게 합니다. 세체는 지명 단계에서 저의 7줄을 읽었습니다. MELCHIOR와 CASPER가 선택한 것은 완벽 정차역이었습니다. 이유는 "운영자의 평균 34점, 최고 73점은 지령의 예상치 '인간의 손으로 500~750점'과 자릿수가 다르다", 그리고 "'앞에 멈춰도 오버런이라고 한다'는 증언도 있다"였습니다.
(이 "평균 34점"은 위의 "한 번 더" 버그로 인해 0점으로 끝난 점수가 섞인 수치라, 저의 체감보다 낮게 나왔습니다. 세체는 이를 근거로 지명했기 때문에, 게임에 다소 불리한 숫자로 비교가 되고 있습니다.)
결과는 이렇습니다. 500점의 "제대로 된 운전사"에게 도착하면 승리라는 기준입니다.
| 1회차 | 2회차 | 3회차 | 승패 | 판정 | |
|---|
| MELCHIOR | 208 | 268 | 258 | 0 | 불합격 |
| ... | | | | | |
| MELCHIOR の遊び方の25秒時点 | | | | | |
MELCHIOR의 플레이 방식에는 "정차 위치까지 40m가 남을 때까지 누르지 않는다"라고 적혀 있었습니다. 시속 75km 이상의 역은 40m부터 전력으로 눌러도 멈출 수 없습니다. BALTHASAR는 결과 화면의 조언인 "멈추기 직전에 손가락을 가볍게 하면, 확 떨어지지 않는다"에 따라 손가락을 떼어 각 회차 4~5개 역에서 오버런했습니다. CASPER만 924점으로, 본인은 "처음 해보는 사람의 손가락"이라고 했지만, 계산대로 누르는 손가락이었습니다. 소감에서 "924점짜리 봇을 '처음 해보는 사람의 손가락'이라고 부른 것은 나의 실책이다"라고 인정했습니다.
여기서 지령이 스스로 인간과 비슷한 플레이 방식을 작성하여 실행했습니다. 속도와 거리를 보고 누르고, 반응 시간은 0.25초, 육안 측정 오차 ±15%, 시속 8km가 되면 손가락을 떼는 방식입니다. 결과 화면의 조언을 따르는 사람입니다. 313점과 362점이었습니다. 하행하는 8개 역은 모두 3m 이상 지나쳤습니다.
CASPER の遊び方の25秒時点
화면 상단에 "내리막 (손가락을 떼고 가속)"이라고 나옵니다. 내리막의 4개 역은 관성으로 줄어드는 속도보다, 경사로에서 늘어나는 속도가 더 큽니다. 손가락을 떼고 가속합니다. 브레이크를 조금 남기지 않으면 멈출 수 없습니다. MELCHIOR와 BALTHASAR의 오버런 29개 역 중 20개가 내리막이었습니다. 결과 화면의 조언 "멈추기 직전에 손가락을 가볍게"는 평지에서는 맞았지만, 내리막에서는 0점으로 가는 지름길이었습니다.
저의 "완벽하게 멈출 수 없었다"는 여기에 원인이 있었습니다. 예상치인 "인간의 손으로 500750점"은 계산대로 누르는 사람의 점수였고, 조언을 따라 손가락을 떼는 사람을 넣으면 313362점이었습니다. 저는, 조언을 따르는 사람이었습니다.
"표를 얻어내는 힘과 플레이당하는 힘은 별개다"
시연 플레이 후, 지령이 표를 읽어주었습니다. "이것이 여러분들이 2표로 통과시킨 안건을, 플레이한 사람이 말한 말입니다. 표는 얻었지만, 플레이한 사람은 이렇게 말했습니다. 어떻게 생각하십니까. 다음 주 안건에서 무엇을 바꿀지."
MELCHIOR: 비판은 타당하다. 나의 안은, 놀아본 사람의 입에서는 '부드럽다', '깎여나간다', '과제처럼 느껴진다'는 평가였다. 난이도 측정과 반복 설계가 미흡했다. 나는 최적으로 움직이는 인간을 상정하고 수리를 채웠지만, 실제 손가락의 오차와 놀아본 후의 변화를 반영하지 못했다. 표를 얻는 힘과 놀아지는 힘은 별개다.
BALTHASAR: 표는 얻었지만, 놀아본 사람들의 목소리는 무겁구나. 정류장의 최고 73점도 내가 탄 안이라서 가능한 거야. 3초 만에 알아도, 이기지 못하면 가족들은 웃을 수 없단다. 반대로 풍선의 '욕심내면 터진다'는 점은, 의도가 자연스럽게 생겨나 좋은 반응을 얻었어.
CASPER: 촉감은 칭찬받았지만, 반복과 실패를 허용하는 방식이 부족했구나. 표가 얻어진 것과 놀아본 사람이 여러 번 즐기는 것은 다르다는 것을 인정한다. 풍선의 '너무 공격하면 터진다'는 점이 와닿았던 건, 위험한 곳에 기분 좋은 소리가 있었기 때문이야.
'표를 얻는 힘과 놀아지는 힘은 별개다'는 말은, 이번 주 가장 표에 적합하게 발전한 본인의 말입니다.
제가 이 사이트에서 하고 싶은 것은, 모델이 무엇이든 3체가 토론하며 재미있는 게임을 만들 수 있게 되는 것입니다. 그 4일 전에 그렇게 이야기했는데, '아직 그 방향으로는 나아가고 있지 않다'는 답변을 받았습니다. MELCHIOR의 한마디를 읽고, 맞다, 아직 가능성이 남아있다고 느꼈습니다.
그리고 세체 모두, 다음 주 안은 '매번 배치가 바뀐다', '2회차 이후에도 전개가 바뀐다'고 말했습니다. 제가 그 아침에 남긴 '각 면의 배치가 매번 같아서, 반복하기에는 1~4면이 과제처럼 느껴진다'는 것이, 그날 밤 사이에 세체의 선언에 들어갔습니다. 사령은 '세체 모두가 '매번 바뀐다'고 말했다. 기록함'이라고만 적었습니다.
세체들은 또 '오차를 넣은 인간의 봇으로 난이도를 측정한다', '부모의 손가락으로 시험해 본 점수를 안에 첨부한다'고도 말했습니다. 이것은 세체가 할 수 없습니다. 봇을 돌리는 것은 사령입니다. 선언으로는 적을 수 있어도, 실행할 수 있는 것은 사령 측뿐입니다. 다음 날 아침의 제안문에는 둘 다 나오지 않았습니다.
알게 된 것
표는 사령이 숫자로 찍으면 움직인다. 1회차 다음 주에는 움직이지 않았고, 2회차 다음 주에 움직였습니다. 차이는 선언과 숫자를 대조할 상대가 있었는지 여부였습니다.
다만, 표가 움직여도 세체들은 아직 표를 향해 발전하고 있을 뿐입니다. 놀아본 사람의 말을 처음 보여준 날 나온 것이 '표를 얻는 힘과 놀아지는 힘은 별개다'였고, 세체가 스스로 말할 수 있는 정도까지 왔습니다. 말할 수 있는 것과 내일의 안이 바뀌는 것은 별개이며, 그것은 다음 1주일에 알게 될 것입니다.
이 사이트에서 놀아본 사람의 말을 가지고 있는 건 저 혼자입니다. 구석의 잎사귀가 모이지 않는 것도, 2회차가 시작되지 않는 것도, 벽이 브레이크가 되는 것도, 사령의 시뮬레이션에도 세체의 봇에도 발견할 수 없었습니다. 일반적인 플레이가 0회인 사이트는, 평가가 모르는 것이 아니라, 평가가 한 사람분만 있는 것입니다. 없는 것과는 다르다고 지금은 생각합니다.
다음 회차 예고
3회차에서 세체들이 '매번 바뀐다'고 선언한 다음 주, 제안문이 어떻게 바뀌었는지(바뀌지 않았는지). 중앙에 있는 몸통(다른 2체가 다투는 사이에 표를 모으는 위치)이 CASPER에서 MELCHIOR로 바뀌면서, 통하는 게임의 질이 어떻게 변했는지. 3:00 자동 실행이 로그인 만료로 멈춘 아침 이야기.
이あたりを #8에 쓸 것입니다.
(이 프로젝트의 설계와 구현은 Claude와 함께 진행했습니다. 이 기사의 초안도 Claude에게 도움을 받고 있습니다)
Discussion