AI 텍스트 RPG를 위한 500개 메모리 시스템 구축 방법 (그리고 이것이 모든 것을 바꾸는 이유)
요약
AI 텍스트 RPG의 연속성을 유지하기 위해 단순 요약 대신 구조화된 메모리 추출 방식을 사용하는 방법을 설명합니다. 세션 종료 시 캐릭터 관계, 세계 상태 등 핵심 사실을 개별 항목으로 추출하여 필요할 때만 컨텍스트에 주입함으로써 디테일을 보존합니다.
핵심 포인트
- 단순 대화 기록 전달은 컨텍스트 윈도우 한계로 인해 정보 유실 발생
- 요약 방식은 정보의 구체성을 떨어뜨려 RPG의 디테일을 훼손함
- 구조화된 메모리 추출을 통해 캐릭터, 관계, 세계 상태를 개별 항목으로 관리
- 관련된 메모리만 컨텍스트에 주입하여 효율성과 연속성 동시 확보
- 추출 프로세스와 검증 로직 구현이 시스템 구축의 핵심
AI 게임에서의 메모리(Memory)는 보기보다 어려운 문제입니다.
대부분의 AI RPG 도구들은 이를 동일한 방식으로 처리합니다. 대화 기록(conversation history)을 컨텍스트 윈도우(context window)에 전달하고 모델이 이를 계속 추적하기를 기대하는 방식입니다. 단일 세션에서는 잘 작동합니다. 하지만 세션이 세 번째에 접어들면 이름이 틀리고, 줄거리 흐름이 사라지며, NPC들이 2주 전에 했던 말과 모순되는 행동을 하기 시작합니다.
우리는 Questsmith를 구축하면서 이 문제에 직면했습니다. 순진한 접근 방식은 빠르게 실패했습니다.
우리가 처음에 시도했던 것
전체 대화 기록을 전달하는 것이 분명한 시작점이었습니다. 세션이 길어지기 전까지는 효과가 있었습니다. 컨텍스트 윈도우(Context windows)에는 한계가 있으며, 그 한계에 도달하면 가장 오래된 콘텐츠가 탈락합니다. 처음에 일어났던 일들 — 즉, 연속성(continuity)을 위해 가장 중요한 경우가 많은 것들 — 이 정확히 유실됩니다.
다음 시도는 요약(Summarization)이었습니다. 오래된 세션을 더 짧은 형식으로 압축하여 각 새로운 세션의 앞에 붙이는 방식입니다. 더 나아졌지만, 요약은 구체성(specificity)을 잃습니다. "플레이어가 NPC를 도왔다"는 "플레이어가 자신에게 빚이 있고 도시 경비대에 누이가 있는 Aldric이라는 이름의 경비병을 도왔다"와는 다릅니다.
RPG에서는 디테일이 중요합니다. 요약은 디테일을 죽입니다.
실제로 효과가 있었던 것
우리는 요약 대신 구조화된 메모리 추출(structured memory extraction)로 전환했습니다.
각 세션이 끝난 후, 별도의 프로세스가 대화를 읽고 특정 사실들 — 캐릭터 이름, 관계, 결정, 결과, 세계 상태(world-state) 변화, NPC 태도 등을 추출합니다. 이것들은 산문(prose) 형태가 아닌 개별적인 메모리 항목(memory entries)으로 저장됩니다.
각 새로운 세션이 시작될 때, 현재 장면에서 중요할 가능성이 높은 내용을 바탕으로 관련 메모리들이 컨텍스트에 다시 주입됩니다. 모든 것을 넣는 것이 아니라, 오직 관련 있는 것만 넣습니다. 이를 통해 컨텍스트를 가볍게 유지하면서도 중요한 디테일에 접근할 수 있게 합니다.
Questsmith는 모험당 최대 500개의 이러한 메모리 항목을 추적합니다. 실제로 긴 캠페인의 경우 몇 주간의 플레이를 통해 200~300개의 항목이 쌓입니다. 시스템은 플레이어가 수동으로 컨텍스트를 다시 설정할 필요 없이 이 항목들을 참조합니다.
플레이어 입장에서 느껴지는 점
캠페인의 3주 차가 되면 플레이어들이 이를 눈치채기 시작합니다.
NPC가 다시 나타나 플레이어가 1주 차에 자신을 위해 무엇을 해주었는지 기억합니다. 2회차 세션에서는 사소해 보였던 결정이 5회차 세션에서 결과(consequence)로 돌아옵니다. 동료의 신뢰도(trust meter)는 플레이어가 마지막으로 한 말이 아니라, 여러 세션에 걸친 패턴을 바탕으로 변화합니다.
이러한 연속성(continuity)이야말로 하나의 캠페인을 단절된 세션들의 나열과 구분 짓는 요소입니다. 또한 플레이어들이 다시 돌아오게 만드는 핵심이기도 합니다.
트레이드오프 (The Tradeoff)
구조화된 추출(Structured extraction)은 요약(summarization)보다 비용이 더 많이 듭니다. 매 세션이 끝날 때마다 추가적인 프로세스를 실행해야 하기 때문입니다. 추출은 정확해야 합니다. 잘못 기억된 세부 사항은 아예 세부 사항이 없는 것보다 더 나쁩니다. 왜냐하면 이야기에 능동적으로 모순을 일으키기 때문입니다.
우리는 추출 프롬프트(extraction prompt)와 검증 로직(validation logic)에 상당한 시간을 할애했습니다. 이를 제대로 구현하는 것이 저장 계층(storage layer)을 구축하는 것보다 더 오래 걸렸습니다.
유사한 것을 구축하고 있다면
도움이 되었던 몇 가지 사항은 다음과 같습니다:
- 사실을 문단이 아닌 개별 항목(discrete entries)으로 추출하세요. 구조화된 데이터(Structured data)는 산문(prose)보다 선택적으로 검색하기가 더 쉽습니다.
- 엔티티(entity)별로 항목에 태그를 지정하세요. 특정 NPC에 대한 기억은 단순히 세션 번호가 아니라 해당 NPC의 이름으로 검색할 수 있어야 합니다.
- 관련성 필터(relevance filter)를 구축하세요. 300개의 모든 기억을 매번 컨텍스트(context)에 주입하는 것은 낭비이며 노이즈를 유발합니다. 현재 장면과 관련된 내용만 주입하세요.
- 플레이어가 자신의 기억 로그(memory log)를 볼 수 있게 하세요. 투명성은 신뢰를 구축하며, 플레이어가 AI가 왜 특정 내용을 기억하는지 이해하는 데 도움을 줍니다.
AI 게임에서의 지속성 있는 메모리(persistent memory) 문제는 해결 가능합니다. 단지 메모리를 프롬프팅(prompting)의 문제가 아닌 데이터(data)의 문제로 취급해야 할 뿐입니다.
실제로 어떻게 작동하는지 보고 싶다면 Questsmith를 thequestsmith.com에서 확인해 보세요. 신용카드 없이도 무료 티어를 이용할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기