Anyworld: 로컬 LLM이 던전 마스터를 맡는 셀프 호스팅 멀티플레이어 텍스트 RPG
Anyworld, a self-hosted multiplayer text RPG where a local LLM is the Dungeon Master
핵심 요약
로컬 LLM을 던전 마스터로 활용해 친구들과 함께 즐기는 오픈소스 멀티플레이어 텍스트 RPG 프로젝트입니다.
- 멀티플레이어 처리 — 여러 플레이어의 행동을 한 번에 처리하여 상호작용을 자연스럽게 구현함
- 하이브리드 시스템 — Python이 주사위 굴림과 확률 계산을 담당하고 LLM은 서사만 전담함
- DM 도구 — 호스트가 NPC 동기나 비밀 규칙 등 숨겨진 정보를 모델에 입력 가능함
- 접근성 개선 — 호스트만 모델을 실행하면 플레이어는 브라우저로 즉시 접속 가능함
다들 안녕,
내가 'Anyworld'라는 게임을 만들고 있어. 이건 브라우저 기반 멀티플레이어(싱글 플레이도 가능함) 텍스트 어드벤처 게임인데, AI Dungeon 초창기, 특히 브라우저 기반 무료 버전이었던 AI Dungeon 2에서 영감을 받았어.
구조는 꽤 간단해. 한 명이 서버를 열고 llama.cpp로 모델을 돌리면(OpenAI나 다른 클라우드 API도 지원해서 영어 아닌 언어로 할 때 개꿀임), 친구들이 브라우저 링크로 들어오는 방식이야. 호스트가 배경이랑 목표를 설정하면, 플레이어들이 자기 행동을 입력하고, LLM이 DM(던전 마스터) 역할을 하면서 이 난장판을 정리하고 스토리를 이끌어가는 거지.
솔직히 호스트가 파이썬 좀 다룰 줄 알아야 하고, 네트워크 쪽도 좀 만질 줄 알아야 해(VPN이나 포트 포워딩으로 게임 경로 열어주는 거 등). 이 부분은 개발하면서 계속 개선할 생각이야. 다른 서브레딧에서 Docker 쓰라는 의견이 있어서 그것도 고려 중인데, 그렇게 하면 llama.cpp 백엔드랑 추천 모델, 설정 같은 걸 게임이랑 같이 묶어서 배포할 수 있으니까 확실히 편할 듯.
레포지토리 문서 전체를 다 복붙하는 대신, 지금 핵심 기능들만 정리해 줄게.
게임 방식
-
진정한 멀티플레이어 해결: 플레이어들이 각자 행동을 입력하면, 모델이 한 라운드를 통째로 처리해. 캐릭터들이 서로 상호작용하거나 방해하는 상황까지 다 계산한다고 보면 돼.
-
진짜 주사위 굴림: 행동 결과가 불확실할 때는 파이썬이 직접 난수(RNG) 계산을 해. 모델은 그 주사위 결과값을 받아서 그에 따른 결과를 서술하는 식이지.
-
커스텀 시나리오: 배경, 캐릭터, 시작 상황을 직접 쓸 수 있어. 판타지에만 국한된 게 아님.
-
파티 채팅: 게임 이벤트랑 별개로 OOC(게임 외) 채팅이 있어서 LLM이 읽지 않는 곳에서 따로 떠들 수 있어.
-
플레이어는 설정할 거 없음: 호스트 말고는 아무것도 설치하거나 모델 돌릴 필요 없어. 데스크톱이랑 모바일 브라우저에서 다 돌아가.
DM 도구 & 숨겨진 메커니즘
-
비공개 DM 가이드: 호스트는 모델한테만 보이는 숨겨진 정보를 줄 수 있어. NPC의 동기, 비밀 규칙, 아니면 스토리가 흘러갔으면 하는 방향 같은 거 말이야.
-
비밀 트리거: 게임당 숨겨진 확률 굴림을 하나 설정할 수 있어(예: 플레이어가 건물에 들어가면 20% 확률로 건물이 무너짐). 파이썬이 백그라운드에서 확률을 굴리고, 만약 터지면 모델이 플레이어들 모르게 그 결과를 스토리에 자연스럽게 녹여내.
내부 구조 & 메모리
-
컨텍스트 관리: 컨텍스트 윈도우를 효율적으로 배분하고 구조화된 메모리 시스템을 써. 오래된 라운드는 월드 상태, 플레이어 정보, 미해결 퀘스트 같은 걸로 압축돼. 요약본을 다시 한번 모델이 검토해서 중요한 사실이 실수로 삭제되지 않게 관리도 함.



