AI 캐릭터가 ‘대화를 잘한다’고 ‘당신을 기억하는’ 것은 아니다: 기억, 상태, 스토리 결과의 3단계 설계
대화 기억, 캐릭터 관계 상태, 스토리 결과를 구분해 플레이어를 실제로 기억하고 이후 전개에 영향을 주는 AI 캐릭터를 설계하세요.

들어가며
직전 문장에 자연스럽게 응답하는 것은 맥락일 뿐이다. 예전의 취향을 꺼내는 것이 기억이다. 과거의 상호작용이 오늘 일어날 수 있는 일을 바꿀 때에야 캐릭터는 스토리 상태를 갖는다. 이 셋을 혼동하면 ‘말로는 기억하는 듯하지만 행동에서는 완전히 잊어버리는’ 문제가 생긴다.
첫 번째 단계: 대화 기억
최근 주제, 사용자 호칭, 일관된 취향, 명시적인 약속을 저장해 반복을 줄인다. 모든 대화를 영구히 저장하지 말아야 한다. 사용자는 기억을 확인하고 수정하고 삭제할 수 있어야 하며, 민감한 정보에는 더 엄격한 경계를 적용해야 한다.
두 번째 단계: 캐릭터와 관계 상태
신뢰, 경계심, 친밀감, 빚을 명시적으로 모델링한다. ‘사용자는 좋은 사람이다’를 저장하기보다 ‘캐릭터가 사용자가 약속을 지키는 모습을 직접 목격함, trust +1’을 기록해 상태의 출처를 추적할 수 있게 한다.
세 번째 단계: 스토리 결과
스토리 상태는 사건이 발생하는지, 자원이 아직 남아 있는지, 약속을 철회할 수 있는지, 어떤 노드에 진입할 수 있는지를 결정한다. 핵심 상태는 규칙으로 관리해야 하며, 생성 모델이 임의로 바꾸게 해서는 안 된다.
예를 들어 사용자가 증거를 넘겨주면 대화 단계는 논의를 기억하고, 관계 단계는 양측의 신뢰를 바꾸며, 스토리 단계는 증거를 더 이상 보유하지 않는다고 기록하고 ‘증거 제시’를 닫는다. 세 단계가 함께 작동해야 결과에 설득력이 생긴다.
안전한 기록 절차
현재 상태를 읽고, 이번 턴에 필요한 기억을 검색하고, 캐릭터의 목표에 따른 제약 안에서 응답을 생성하고, 후보 기억과 상태 변화를 제안한 뒤, 규칙으로 검증하고 저장한다. 모델이 모든 사용자 데이터를 직접 읽거나 핵심 사건이 성립했다고 스스로 선언해서는 안 된다.
memory: {fact, source, confidence, created_at, expires_at}
relationship: {character_id, dimension, value, reason}
story_state: {event_id, status, evidence, version}
대화하는 능력은 신선함을 주고, 기억하는 능력은 관계를 느끼게 하며, 기억이 이후의 기회를 바꾸게 해야 이야기를 느끼게 한다.
어떤 내용을 오래 기억할 가치가 있는가
장기 저장에 적합한 것은 일관된 취향, 명시적인 약속, 함께한 경험, 사용자가 직접 기억해 달라고 요청한 사실이다. 일시적인 감정, 모델이 추론한 성격, 확인되지 않은 민감한 정보가 자동으로 장기 기억에 들어가서는 안 된다.
각 기억에는 출처, 신뢰도, 시간, 만료 규칙이 포함된다. 사용자가 나중에 명확하게 정정하면 새 사실로 덮어쓰거나 충돌을 표시해야 한다. 모델이 임의로 버전을 선택하게 해서는 안 된다.
관계 상태를 호감도 하나로만 표현할 수는 없다
캐릭터는 플레이어를 좋아하면서도 그가 비밀을 지킬 것이라고는 믿지 않을 수 있다. 능력은 존중하면서도 그의 방식을 두려워할 수 있다. 최소한 신뢰, 친밀감, 경계심, 빚처럼 스토리와 관련된 차원을 구분해야 한다. 차원은 너무 많지 않아야 하며, 각 항목의 기록과 읽기 방식을 명확히 정해야 한다.
상태 변화에는 이유도 있어야 한다. trust +1은 약속 이행이나 증거 제공과 연결되어야 하며, 모델이 친근한 대사 한 줄을 생성했다는 이유로 발생해서는 안 된다. 그래야 팀이 디버깅할 수 있고 사용자도 결과를 이해할 수 있다.
스토리 노드는 기억을 어떻게 읽는가
기억 자체가 이야기를 만드는 것은 아니다. 노드의 조건이 이야기를 만든다. 플레이어가 자신을 구해 준 일을 기억하는 캐릭터는 위기 상황에서 도움을 제공할 수 있다. 플레이어가 비밀을 누설한 일을 기억한다면 단서 공유를 거부할 수 있다. 기억을 읽을 때는 현재 사건과 입장도 확인해, 오래된 기억 하나가 모든 장면을 영구히 좌우하지 않도록 해야 한다.
충돌하는 기억과 망각
서로 다른 캐릭터는 같은 사건에 대해 서로 다른 기억을 가질 수 있다. 시스템은 기억을 통일하려고 서사적 충돌을 지워서는 안 된다. 같은 캐릭터의 기억도 희미해질 수 있지만, 핵심 약속과 스토리의 사실은 확실히 보존해야 한다. 망각은 제품 규칙으로 제어해야 하며, 맥락 창에서 우연히 정보가 사라지는 데 의존해서는 안 된다.
사용자 제어와 개인정보 보호
사용자는 시스템이 무엇을 기억하는지 확인하고, 오류를 수정하고, 저장을 원하지 않는 내용을 삭제할 수 있어야 한다. 또한 삭제가 스토리 상태에 영향을 주는지도 알아야 한다. 대화 로그, 장기 기억, 스토리 상태의 보존 기간은 서로 다를 수 있으므로 인터페이스에서 각각 설명해야 한다.
민감한 데이터는 명확한 기능을 수행하는 데 필요한 범위 안에서만 처리한다. 기억이 많다고 관계가 더 진실해지는 것은 아니다. 잘못 기억하면서 확신하는 태도는 오히려 신뢰를 더 크게 해친다.
기억을 갖춘 캐릭터를 어떻게 테스트하는가
즉시 재진술, 세션 간 회상, 정정, 삭제, 충돌하는 사실, 만료, 스토리에서의 기억 읽기를 테스트한다. 잘못된 후보 기억도 주입해 검증기가 저장하지 않는지 확인한다. 모델 서비스를 끄고 핵심 스토리가 여전히 올바르게 작동하는지도 확인한다.
최종 검수 기준은 캐릭터가 과거의 세부 사항을 얼마나 많이 말할 수 있는지가 아니다. 기억해야 할 내용만 기억하고, 적절한 시점에 행동에 영향을 주며, 사용자가 이해할 수 있는 제어권을 갖도록 하는지가 기준이다.
기억을 기록하는 전체 예시
플레이어가 3장에서 동료의 비밀을 공개하기를 거부한다. 시스템은 원본 대화 전체를 저장하는 대신 구조화된 사건을 기록해야 한다. 대상, ‘비밀 보호’라는 행동, 발생한 장, 동료가 알고 있는지 여부, 신뢰도, 만료 조건을 기록한다. 나중에 동료가 이 사실을 알게 되면 친밀감이 아니라 신뢰가 높아질 수 있다. 아무도 모른다면 관계가 아무 이유 없이 바뀌어서는 안 된다.
기억을 삭제하거나 정정할 때는 요약, 벡터 인덱스, 관계 상태, 캐시도 함께 처리해야 한다. 인터페이스에는 삭제되었다고 나오는데 캐릭터가 여전히 대사에서 언급하는 일을 방지하기 위해서다. 테스터는 시스템이 기억하는 정보의 큰 범주를 확인하고, 장기 기억을 끄고, 새 세션에서 철회된 내용을 계속 불러오지 않는지 검증할 수 있어야 한다.
출시 후 모니터링은 적중률만 집계하기보다 잘못된 회상, 과도한 반복, 민감한 정보의 잔존, 캐릭터 간 정보 혼선을 살펴야 한다. 정보 하나를 올바르게 잊는 일이 열 번의 정확한 재진술보다 신뢰를 더 잘 쌓을 수 있다.


