지금의 AI 롤플레이는, 끝나면 사라진다

AI 캐릭터와 세 시간을 보낸다. 그녀는 당신이 구해 줬다는 걸 기억하고, 4 호차에서의 말다툼을 기억하고, 당신이 한 거짓말을 기억한다. 그리고 당신은 창을 닫는다.

다음 날 돌아온다. 그녀는 아직 거기 있다 —— 하지만 더 이상 「그 그녀」가 아니다. 컨텍스트는 잘리고, 기억은 압축되고, 캐릭터는 리셋됐다. 그 세 시간은 돌아갈 수 있는 역사가 아니다. 증발한 대화일 뿐이다.

이것이 오늘날 거의 모든 AI 롤플레이 제품의 공통된 결함이다: 플레이 상태가 대화의 부산물이지, 일급 시민이 아니다. 특정 순간에 저장할 수 없고, 분기점으로 돌아가 다시 선택할 수 없고, 「내 Elena 는 이미 다크 엔딩에 도달했다」를 친구에게 건네 거기서부터 이어 놀게 할 수 없다.

우리의 답: 세계도 영혼도 버전 관리 가능하게

WorldLines 는 소프트웨어 공학의 검증된 아이디어를 빌린다 —— commit-tree (커밋 트리).

코드를 쓰는 사람은 git 을 안다: 의미 있는 변경마다 1 커밋, 커밋은 분기 가능한 트리를 이루고, 어떤 노드도 정확히 재현하고, 거기서 분기하고, 남에게 push 할 수 있다.

같은 것을 내러티브에 적용한다. WorldLines 에서는 세 종류의 「것」이 버전을 가진다:

  • 세계 (World) —— 플레이 가능한 이야기 무대. 작가가 dark-train@2.0 을 공개한다 —— 그게 「크리에이터 버전」.

  • 영혼 (Soul) —— 인격 커널을 가진 캐릭터. 자신의 기억·가치관·한계를 가지며, 당신의 아바타도, 세계의 NPC 도 될 수 있다.

  • 플레이 그 자체 —— 이게 핵심. 의미 있는 턴을 플레이할 때마다 commit 이 생성된다: 그 순간의 세계 상태 + 각 캐릭터 영혼의 상태 + 각 agent 의 완전한 대화 컨텍스트가, 변조 불가능한 해시로 굳어진다.

해시는 나중에 붙이는 라벨이 아니다 —— 해시가 곧 그 상태의 정체성이다. 같은 내용은 어느 머신에서든 같은 해시가 된다. 즉:

  • 임의의 순간에 저장 —— 「마지막 자동 저장」이 아니라, 매 턴이 기록에 남는다.

  • 분기점으로 복귀 —— 어떤 커밋에서든 새 스토리라인을 분기할 수 있고, 원래 역사는 그대로 남는다.

  • 진정한 이식성 —— 커밋을 다른 머신(브라우저라도)으로 가져가 그 순간부터 이어 가면, 원래 머신과 동일한 결과가 나온다.

  • 공유 가능 —— 「여기까지 왔어, 여기서부터 이어 줘」가 하나의 commit hash 가 된다.

영혼은, 창을 닫았다고 잊지 않는다

Soul 은 캐릭터 카드 한 장이 아니다. 기억은 단기와 장기로 나뉘고, 감정과 중요도에 따라 고정되거나 잊히고, 친밀함으로 가까워지고 가치 충돌로 멀어진다 —— 그리고 이 상태들은 매 턴, 그녀 자신의 독립된 commit 체인으로 들어간다.

그녀는 자신이 어느 세계에 있는지 모른다(커밋에 세계 정보를 쓰지 않는다). 그래서 같은 「다크 트레인 결말을 이미 겪은 Elena」를 완전히 다른 이야기로 데려갈 수 있다. 영혼은 독립적으로 유통될 수 있는 자산이다.

실제로 무슨 일이 일어나나 —— Elena 를 예로, 파일 단위로

캐릭터 카드를 임포트한다. WorldLines 가 그것을 soul 폴더로 푼다. Elena 가 누구인지 —— 핵심 특성·가치관·배경 —— 는 persona/ 와 background/ 에 들어가고, 이 둘은 동결된다: 생성 후에는 아무것도 덮어쓰지 않는다. 이건 오늘날 캐릭터 카드가 이미 주는 부분이다; 우리는 그저 그것이 썩지 않게 할 뿐이다.

그리고 플레이한다. 모든 행동은 특정 파일에 떨어지고, 그 쓰기 권한을 가진 agent 는 단 하나다:

  • 검을 산다. soul-action 이 character/inventory.json 과 character/wallet.json 을 쓴다. 골드가 줄고, 검이 가방에 들어간다 —— 컨텍스트 윈도가 아니라 디스크 위에.

  • 그녀와 말한다. soul-dialogue 와 soul-memory 가 short-term-memo/(conversation_cache.json, recent_events.json)를 쓴다 —— 이 세션의 작업 기억.

  • 무언가가 감정적으로 꽂힌다 —— 그녀가 당신을 믿기 시작하거나, 당신이 그녀를 배신했다. soul-memory 가 그것을 long-term-memo/ 로 통합한다: important_events.md, 그리고 당신이 진짜 묻는 부분 —— Elena 가 당신에게 얼마나 가까운지는 long-term-memo/emotional_memories.json 에 존재하며, 관계가 움직일 때마다 다시 쓰인다. persona/relationships.json 의 베이스라인은 결코 변하지 않는다; 느껴지는 거리는 장기 기억이지 persona 가 아니다.

매 턴, 그 soul 상태 전체가 Elena 자신의 체인 위 하나의 commit 으로 해시된다 —— 그녀가 어느 세계에 있는지 결코 기록하지 않는 체인이다.

세계 버전을 가로질러 반복하기

세계 작가가 dark-train@2.0 을 낸다. 당신은 같은 Elena 를 데려간다. 그녀의 commit 체인은 그녀의 것이고 세계 데이터를 담지 않으므로:

  • persona/ / background/ —— 동일. 그녀는 같은 사람이다.

  • long-term-memo/ —— 그녀와 함께 온다. 그녀는 여전히 다크 트레인 결말을 기억하고, 당신에 대해 느꼈던 것을 여전히 느낀다.

  • short-term-memo/ —— 새 인스턴스는 깨끗하게 시작한다; 세션 스크래치는 플레이 간에 새지 않는다.

  • character/ —— fork 시점의 당신 선택: 장비를 새로 시작하거나, 가져가거나. 포함할지 말지 고르는 파일일 뿐이다.

단기는 플레이별 스크래치; 장기와 persona 는 그녀; 세계는 그녀가 결코 역참조하지 않는 별도의 체인이다.

이것이 일상의 AI 대화에 무엇을 바꾸나

Character.AI 나 SillyTavern(주점) 세션에서는 위의 모든 것이 하나다: 컨텍스트 윈도의 token. 당신의 인벤토리, 그녀가 얼마나 가까운지, 세 시간 전에 무슨 일이 있었는지 —— 그것은 윈도가 가득 차거나 탭을 닫을 때까지만 존재한다. inventory.json 은 없다. commit 은 없다. 「우리가 있던 곳에서 계속」은 최선을 다한 재요약이다.

WorldLines 는 그 각각을 당신이 소유하는 파일과, 어떤 턴에서든 저장하고, 분기하고, 친구에게 건네고, 다른 머신에서 동일하게 재현할 수 있는 해시 commit 으로 만든다. 똑같이 캐릭터 카드에서 시작한다 —— 차이는 첫 메시지 이후의 모든 것이 증발하지 않는다는 것이다.

종국: 플레이된 세계는, 커뮤니티가 된다

이 체계의 진짜 야심은 더 멀리 있다.

어떤 세계의 한 커밋이 배포될 수 있게 되면, 그것은 「정적인 이야기 모듈」이 아니게 된다. 그것은 살아 있는 노드 다: 다른 사람이 그것을 fork 하고, 당신이 멈춘 곳에서 이어 가고, 그들의 후속을 체크인으로 되돌리고, 그 아래에 토론을 형성할 수 있다. 세계관 자체가 한 명의 작가가 아니라 사람들의 집단에 의해 정기적으로 유지·확장·계속될 수 있다.

그것이 WorldLines 의 hub 체계가 최종적으로 자라날 모습이다: 이야기 스토어가 아니라, 누구나 접목할 수 있는 내러티브 트리. git 은 전 세계 프로그래머가 같은 코드베이스에서 협업하게 했다; 우리는 전 세계 플레이어와 크리에이터가 같은, 계속 자라는 이야기 세계에서 협업하게 하고 싶다.

지금 어디에 있나

WorldHub 와 SoulHub 의 배포 파이프라인, 3 축 버전 모델(크리에이터 버전 / 인스턴스 / commit), 머신 간 재현 가능한 commit 스냅샷 —— 기반은 설계 잠금 완료, 구현 중. 멀티 agent 런타임(하나의 세계 agent 가 독립된 마음을 가지고 각자 자기 모델을 돌리는 N 개의 캐릭터 agent 를 통괄)이 다음 핵심 엔지니어링이다.

당신의 그 세 시간은 증발해서는 안 된다. 돌아갈 수 있는 노드여야 한다 —— 계속 자랄 수 있는 트리여야 한다.

—— Ludic Dynamics

Ludic Dynamics
Ludic Dynamics 도쿄에서 AI 기반 세계를 구축합니다.