LLM NPC에게 한 번의 대화를 넘어서 지속되는 기억 부여하기
요약
본 글은 LLM 기반 NPC가 단순 대화를 넘어 지속적인 기억을 갖도록 하는 실용적인 아키텍처를 제시합니다. 메모리 매니저는 컨텍스트 빌더에게 적절한 히스토리 토큰을 전달하며, 기억은 세 가지 계층(대화 버퍼, 벡터 검색, 구조화된 사실)으로 구현됩니다.
핵심 포인트
- 최근 대화는 요약하는 대화 버퍼로 관리하여 단절감을 줄입니다.
- 장기 기억은 ChromaDB 같은 벡터 DB에 저장하며, 주제별 세그먼트 단위로 보관해야 합니다.
- 플레이어 이름이나 약속 등 핵심 정보는 구조화된 사실(Structured Facts)로 추출하여 항상 로드합니다.
언어 모델은 게임 캐릭터가 거의 모든 것을 말하게 할 수 있게 하는데, 이것이 쉬운 부분입니다. 어려운 부분은 플레이어가 그 캐릭터에게 다가가 두 번째로 만났을 때, NPC가 낯선 사람처럼 인사하는 경우에 나타납니다.
기억(Memory)이야말로 기술 데모와 플레이어들이 애정을 갖는 캐릭터를 구분 짓는 요소입니다. 여기서는 대화 버퍼부터 구조화된 사실까지 계층적으로 기억을 구현하는 실용적인 방법과, 이 시스템이 연결되는 주변 아키텍처의 구성 요소를 소개합니다.
NPC 파이프라인에서 메모리가 위치하는 곳
일반적인 LLM NPC 시스템은 네 개의 모듈로 나뉩니다. 컨텍스트 빌더(context builder)가 프롬프트를 조립하고, LLM 인터페이스(LLM interface)가 클라우드 API 또는 로컬 추론 엔진과 통신하며, 응답 파서(response parser)가 원시 출력을 대화, 감정 태그 및 게임 액션으로 변환하고, 메모리 매니저(memory manager)가 캐릭터가 무엇을 기억할지 결정합니다.
메모리 매니저는 모델에 직접 말을 걸지 않습니다. 그 역할은 컨텍스트 빌더에게 엄격한 토큰 예산 내에서 적절한 수백 개의 히스토리 토큰을 전달하는 것입니다. 이를 통해 프롬프트는 작게 유지되면서도 캐릭터가 연속성을 느끼도록 합니다. LLM 기반 NPC를 구축하는 방법에 대한 이 개요는 네 가지 모듈과 그 연결 방식을 모두 설명합니다.
레이어 1: 요약하는 대화 버퍼
가장 간단한 기억은 역할 라벨(role labels)과 타임스탬프(timestamps)와 함께 저장되는 최근 메시지들의 순환 버퍼입니다. 대부분의 NPC 대화에는 자연스러운 흐름을 위해 10~20개의 메시지 쌍이면 충분합니다.
실수가 발생하는 지점은 이 버퍼의 경계 부분입니다. 가장 오래된 메시지를 삭제하면, NPC가 방금 나눈 대화를 잊어버리는 갑작스러운 단절이 생깁니다. 히스토리 상단에 이를 두세 문장의 요약으로 압축하면 토큰의 일부만 사용하여 주제를 살아있게 유지할 수 있으며, 버퍼가 오버플로우될 때 추가 모델 호출 비용만 발생합니다.
레이어 2: 세션 전반에 걸친 벡터 검색
레이어 2: 세션 전반에 걸친 벡터 검색
장기 기억(Long term memory)은 보통 ChromaDB, Pinecone, Qdrant 또는 Weaviate와 같은 벡터 데이터베이스에 저장됩니다. 세션이 종료되면 이를 임베딩하고 짧은 텍스트 요약, 타임스탬프 및 NPC의 ID와 함께 저장합니다. 다음 세션이 시작될 때, 플레이어의 첫 문장을 임베딩하여 가장 유사한 일치 항목들을 프롬프트로 불러옵니다.
데이터베이스 선택보다 더 중요한 두 가지 설정이 있습니다. 주제별로 묶인 35개의 메시지 쌍(message pairs) 세그먼트를 저장해야 합니다. 전체 대화는 너무 느슨하게 검색되고, 단일 메시지는 인덱스를 부풀리기 때문입니다. 또한 관련 없는 회상은 토큰을 낭비하고 캐릭터를 혼란스럽게 하므로, 최소 유사성 점수(minimum similarity score)를 설정하고 최대 메모리 개수를 24개로 제한해야 합니다.
레이어 3: 항상 로드되는 구조화된 사실
의미론적 검색(Semantic search)은 모든 대화에서 중요한 사실들, 즉 플레이어의 이름, 그가 한 약속, NPC와의 관계 같은 것을 놓칠 수 있습니다. 이러한 정보들은 각 세션 후에 간단한 레이블이 지정된 기록으로 추출되어야 하며, 주제에 상관없이 매번 로드되어야 합니다. 예를 들어, '플레이어가 북부 광산에서 철광석을 가져오겠다고 약속함'과 같은 형식입니다.
일부 시스템은 여기에 기억 감쇠(memory decay)를 추가하여, 오래되고 중요도가 낮은 기억들이 희미해지도록 함으로써 검색이 초점에 맞춰지게 합니다. 검색된 기억들을 NPC가 자연스럽게 참조할 수 있도록 포맷하는 방법까지 포함한 단계별 버전은 NPC에게 기억과 맥락 부여하기 가이드에 있습니다.
이러한 레이어들 중 어느 것도 더 큰 모델을 필요로 하지는 않습니다. 좋은 메모리 관리자와 함께 잘 프롬프트된 작은 모델이, 방을 나설 때마다 당신을 잊는 최첨단(frontier) 모델보다 훨씬 생생하게 느껴질 것이며, 그것이 보통 먼저 해결하기에 비용이 적게 드는 문제입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기