본문으로 건너뛰기

LLM NPC가 똑같은 말만 반복하는 이유와 해결 방법

LLM 기반 NPC의 대사 반복 문제를 해결하기 위해 노벨티 가드, 감정별 액션 어휘집, 프롬프트 배치 최적화 기법을 활용하여 캐릭터의 생동감을 높이는 방법을 제시한다.

섹션별 상세

01
LLM NPC의 반복 문제는 모델 자체의 결함이라기보다 다음 토큰을 확률적으로 예측하는 특성상 발생하는 시스템적 문제이다. 실험 결과 150턴의 대화 중 특정 행동 묘사가 59%에 달하는 등 모델이 한 번 성공한 패턴에 고착되는 '모드 붕괴(Mode Collapse)' 현상이 확인되었다.
02
노벨티 가드(Novelty Guards)는 설정 파일을 통해 특정 유행어나 행동의 최대 사용 횟수를 정의하고 한도에 도달하면 모델에게 변화를 촉구하는 다양성 프롬프트를 주입하는 방식이다. 이는 비용이 많이 드는 거부 샘플링 대신 모델에게 부드러운 가이드를 제공하여 자연스러운 변화를 유도한다.
json
{
  "novelty_rules": {
    "catchphrase_limits": {
      "let me tell you": 4,
      "my good friend": 5,
      "back in my day": 4
    },
    "action_limits": {
      "takes a swig": 3,
      "takes a long": 4,
      "eyes unfocused": 3
    },
    "variety_prompts": [
      "Note: Vary your approach this turn. Your catchphrases work best when they land occasionally, not constantly.",
      "Note: Show a different facet of your character here.",
      "Note: Find a fresh angle for this moment."
    ]
  }
}

특정 문구와 행동의 사용 횟수를 제한하고 한도 초과 시 다양성을 유도하는 노벨티 가드 설정 예시

03
액션 어휘집(Action Vocabulary)은 캐릭터의 감정 상태에 따라 구체적인 행동 묘사 리스트를 제공하여 모델의 선택지를 넓힌다. 모델이 스스로 일반적인 행동을 발명하게 두는 대신 큐레이팅된 어휘집에서 선택하게 함으로써 묘사의 구체성과 다양성을 동시에 확보한다.
json
{
  "action_vocabulary": {
    "drunk": [
      "(sloshing whiskey onto the carpet, not noticing)",
      "(gripping the armrest to steady himself)",
      "(squinting as if the room is too bright)",
      "(fumbling with his glass, nearly dropping it)"
    ],
    "defensive": [
      "(straightening his tie with trembling fingers)",
      "(stepping back, bumping into the sideboard)",
      "(glancing toward the door)"
    ]
  }
}

캐릭터의 감정 상태에 따라 선택할 수 있는 구체적인 행동 묘사 어휘집 구성

04
프롬프트 내 제약 사항의 위치가 성능에 큰 영향을 미치며 LLM은 프롬프트의 중간보다 끝부분에 더 집중하는 최신성 편향(Recency Bias)을 보인다. 반복 금지와 같은 핵심 규칙을 시스템 프롬프트의 마지막에 배치하는 것만으로도 별도의 코드 수정 없이 반복률을 20-30% 줄일 수 있다.
05
75턴 이상의 장기 테스트 결과 반복률을 0%로 만드는 것보다 8-15% 수준으로 유지하는 것이 캐릭터의 개성을 살리는 데 가장 효과적이다. 하인 캐릭터가 특정 문구를 적절히 사용하는 것은 버그가 아니라 캐릭터의 정체성을 형성하는 핵심 요소이기 때문이다.

용어 해설

모드 붕괴(Mode Collapse)
생성 모델이 데이터의 전체 분포를 학습하지 못하고 특정 몇 가지 패턴(모드)에만 출력이 집중되는 현상이다. LLM NPC의 경우 특정 문구나 행동을 무한 반복하는 양상으로 나타나며 캐릭터의 생동감을 저해하는 주요 원인이 된다.
최신성 편향(Recency Bias)
대형 언어 모델이 입력된 프롬프트의 내용 중 가장 마지막에 위치한 정보를 더 잘 기억하고 중요하게 처리하는 경향이다. 긴 컨텍스트를 처리할 때 중간에 위치한 지시사항보다 끝부분의 명령이 모델의 출력에 더 큰 영향을 미친다.
거부 샘플링(Rejection Sampling)
모델이 생성한 결과물이 사전에 정의한 특정 기준이나 제약 조건을 만족하지 못할 경우, 해당 결과를 버리고 다시 생성하는 기법이다. 결과의 품질은 보장할 수 있으나 추론 비용과 지연 시간이 증가하는 단점이 있다.
다양성 페널티(Diversity Penalty)
텍스트 생성 과정에서 이미 등장했던 토큰이나 문구가 다시 선택될 확률을 강제로 낮추는 기법이다. 모델이 동일한 표현을 반복하는 것을 방지하고 더 창의적이고 다양한 어휘를 사용하도록 유도한다.

기술

  • LLM
  • JSON
  • Python

활용 사례

  • 오픈월드 게임의 NPC 대화 시스템
  • 인터랙티브 스토리텔링 에이전트
  • 장기 세션 유지가 필요한 AI 챗봇
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 02. 25.수집 2026. 02. 25.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.