Recall - Cognee와 Ollama로 구축한 AI 미스터리 게임
요약
Cognee와 Ollama를 활용하여 구축한 터미널 기반의 AI 미스터리 게임 'Recall'을 소개합니다. NPC가 지속적인 메모리를 바탕으로 플레이어와 역동적으로 상호작용하며 매번 새로운 시나리오를 생성합니다.
핵심 포인트
- Cognee와 Ollama를 사용한 AI 기반 게임 구현
- NPC가 이전 대화 내용을 기억하는 지속적 메모리 기능 제공
- 정해진 대본 없이 매 실행마다 새로운 이야기와 범인 생성
- 터미널 환경에서 즐기는 몰입형 미스터리 추리 경험
자, 저는 AI(단순한 LLM뿐만 아니라 그 이상일 수도 있는)가 월드 생성, 대화, 그리고 NPC의 행동을 결정하게 하여 게임이 훨씬 더 자연스럽게 느껴지도록, 즉 사용자가 실제로 게임과 상호작용하는 것처럼 느끼게 하려는 아이디어를 가지고 있었습니다.
그래서... 이것은 Cognee와 Ollama를 사용한 저의 첫 번째이자 매우 작은 시도입니다.
Recall은 플레이어가 살인 사건을 조사하는 탐정 역할을 수행하는 터미널 기반의 AI 미스터리 게임입니다. 여러분의 목표는 용의자들을 심문하고 그들의 이야기를 조각조각 맞춰 진범을 찾아내는 것입니다.
설정 방법과 플레이 방법이 포함된 Github 코드를 여기서 확인하세요:
lightsigma96 / Recall
진실이 쓰여 있는 것이 아니라 기억되는 터미널 미스터리 게임. 실제적이고 지속적인 메모리 (Persistent Memory)를 가진 NPC와 대화하고, 정해진 대본 없이 누가 범인인지 조각을 맞춰보세요.
Recall
매 실행마다 새로운 이야기, 용의자, 범인, 그리고 대화가 생성되는 AI 기반 살인 미스터리 터미널 게임.
플레이어는 NPC와 대화하며 조사합니다. NPC는 이전 대화 내용을 기억하고, 역동적으로 반응하며, 생성된 미스터리에 기반하여 단서를 제공합니다.
주요 기능 (Features)
- AI가 생성하는 머더 미스터리 (Murder Mystery) 스토리
- 동적인 NPC 성격 및 대화
- 지속 가능한 NPC 메모리 (Memory) 시스템
- 절차적으로 선택되는 범인과 단서
- 터미널 기반의 인터랙티브 UI
- 로컬 (Ollama) 및 클라우드 (Gemini) LLM 지원
작동 원리 (How It Works)
- 새로운 세계와 머더 미스터리가 생성됩니다.
- 고유한 성격과 지식을 가진 NPC들이 생성됩니다.
- 플레이어는 NPC를 심문합니다.
- 대화 내용이 메모리에 저장됩니다.
- 플레이어는 수집된 정보를 사용하여 범인을 지목합니다.
| 게임 단계 (Game Stage) | Cognee Cloud API | Recall의 활용 방식 |
|---|---|---|
| NPC 메모리 생성 | /api/v1/remember | 각 NPC의 성격, 비밀, 관계 및 범죄 지식을 전용 메모리 데이터셋 (Memory Dataset)에 저장합니다 |
| 메모리 격리 (Memory Isolation) | Cognee 데이터셋 (Datasets) | 모든 NPC에 대해 별도의 데이터셋(npc_name_ds)을 생성하여, 용의자들이 오직 자신의 기억만을 알 수 있도록 합니다 |
…
NPC의 메모리 구축 (Building Memory of NPC)
이번 해커톤의 주요 테마는 메모리 (Memory)였습니다.
LLM (Large Language Model)은 프롬프트된 질문에 대해서만 답변할 뿐, 어떠한 문맥 (Context)도 유지하지 않습니다.
Recall의 경우, 모든 NPC는 Cognee를 통해 구동되는 자신만의 지속 가능한 메모리를 가집니다.
NPC와 상호작용할 때마다 cognee.recall()을 사용하여, Cognee는 해당 NPC의 기존 메모리를 검색하고 과거의 상호작용 및 초기 배경 이야기에서 가장 관련 있는 정보를 검색합니다.
이 정보는 플레이어의 질문에 답변하는 데 사용되며, 답변이 완료되면 cognee.remember()를 사용하여 해당 NPC의 메모리 그래프 (Memory Graph)를 업데이트합니다.
이는 마치 Cognee가 뇌이고, LLM이 입과 같은 역할을 하는 것과 같습니다.
모든 NPC는 자신만의 Cognee 데이터셋을 가집니다. 이는 사건이 발생했을 때 NPC가 어디에 있었는지, 무엇을 하고 있었는지, 그리고 사건에 대해 무엇을 알고 있는지와 같은 초기 기억을 설정하기 위해 cognee.remember()를 직접 호출함으로써 생성됩니다.
또한, NPC를 초기화하는 과정에서 각 NPC에게는 고유한 이름, 성격, 그리고 직업이 부여됩니다.
속삭임 기능 (The Whisper Feature)
이것은 실험적인 기능으로, 게임 도중 NPC들이 서로 무작위로 상호작용하며 기억을 교환할 수 있게 합니다.
이 아이디어의 핵심은 캐릭터들이 플레이어에게만 반응하는 것이 아니라 서로에게도 영향을 미치게 함으로써, 세계가 더욱 살아있는 것처럼 느껴지게 만드는 것이었습니다.
이는 또한 범인이 당신이 다른 NPC들에게 어떤 질문을 해왔는지 결국 알아내고, 그에 맞춰 행동을 변화시킬 수도 있음을 의미합니다.
이 기능의 핵심 로직을 구축할 수 있었으나, 시간 제약으로 인해 게임에 완전히 통합하지는 못했습니다. 구현된 코드는 여전히 코드베이스에서 찾아볼 수 있습니다.
게임 설정 (Game Setting)
저는 환경 자체가 수사에 기여할 수 있는 미스터리 및 탐정 설정의 테마를 지향하고자 했습니다.
처음에는 4개의 바이옴(biomes)/설정을 계획했으나, 역시 시간 제약으로 인해 2개만 추가할 수 있었습니다.
스토리는 AI에 의해 생성되므로, 모든 NPC의 기억과 스토리는 플레이할 때마다 달라집니다. 유일하게 고정된 것은 게임의 설정뿐입니다.
2개의 바이옴은 다음과 같습니다:
-
빅토리아 시대 영국 (Victorian England): 셜록 홈즈(Sherlock Holmes)에서 영감을 받은 고전적인 탐정 경험을 선사하며, 오래된 건물과 캐릭터들을 포함합니다.
-
숲 (Forest): 더욱 고립되고 신비로운 환경을 조성하며, 황야에 둘러싸여 모든 캐릭터가 숲속 깊은 곳에 자신만의 비밀을 숨기고 있습니다.
Cognee Cloud
저희에게는 35달러 상당의 무료 클라우드 크레딧이 제공되었으며, 이는 정말 큰 도움이 되었습니다.
초기에 Recall은 Cognee와 Ollama 모델을 사용하여 완전히 로컬(locally) 환경에서 실행되었습니다. 이 방식도 작동은 했지만, 특히 고성능 컴퓨팅 자원에 접근할 수 없는 상황에서는 메모리 작업(memory operations)과 모델 추론(model inference)을 모두 로컬에서 실행하는 것이 느리고 자원 집약적이었습니다.
클라우드 크레딧을 사용함으로써 메모리 주입(memory ingestion) 및 회상(recall) 속도를 높일 수 있었습니다.
또한, 클라우드 호스팅 인프라를 제공받음으로써 로컬 Ollama 모델에서 겪고 있던 호환성 문제도 해결할 수 있었습니다.
ASCII 아트 제작
ASCII 아트를 만드는 것은 처음에는 흥미로워 보였지만, 미묘한 차이점들이 나타나기 시작하면서 빠르게 병목 현상(bottleneck)이 되었습니다.
저는 이미지를 ASCII로 변환하는 컨버터를 사용하고 있었기 때문에, 적절한 이미지를 찾는 것 또한 중요한 작업이었습니다.
ASCII 아트가 보기 좋으려면 많은 문자가 필요하지만, 채팅 패널이나 헤더 패널과 같은 다른 패널과 함께 하나의 패널 안에 배치하려면 당연히 문자 수를 줄여야만 했습니다.
그래서 저는 문자 수를 제가 할 수 있는 최저 수준인 20개로 줄였습니다.
그 결과, 단 20개의 문자로도 충분히 이해할 수 있으면서도 더 표현력이 풍부하고 다양한 올바른 이미지들을 찾아낼 수 있었습니다.
결과적으로 이는 게임의 시각적인 완성도를 높여주었습니다.
또한, 이것이 병목 현상이 되어 레벨을 4개가 아닌 2개밖에 만들지 못했습니다.
몇몇 ASCII 아트들... 이해는 가능하지만 제가 말했던 넘침(overflow) 현상이 있습니다
AI의 활용
당연하게도, AI 또한 개발 프로세스의 일부였습니다.
대부분의 코드는 직접 작성했으며, 전반적인 게임 디자인, 아키텍처(architecture), 그리고 아이디어는 제가 만들었습니다. 하지만 빠르게 실험하거나, 문제를 디버깅(debug)하거나, 프로젝트의 특정 부분을 반복 개선(iterate)하고 싶을 때 개발 속도를 높이기 위해 AI 도구들을 사용했습니다.
이 프로젝트를 위해 저는 코딩 에이전트(coding agents)나 외부 개발 하네스(development harnesses) 없이, 웹사이트를 통해 ChatGPT와 Claude를 사용했습니다. 저는 그런 것들을 가지고 있지 않거든요 :(
결론 (Ending)
Recall은 완성된 게임과는 거리가 멀지만, NPC가 덜 정해진 대로 움직이고 더 살아있는 것처럼 느껴지게 만들고 싶었던 제가 실험해보고 싶었던 아이디어를 나타냅니다.
게임이 더 자연스럽고 상호작용적이며, NPC가 방금 당신에게 한 말과 당신이 자신과 어떻게 상호작용했는지를 잊지 않을 때 훨씬 더 재미있어질 수 있습니다.
이것은 Cognee와 LLM(대규모 언어 모델)을 사용하여 그 아이디어를 탐구한 저의 첫 번째 시도였으며, 이 접근 방식이 어디까지 발전할 수 있을지 기대됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기


