NPC는 스크립트 외 질문에 어떻게 답변해야 하는가?
플레이어가 대화 스크립트에서 다루지 않은 내용을 NPC에게 물어볼 때는, 캐릭터가 알고 있는 범위와 더 이상 답변할 수 없는 이유에 부합하는 짧은 답변을 제공하세요. 먼저 해당 정보가 알 수 없는 것인지, 알고 있지만 숨겨진 것인지, 아니면 의도적으로 허용되지 않은 것인지 판단해야 합니다. 그런 다음 캐릭터의 성격에 맞게 답변하세요. 시스템의 한계를 설명해야 한다면 별도의 선택적 시스템 안내를 추가하면 됩니다. 이렇게 하면 근거 없는 추측이 스토리의 공식 설정이 되어버리는 일 없이, 플레이어가 한계를 자연스럽게 이해할 수 있습니다.
누락된 대사뿐만 아니라 질문 자체를 먼저 분류하세요
‘스크립트 외(Out of script)’라는 말은 작성상의 공백만을 의미할 뿐, 캐릭터가 무엇을 알고 있는지는 알려주지 않습니다. 지원되지 않는 모든 질문을 동일한 유형의 실패로 취급하면 혼란스러운 답변이 나옵니다. NPC가 전혀 들어본 적 없는 일에 대해 말을 돌리는 것처럼 들리거나, 게임에서 숨기려 했던 비밀을 실수로 누설해 버릴 수도 있습니다.
다음의 세 가지 범주를 사용하세요:
**알 수 없음(Unknown):** 캐릭터에게 신뢰할 만한 정보가 없습니다. 대상을 아예 모르거나, 대상의 존재는 알지만 구체적인 질문에 대한 답은 모를 수 있습니다.
**알고 있지만 숨김(Known but hidden):** 캐릭터가 관련 정보를 알고 있지만, 스토리 조건, 인간관계, 개인적 선택, 명시적인 비밀 등으로 인해 지금은 공유할 수 없습니다. ‘숨김’은 스토리 상태일 뿐이며, 모든 거절이 단서를 숨기고 있다는 인상을 주라는 의미는 아닙니다.
**허용되지 않은 지식(Disallowed knowledge):** 답변이 캐릭터의 정립된 세계, 역할, 또는 허용된 지식 범위를 벗어납니다. 예를 들어 중세의 나룻배 사공이 갑자기 현실 세계의 소프트웨어 배포에 관해 설명해서는 안 됩니다. 이는 지역 비밀을 알고 있지만 말하지 않는 캐릭터와는 명백히 다릅니다.
이 범주들은 디자인을 돕기 위한 보조 수단이며, 인용된 대화 연구에서 검증된 분류 체계는 아닙니다. 이들의 가치는 실용성에 있습니다. 각 범주는 서로 다른 진실된 반응을 가리킵니다. 게임에서 마법, 감시, 특이한 역할 등을 통해 캐릭터에게 의도적으로 정보를 부여하는 경우, 응답 생성기가 추측하도록 예외로 두지 말고 캐릭터의 허용된 지식에 이를 명시적으로 인코딩하세요.
진실된 정보로부터 자연스러운 답변을 구축하세요
유용한 폴백(fallback)은 대개 세 부분으로 구성됩니다. 화제를 인지하고, 캐릭터의 실제 한계를 말하며, 존재할 경우 관련 있는 다음 단계를 제시하는 것입니다. 다음 단계는 게임에 이미 존재하는 인물, 장소, 행동일 수 있습니다. 해당하는 것이 없다면 한계를 밝힌 후 멈추세요. 그저 대사가 도움이 되는 것처럼 보이게 하려고 억지로 단서를 지어내지 마세요.
예를 들어 플레이어가 마을 빵집 주인에게 “북쪽 고개 너머에는 무엇이 있나요?”라고 묻는다고 가정해 봅시다. 빵집 주인이 그곳에 가본 적이 없다면, 현실적인 답변은 다음과 같을 수 있습니다. “그렇게 멀리 북쪽으로는 가본 적이 없어요. 우리 밀가루는 남쪽 계곡에서 오거든요.” 이 답변은 캐릭터성을 유지하면서 한계를 밝히고, 빵집 주인의 경험 내에 있는 내용으로 자연스럽게 돌아옵니다. 밀가루에 대한 언급은 예시일 뿐 단서가 아닙니다. 실제 출시 게임에서는 캐릭터와 배경 설정에서 이미 뒷받침된 디테일을 활용하세요.
빵집 주인이 알고 있지만 정보를 숨기고 있는 경우, 모른다고 둘러대기보다는 해당 상태를 반영하는 답변을 해야 합니다. “그 길 말씀이군요. 하지만 누가 그곳을 드나드는지는 발설하지 않기로 약속했어요.” 이 대사는 숨겨진 답변을 제공하지 않으면서도 경계를 명확히 알립니다. 캐릭터의 지식과 침묵하는 이유가 게임 상태 내에서 실제로 존재할 때만 이러한 거절 방식을 사용하세요.
질문이 캐릭터의 세계관이나 역할을 벗어난 내용을 묻는 것이라면, 이를 음모나 퀘스트인 척 포장하지 말고 한계를 명확히 드러내세요. “’클라우드 서버’가 뭔지 모릅니다. 무슨 기상 관측소 같은 건가요?” 구체적인 어조는 설정과 분위기에 따라 달라집니다. 언어 모델의 일반 지식이 마치 캐릭터의 실제 경험이나 세계관 지식인 것처럼 캐릭터의 목소리로 새어 나오지 않도록 주의하세요.
관련 연구들은 일반적인 디자인 문제를 뒷받침할 뿐, 게임에 대한 보장된 해결책을 제시하는 것은 아닙니다. Shrivastava 등의 2021년 ACL 단문 논문은 규칙과 합성 질문-답변 쌍으로 미세 조정된 트랜스포머를 사용하여 대화 시스템에서 답변 불가능한 쿼리에 대한 문맥적 폴백 응답을 설명하지만, 내러티브 게임의 NPC를 대상으로 하지는 않습니다. [논문 읽기](https://aclanthology.org/2021.acl-short.13/). Sadeq 등의 2024년 EMNLP Findings 논문은 가상 캐릭터 롤플레잉을 연구하여 2,000개 이상의 캐릭터와 18,000개의 적대적 질문을 포함한 72,000건의 인터뷰 데이터셋을 소개하고, 환각을 줄이기 위한 RoleFact를 제안합니다. 이는 캐릭터 지식 경계와 관련이 있지만, 특정 폴백 패턴이 출시 게임에서 효과적이라는 점을 입증하는 것은 아닙니다. [논문 읽기](https://aclanthology.org/2024.findings-emnlp.846/).
캐릭터의 답변과 시스템 설명을 분리하세요
인터페이스가 상황을 설명하는 동안 캐릭터는 세계관 내부의 입장에서 답변할 수 있습니다. 이러한 분리는 플레이어가 폴백 대사를 의도된 공식 대사로 오인할 위험이 있거나, 자유 형식 질문에 한계가 있음을 게임 차원에서 명확히 해야 할 때 유용합니다.
예시:
**NPC:** “그런 곳은 들어본 적이 없소. 낡은 풍차에 대해 물어보시오.”
**선택적 인터페이스 안내:** “이 캐릭터는 해당 질문에 대한 답변을 가지고 있지 않습니다.”
인터페이스 안내는 상호작용 자체를 설명해야 하며, 캐릭터의 말을 무시하거나 숨겨진 콘텐츠가 있다는 힌트를 주어서는 안 됩니다. 가능한 한 선택 사항으로 두거나 눈에 띄지 않게 유지하세요. 반복적인 시스템 메시지는 장면의 몰입을 방해할 수 있습니다. 플레이어의 질문이 이해되었으나 지원 범위를 벗어난 상호작용이라면, 이를 솔직하게 알리세요. 시스템이 질문 자체를 이해하지 못한 것이라면, 그 실패를 캐릭터의 지식 부족인 것처럼 표현해서는 안 됩니다. 둘은 서로 다른 상황이며 각기 다른 문구가 필요할 수 있습니다.
실용적인 응답 규칙은 다음과 같습니다. 스토리의 진실을 전달할 때는 캐릭터의 목소리를 사용하고, 상호작용의 한계를 나타낼 때는 인터페이스를 사용하세요. 캐릭터가 알 수 없는 기술적 설명을 캐릭터의 대사에 담지 마세요. 반대로, 짧고 진실된 캐릭터 응답을 할 수 있는 상황에서 기계적인 시스템 메시지만을 던지지 마세요.
경계 매트릭스로 지식과 스토리 상태를 테스트하세요
단 하나의 예시만으로는 폴백이 스토리 상태를 제대로 존중하는지 알 수 없습니다. 중요한 NPC나 지식 소스마다 작은 테스트 매트릭스를 구축하세요. 모든 행에 예상 답변 범주, 필수 사실, 금지된 사실, 그리고 인터페이스 설명 표시 여부를 기록하세요. 그런 다음 조건이 변경된 상태에서 동일한 질문을 테스트해 봅니다.
**NPC가 해당 대상에 대한 정보가 없음:** 답변에서 친숙함을 주장하거나 구체적인 내용을 제공하지 않음. 캐릭터의 목소리로 불확실함이나 경험 부족을 밝힘
**NPC가 대상은 알지만 요청된 세부 사항은 모름:** 일반적인 지식이 구체적인 답변으로 둔갑하지 않음. 아는 바를 밝힌 뒤 구체적인 지식의 공백을 언급함
**NPC가 답을 알고 있으며 이를 공유할 수 있음:** 답변이 현재 스토리 팩트와 일치함. 질문의 표현이 특이하다는 이유만으로 폴백 대사를 내보내지 않고, 뒷받침된 답변을 제공함
**NPC가 답을 알고 있지만 비밀 유지 조건이 활성화됨:** 비밀이 공개되지 않으며, 의도된 연기가 아닌 한 캐릭터가 모른다고 거짓말하지 않음. 캐릭터 설정과 일관되게 거절하거나, 화제를 돌리거나, 경계를 밝힘
**비밀 유지 조건이 비활성화됨:** 스토리 상태가 공개를 허용할 때 응답이 변경됨. 플레이어가 다시 묻거나 게임이 다른 방식으로 밝혀낼 경우 새로 공개 가능한 정보를 제공함
**질문이 캐릭터의 세계관이나 역할을 벗어남:** 현실 세계 지식이나 무관한 모델 지식이 사실로서 게임 내 설정에 들어가지 않음. 억지로 게임 내 설정을 지어내지 않고 익숙하지 않거나 무관한 범주로 표시함
**대화 시스템이 질문을 해석할 수 없음:** 파싱 실패를 NPC의 무지로 혼동하지 않음. 명확한 상호작용 수준의 폴백을 사용하며, 선택적으로 지원되는 프롬프트를 함께 제시함
**동일한 질문이 여러 방식으로 표현됨:** 지식 및 비밀 유지 규칙이 암기된 특정 문구 하나에 의존하지 않음. 자연스러운 표현의 변화를 허용하면서도 동일한 사실적 경계를 유지함
이 매트릭스는 위의 구분에서 파생된 편집 및 QA 방법이며, 인용된 논문에서 보고된 실험은 아닙니다. 여러분의 캐릭터 팩트와 실제 상태 조건으로 이를 채워 넣으세요. 그럴듯하지만 근거 없는 설정을 지어내어 패턴을 완성하도록 시스템을 유혹하는 질문과, NPC가 마땅히 답해야 할 일반적인 질문을 모두 포함하세요. 허위 사실 유출을 방지하는 것만큼이나, 답이 존재할 때 불필요하게 거절하지 않는 것도 중요하므로 양쪽 모두를 검증해야 합니다.
작법 및 구현 단계에서 경계를 테스트 가능하게 만드세요
캐릭터의 지식을 세계관의 절대적 진실과 분리하세요. 간결한 캐릭터 레코드를 통해 아는 사실, 의심하는 사실, 모르는 사실, 조건이 변경될 때까지 발설해서는 안 되는 사실을 표시할 수 있습니다. 오해를 하는 캐릭터를 허용하는 게임이라면 불확실한 믿음에 대한 출처나 확신도 함께 포함하세요. 단순한 의심은 전지적인 사실이 아니라 의심처럼 들려야 합니다. 응답 레이어는 관련된 상태를 전달받아야 하며 해당 상태에서 허용된 사실만을 사용해야 합니다.
각 폴백 대사나 생성된 응답에 대해 다음을 질문해 보세요:
캐릭터가 알아서는 안 되는 사실을 말하거나 암시하고 있는가?
‘모른다’는 말과 ‘말해줄 수 없다’는 말을 혼동하고 있는가?
누락된 답변을 본의 아니게 비밀이나 퀘스트 복선처럼 들리게 만들고 있는가?
제안된 다음 단계가 게임 내에 실제로 존재하며 이 상황에 부합하는가?
질문이 상호작용 시스템에서 지원되지 않는 경우, 플레이어가 이를 스토리 대사로 착각하지 않고 인터페이스를 통해 인지할 수 있는가?
대사가 이러한 검사 중 하나라도 통과하지 못하면 범위를 좁히세요. 뒷받침되지 않은 암시를 제거하고, 실제 한계를 말하며, 이미 확립된 다음 단계만 남겨두세요. 가치를 더하는 진실된 인메타 답변이 없다면, 억지로 지어낸 설정보다는 간결한 거절이나 시스템 안내가 훨씬 낫습니다.
간단한 의사결정 순서
스크립트 외 질문을 검토할 때는 다음 단계를 순서대로 진행하세요:
**게임이 질문을 해석할 수 있는가?** 그렇지 않다면 NPC에게 무지를 전가하기보다는 상호작용 수준의 설명을 사용하세요.
**요청된 정보가 이 캐릭터의 지식 범위 내에 있는가?** 아니라면 캐릭터의 경험이나 역할에 부합하는 캐릭터 내 한계를 명시하세요.
**캐릭터가 이를 알고 있으며, 현재 공개가 허용되어 있는가?** 캐릭터가 알고 있지만 공개할 수 없다면, 그 경계를 캐릭터의 동기 및 상태와 일관되게 만드세요. 의도된 경우가 아니라면 힌트를 통해 답을 흘리지 마세요.
**캐릭터가 뒷받침된 부분적 답변이나 유용한 다음 단계를 제공할 수 있는가?** 게임 내에 이미 확립된 경우에만 포함하세요.
**플레이어가 폴백을 단서나 의도된 플롯의 한 조각으로 오해할 수 있는가?** 그렇다면 시스템 수준에서 상호작용을 명확히 하거나 대사를 수정하세요.
목표는 모든 질문이 만족스러운 세계관 공개로 이어지게 만드는 것이 아닙니다. 답변을 이해하기 쉽게 만들고, 캐릭터의 지식과 일관성을 유지하며, 게임의 스토리 상태를 안전하게 보호하는 것입니다. 잘 설계된 경계는 플레이어에게 이 NPC가 지금 당장 무엇을 답할 수 있는지 알려주면서도 작품의 허구적 세계관을 훼손 없이 온전히 지켜냅니다.
