AI에게 거짓말을 시키는 것은 생각보다 훨씬 어렵습니다.
아니, 거짓말 자체를 시키는 것은 꽤 쉬워서, 부탁하면 얼마든지 따라와 주지만,
곤란한 점은, 능숙하게 거짓말을 하게 하는 것과 적당히 의심하게 만드는 '적절한 정도'가 까다롭다는 것입니다 >_<
얼마 전, 하늘 위의 신전(雲の上の神殿)을 배경으로 한 among us 스타일의 마피아 게임인 "ANGEL HALOS"를 공개했습니다.
천사는 8명입니다.
그중 2명이 정체를 숨긴 타락 천사입니다.
플레이어 외의 7명은 AI가 움직이며, 자신이 눈으로 본 것만을 단서로 추리하고, 때로는 거짓말을 하며, 마지막에 투표합니다.
AI의 두뇌에는 Cloudflare가 10월에 공개한 판단 모델인 "Clef"를 사용했습니다.
Clef는 지난달 공개된 Jev와 유사한 판단만 하는 AI입니다.
그 외에는 Workers, Hono, React 등의 조합으로 게임이 플레이 가능한 형태가 될 때까지 하루가 걸렸습니다.
거기서 3일 정도를 들여 전체적인 조정에 시간을 투자하며, 외형과 AI의 행동을 구축해 나갔습니다.
Clef는 문장 작성 없이 확률만 반환하는 AI
Clef는 Workers AI에서 구동되는 '판단 전용' 모델입니다.
질문 유형은 3가지가 있습니다.
예/아니오로 답하는 noul, 선택지 중 하나를 고르는 choice, '무죄'부터 '거의 유죄'와 같은 단계로 평가하는 score입니다.
한 번의 요청으로 최대 64개의 질문까지 할 수 있고, 정확도 중심의 clef와 속도 중심의 clef-flash 두 가지 중에서 선택할 수 있으며, 동일한 입력을 5번 보내더라도 5번 모두 같은 값이 반환된다는 일관성도 갖추고 있습니다.
이 사양을 읽고 '마피아 토론이나 투표는 바로 이것이 최적이다'라고 생각했습니다.
누구를 의심할지, 누구를 지목할지, 명시적으로 고발할지.
마피아 AI가 결정하는 것은 대부분 선택지 중에서 고르는 문제입니다.
판단을 담당하는 연출가(Clef)와 말하는 배우(LLM)로 분리하기
다만, Clef에는 약점이 있습니다.
Clef는 문장을 작성하지 않습니다.
회의에서 '루미나, 아까 도서 회랑에 있었지?'라고 말하게 하려면 LLM이 별도로 필요합니다.
그래서 AI 천사의 내용을 극단처럼 두 명으로 나누었습니다.
연출가와 배우입니다.
Clef가 연출가를 맡고, LLM이 배우를 담당합니다.
연출가는 '이 장면에서는 세라피누를 의심해라'와 같은 방침만 결정합니다.
배우는 그 방침을 받아 캐릭터의 말투로 대사를 합니다.
배우에게는 Google의 Gemma를 사용했습니다. (가성비가 좋습니다)
Clef는 천사 1명당 한 번 호출할 때, 다음 질문들을 모아서 던집니다.
// 생존한 상대별로 얼마나 의심스러운지 4단계로
questions[`sus.${id}`] = {
type: "score",
...
타락 천사일 때는 '누구에게 죄를 뒤집어씌울지'라는 질문도 추가합니다.
반환된 의심도나 투표 대상은 배우에게 전달되는 프롬프트에 '입 밖으로 내지 않는 내부 메모'로 작성됩니다.
처음에는 LLM에게 '말하고, 겸사겸사 투표 대상도 결정해 달라'고 부탁하는 안도 생각했습니다.
하지만 그렇게 하면 '아리아는 백이라고 생각해'라고 말한 천사가 그대로 아리아에게 투표할 수 있습니다.
판단을 연출가에게 맡겨두면, 배우는 대본대로 연기만 하면 됩니다.
말하는 내용과 투표 대상이 어긋나지 않게 분리한 것이 가장 좋았습니다.
배우 쪽에는 대사와 함께 '평온', '의심', '분노', '동요', '자신감' 5가지 중 감정을 하나 선택하게 하고, JSON으로 반환받고 있습니다.
회의 화면에서는 이 감정에 맞춰 말풍선의 모양을 변경하고 있습니다.
게다가 대사에 '모순', '논리적 비약' 같은 단어가 포함되어 있거나, 누군가를 명시적으로 의심할 경우, 화면 가득한 컷인을 나오도록 했습니다.
판정은 정규 표현식입니다.
지루한 장치이지만, 이것만으로도 AI 간의 논쟁이 훨씬 재판 게임처럼 느껴집니다.
(이 부분은 제가 좋아하는 게임인 던전밥이나 역전재판을 참고했습니다)
AI는 자신이 눈으로 본 것만 정보를 제공한다
마피아 AI에서 가장 피하고 싶었던 것은 모든 것을 꿰뚫어 보는 AI였습니다.
신(神)의 시점은 금지하고 싶었습니다.
범인을 아는 탐정이 추리해도, 아무도 즐겁지 않습니다.
각 천사는 시야에 들어온 것만 기억합니다.
0.5초마다 시야를 판정하여, 시야 범위에 있던 상대를 '약 30분 전, 샘의 정원에서 유즈하를 잠시 봤다(작업하고 있었다)'와 같이 한 건씩 기록하기 때문에, 보지 못한 곳에서 무슨 일이 일어났는지는 그 천사에게 전혀 알 수 없습니다.
회의에서는 이 기억의 요약이 Clef에 전달되는 상태가 됩니다.
타락천사(堕天使)가 스스로 공격했던 기억에는 【비밀】 표시를 해두고, 배우들에게는 '이 표시가 붙은 기억에 대해서는 아무리 캐물어도 절대 입 밖에 내지 말라'고 지시했습니다.
연출가는 진실을 알고 있습니다.
배우들은 모르는 척합니다.
AI에게 거짓말을 하게 만드는 장치는 이 정도면 충분합니다.
단어 선택에도 조금 신경을 썼습니다.
배우들에게는 '죽이다', '시체', '피'를 금지하고, '공격하다', '빛으로 돌아가다', '후광만 남았다' 같은 천사 세계의 단어로 말하게 했습니다.
천사 소녀가 '시체가 굴러다녔다'고 말하기 시작하면, 세계관 자체가 그 자리에서 망가지기 때문입니다.
공격 여부를 AI에게 맡기는 것은 어렵다 (AI는 너무 신중하다)
가장 고민했던 부분은 타락천사의 공격이었습니다.
원인은 연출가(Clef)가 너무 상냥했기 때문입니다.
처음에는 타락천사가 천사와 단둘이 있게 될 때마다 '지금, 공격해야 할지'를 Clef에게 물어봤습니다.
그런데 테스트 플레이에서 몇 분을 기다려도 아무도 공격하지 않았습니다.
단 한 명도요.
로그를 보니 주변에 아무도 없고, 목격될 걱정도 없는, 정말 절호의 기회임에도 불구하고, Clef가 반환하는 공격 확률은 0.1~0.2 정도밖에 되지 않았습니다.
신전은 평화 그 자체라, 이러면 과제(タスク)가 전부 끝나서 천사 측이 이기는 것을 기다리는 게임이 되어버립니다.
Clef는 사람을 공격하는 판단에 상당히 신중한 것 같습니다.
모델로서는 정상적입니다.
하지만 게임의 타락천사가 그것을 하면, 그저 '과제를 수행하는 착한 사람'이 되어버려서, 천사 속에 섞여 배신한다는 마피아 게임의 재미 자체가 성립되지 않게 됩니다.
고민 끝에 공격 판단에서 Clef를 제외했습니다.
목격자가 없는 곳에서 단둘이 되면 망설임 없이 공격하도록 규칙을 바꿨더니, 제대로 된 마피아처럼 작동했습니다.
회의에서의 고발 장면에서도 비슷한 일이 있었습니다.
clef-flash는 '지목하여 고발할지'에 낮은 확률을 반환하는 경향이 있어, 회의가 쉽게 분위기를 띄우지 못했습니다.
지금은 누군가 한 명에 대한 의심도가 0.75를 넘으면, 확률과 관계없이 고발하도록 했습니다.
AI에게 모든 판단을 맡긴다고 해서 전부 똑똑해지는 것은 아니었습니다.
AI 비용을 84% 절감한 방법
개인 개발에서 무서운 것은 역시 종량제(従量課金)의 AI 비용 청구액입니다.
월말에 도착하는 이메일 제목만으로도 위가 조금 아파오는 그 느낌요.
처음에는 판단에 상위 모델 clef, 발언에 27B LLM을 사용하고, 회의 한 번당 Clef를 3번 호출했으며, 심지어 2차 논의에서는 살아남은 모든 사람에게 말하게 했기 때문에, 이대로는 무료 크레딧을 순식간에 다 써버릴 계산이었습니다.
그 후 다음 세 가지를 재검토했습니다.
- 판단 모델을 clef-flash로 교체한다. 환경 변수를 바꾸면 상위 모델로 되돌릴 수 있다.
- Clef 호출은 회의 시작과 투표 직전 두 번으로 제한한다.
- 2차 논의는 지목된 천사와 고발하고 싶은 천사만 발언하게 한다.
극단(劇団)에 비유하자면, 연출가(Clef)를 몸이 가벼운 사람으로 바꾸고, 2막에서는 출전할 배우들만 무대에 올리고, 나머지 배우들은 대기실에서 기다리게 한 것입니다.
결과는 약 84%의 절감.
지금은 회의 한 번(AI 6명)에 약 210 뉴런, 달러로 환산하면 0.0023달러 정도입니다.
Workers AI의 무료 크레딧은 하루 1만 뉴런이므로, 하루에 약 15게임 정도는 무료로 플레이할 수 있습니다.
AI가 응답하지 않을 경우를 대비해 대역(代役)도 준비했습니다.
이것은 보험입니다.
API가 실패하면, 브라우저 측의 간이 AI가 기억에서 의심도를 계산하여 그대로 회의를 진행합니다.
소박한 로직이지만, 회의 도중에 게임이 멈추는 것보다는 훨씬 낫습니다.
17개 언어로 늘려도 Clef에게 질문하는 것은 영어로 유지했다
ANGEL HALOS는 일본어와 영어 외에도 중국어, 한국어, 독일어, 태국어 등 17개 언어로 플레이할 수 있습니다.
언어를 늘릴 때 고민했던 점은 Clef에게 하는 질문을 언어별로 번역할지 여부였습니다.
여러 가지를 생각한 끝에 결국 번역하지 않기로 했습니다. (귀찮아서요...)
일본어와 영어 외에는, 질문 문구는 영어 그대로 사용합니다.
천사의 이름이나 기억 요약, 논의 로그만 해당 언어로 전달합니다.
연출가에게 주는 지시서는 공통어로 한 권만 작성하고, 현장 자료는 현지 언어 그대로 전달하는 방식입니다.
이렇게 하면 질문을 수정하고 싶어도 한 곳만 수정하면 됩니다.
배우들은 그 언어로 말해야 하므로, 언어별로 글자 수 제한이나 대체할 천사 단어를 준비했습니다.
Clef가 적합한 것은 선택해서 정하는 과제
여기까지 읽으면, Clef만 있으면 무엇이든 할 수 있을 것 같을 수도 있습니다.
직접 사용해 본 체감은 조금 더 절제되어 있습니다.
글은 일반 LLM에 작성하는 것이 좋고, 공격처럼 규칙으로 정하면 더 재미있다는 판단도 있습니다.
텍스트만으로 판단한다면, 더 저렴한 모델도 있습니다.
그럼에도 불구하고, 여러 선택지 중에서 확률을 가지고 매번 동일하게 고르는 작업에서는 Clef가 정말 마음에 들 정도로 빠져들었습니다.
마피아 게임의 투표는 그 전형적인 과제였다고 생각합니다.
돌이켜보면, 시간을 많이 쓴 부분은 모델을 고르는 것보다 AI에게 무엇을 맡기고 무엇을 맡기지 않을지 경계를 정하는 것이었습니다.
인간 팀원들에게 일을 분배할 때 고민하는 것과 크게 다르지 않은 것일지도 모릅니다.
ANGEL HALOS는 브라우저에서 바로 플레이할 수 있습니다.
AI 천사들을 잘 속여보시길 바랍니다.
느낀 점이나 지적할 부분이 있다면 댓글란에 남겨주시면 감사하겠습니다.
끝까지 읽어주셔서 감사합니다.
참고
Discussion