MIT 라이선스 오픈소스
트레이딩 카드 게임의 반응 타이밍을 이해하도록 AI를 가르친 사람은 아직 없습니다. 저희가 시도하고 있습니다.
카드 게임 AI에 대한 공개 연구는 대부분 상대가 내 턴에 개입할 수 있게 되는 지점에서 멈춥니다. 이 프로젝트는 그 이후, 범위를 제한한 버전을 만들고 있으며, 모든 코드가 공개되어 있어 한 줄 한 줄 확인할 수 있습니다.
왜 어려운가, 그리고 왜 거의 아무도 하지 않았는가
보드게임은 완전 정보 게임입니다. 판이 테이블 위에 그대로 있으니 탐색이 가능합니다. 카드 게임은 첫 수부터 이 전제를 깨뜨립니다. 덱은 무작위이고 상대의 패는 보이지 않아서, '현재 상황'이 하나로 정해지지 않습니다.
두 번째 장벽이 어떤 게임이 실제로 풀리는지를 가릅니다. 바로 상대가 내 턴에 개입할 수 있는가입니다. 하스스톤은 공개 연구가 가장 멀리 나아간 사례인데, 카드 풀이 작아서만이 아니라 상대가 대부분 내 턴을 방해할 수 없고, 출시된 구현체 자체가 유일하게 정확한 룰 엔진이라 연구자가 환경을 만들기 위해 규칙을 다시 해석할 필요가 없기 때문입니다.
매직 더 개더링 쪽에는 그런 것이 없습니다. 가장 가까운 참고 사례는 모두 커뮤니티가 만든 것입니다. MTG의 Forge는 오랫동안 유지보수된 비공식 룰 엔진이고, 유희왕의 ygo-agent는 그 아래에 ygopro-core가 있어야만 학습이 가능합니다. 두 게임에 대한 최근 벤치마크인 MTG-Causal-RL과 PTCG-Bench는 모두 LLM 에이전트가 0이 아닌 성과를 낼 수 있음을 보여주지만, 안정적으로 잘한다는 것을 보여주지는 못했습니다. 둘 다 제한된 아키타입 집합을 고정된 관측 공간에 넣고 방법론을 비교하는 연구용 벤치마크일 뿐, 스스로 대국할 수 있는 세계는 아닙니다.
Riftbound는 어려운 쪽에 속합니다. 체인이 있고, 우선권과 포커스가 넘어가며, 반응 타이밍이 있고, 상대의 행동 사이에서 상황이 계속 바뀝니다. 시도는 있었습니다. 트리 서치를 연결한 공개된 Riftbound 시뮬레이터가 적어도 하나 있고, 체인 해결을 피하지 않고 정면으로 다룹니다.
이들 모두에게 없는 것은 적합성 테스트 스위트입니다. 구현된 타이밍이 규칙이 설명하는 타이밍과 조항 단위로 일치하는지 확인하고, 어떤 부분이 아예 구현되지 않았는지 명시할 방법 말입니다. 이것이 없으면 '불법'과 '모델링되지 않음'은 같은 답이 됩니다. 플레이 입장에서는 상관없습니다. 둘 다 할 수 없다는 뜻이니까요. 하지만 이 환경에서 학습하거나 이를 증거로 인용하려는 무언가에게는, 결과와 추측의 차이입니다.
그러니 장벽은 모델이 충분히 똑똑하지 않아서가 아니었습니다. 장벽은 누군가 먼저 규칙을 프로그램으로 옮겨야 한다는 것입니다.
베팅: 범위를 제한하고, '모른다'고 말할 수 있게 하기
모든 카드를 모델링할 필요는 없습니다. 실제로 한 포맷은 발매된 카드 중 일부에만 의존하며, 이를 정직하게 공학적으로 번역하면 범위를 제한하는 것입니다. 실제로 도달하는 메커니즘만 구현하고 나머지는 모델링되지 않음으로 표시합니다.
이는 단 하나의 조건 아래에서만 작동합니다. 시스템이 unsupported라고 답할 수 있어야 하고, 그 답이 숨겨진 실패가 아니라 정식 결과로 취급되어야 합니다. 답을 보류하는 것을 덮어야 할 문제로 취급하는 순간, 제한된 범위는 조용히 모든 것을 다루는 척하는 시스템이 되어버리고, 이는 아예 만들지 않는 것보다 나쁩니다.
그래서 역할 분담은 고정되어 있습니다. 프로그램이 기계적 층을 소유하고, 모델은 그것이 남긴 공간 안에서만 추론합니다. 규칙을 모델이 읽을 수 있는 프롬프트로 번역하는 것이 아니라, 규칙을 실제로 실행해서 모델이 빠져나갈 수 없는 공간을 만드는 것입니다.
지금 정확히 어디까지 왔는가
위에서 말한 목표는 온전한 크기로 서술한 것입니다. 이 부분은 정확하게 서술한 것이고, 둘은 같지 않습니다. 여기 있는 모든 문장은 저장소의 적합성 테스트 스위트로 검증됩니다. 스위트가 바뀌면 이 페이지는 틀린 것입니다.
- 완료 타이밍 및 권한 커널. 네 가지 턴 상태, 행동 및 반응 타이밍, 우선권과 포커스, 대기 중 및 확정된 체인 항목. 각각 해당 공식 조항을 명시한 21개의 실행 가능한 테스트 케이스.
- 완료 타입이 지정된 효과 중간 표현. 12개의 연산과 순서 지정, 대상, 연동 효과, 치명적 정리, 트리거 발생. 인터프리터에는 카드 이름으로 분기하는 조건문이 없습니다. 카드는 타입이 지정된 연산으로 구성되거나, 아니면 모델링되지 않은 것이고, 후자의 경우 시스템이 그렇게 밝힙니다.
- 완료 공유 결과 래퍼. 지원됨, 불법, 지원되지 않음, 결정 필요, 입력 무효의 다섯 가지 결과가 생성 당시의 커버리지 한계와 함께 전달됩니다. 이를 사용하는 세 시스템 중 두 개가 연결되어 있습니다.
- 부분 완료 카드 행동 팩. 카드별 조항 커버리지에 대한 계약은 존재하고 검증도 되었지만, 아직 실제 배포용 팩이 포함되어 있지 않아 실제 덱에 대한 정직한 답은 여전히 사용 불가이며, 툴은 부풀리지 않고 그대로 말합니다.
- 시작 전 합법 행동 열거. 대국 기록 수집이 아니라 적합성 커버리지에 막혀 있습니다. 이후 무엇이든 탐색하거나 학습할 수 있게 해줄 핵심 조각입니다.
- 시작 전 리플레이 복원 및 경기 후 리뷰. 명세는 전부 작성되었지만, 활성화 조건을 통과하기 전까지는 의도적으로 연결하지 않았습니다.
애초에 커널을 만들게 된 이유
이 프로젝트는 파생된 지식 베이스로 시작했습니다. 모든 항목은 다른 사람의 가이드를 요약한 것이 아니라 카드 텍스트와 게임 메커니즘에서 직접 작성되었으며, 이는 항목을 다시 만드는 비용을 낮추지만 그 자체로는 검증되지 않은 상태였습니다. 그래서 46개 전부를 정립된 플레이와 대조해 검증했고, 그중 3개는 수정이 필요 없었습니다.
가장 유용했던 발견은 전설과는 아예 관계가 없었습니다. 금지 카드 대체 로직이 모든 플레이어에게 조건 없이 룬을 주는 카드를, 포인트를 점유한 쪽에게만 지급하는 카드로 바꿔치기했습니다. 같은 도메인, 같은 비용, 완전히 합법적인 대체였지만, 이 덱은 초반 필드를 의도적으로 포기하고 템포를 얻는 덱이었기 때문에 이 교체는 오히려 상대에게 자원을 대주는 셈이었습니다. 이 문제를 발견한 것은 프로젝트 외부의 플레이어였고, 내부 점검이 아니었습니다.
그 감사가 바로 커널이 존재하는 이유입니다. 카드 텍스트에서 도출한 내용은 그 자체로는 타당합니다. 하지만 질문이 이 덱이 실제로 무엇을 하려는가, 혹은 지금 기계적으로 무엇이 합법인가로 바뀌는 순간 더 이상 버티지 못하며, 그 기계적인 절반은 도출할 수 없고 오직 실행해야만 알 수 있습니다.
우리가 겨냥하는 지점
바둑 AI가 투자할 가치가 있었던 이유는 모든 인간을 이기기 때문입니다. 트레이딩 카드 게임은 그런 형태가 아니며, 초인간적인 플레이어를 만든다 해도 큰 가치는 없을 것입니다. 여기서 겨냥하는 지점은 의도적으로 다르고, 나름의 방식으로 더 어렵습니다.
사람을 이기는 것이 아니라 제대로 가르치는 것입니다. 덱이 무엇을 하는지 설명하고, 그 주장의 근거를 보여주고, 정말로 모르는 지점에서는 멈추는 것입니다.
플레이를 배우는 것은 오히려 쉬운 절반이었습니다. 어려운 절반은 덱을 짜고, 포맷을 읽고, 카드가 금지됐을 때 무엇으로 바꿔야 하는지 아는 것이며, 바로 이 지점에서 우리 자신의 대체 로직이 실패했습니다. 합법적으로는 확신할 이유가 충분했던 덱에서 말입니다. 그 실패는 문제 자체의 모습이지, 덮어서 치워야 할 부끄러운 일이 아닙니다.
이것이 언젠가 완전한 룰 엔진이나 학습 시스템으로 성장할지는 알 수 없습니다. 하지만 그동안 쌓이고 있는 것들, 즉 구조화된 상태, 실행 가능한 적합성 테스트 케이스, 증거의 흔적은 그 두 가지 중 무엇이 되든 필요한 토대입니다.
실제로 도움이 되는 것
혼자 하기에는 너무 느리고, 빠져 있는 부분들은 게임이나 엔지니어링을 아는 사람이 필요한 부분들입니다. 여기서 시작하는 데 허락이 필요한 것은 아무것도 없습니다. 포크하고, 부수고, 이슈를 열어도 됩니다.
- 도출 결과 깨보기
- 그 대체 로직의 버그는 로직보다 그 덱을 더 잘 아는 플레이어가 찾아냈습니다. 이는 여전히 가장 가치 있는 기여이며, 코드가 전혀 필요 없습니다.
- 커널에 메커니즘 작성하기
- 각각 공식 조항에 연결된, 타입이 지정된 연산과 적합성 테스트 케이스. 이것이 병목입니다. 규칙을 코드로 옮기는 것 자체가 전체 장벽이며, 이 작업은 병렬로 나눌 수 있습니다.
- 이 방법론을 다른 게임으로 이식하기
- 이 접근법에서 Riftbound에만 국한된 부분은 없습니다. 두 번째 게임이야말로 이 모든 것이 일반화되는지 확인하는 진짜 시험입니다.
이것이 아닌 것
룰 엔진, AI 에이전트, 학습된 플레이어 모델은 서로 다른 세 가지입니다. 이 프로젝트는 두 번째로 시작했고, 이후 첫 번째의 제한된 일부를 작성했습니다. 세 번째는 아니며, 그런 척도 하지 않습니다. 완전한 상태 머신도, 전체 카드 효과 엔진도, 셀프 플레이 데이터도, 학습된 정책도 없습니다.
이것은 직접 플레이하지도 않습니다. 모든 것이 준비 단계, 즉 구축, 이해, 연습, 복기에 머물러 있습니다. 만약 언젠가 공식 디지털 클라이언트를 포함한 권위 있는 룰 엔진이 나온다면, 이 프로젝트는 불필요해지는 것이 아니라 오히려 더 쓸모 있어질 것입니다. 그 엔진은 플레이를 위한 것이고, 이것은 준비를 위한 것이기 때문입니다.
Riot의 Digital Tools Policy는 덱 관리 도구와 교육용 도구에는 열려 있지만, 자동화된 규칙 실행이나 게임플레이 시뮬레이터는 사전 승인하지 않는다고 명시하고 있습니다. 이 경계가 야망보다 먼저 설계 방향을 결정했습니다. 모든 플레이 제안은 사람이 확인할 때까지 기다립니다. 이 프로젝트는 연구 및 교육 목적으로 만들어졌으며, 대회 중 사용하는 것은 대회 규정 위반입니다.