
버추얼 컴패니언의 인격 프롬프트가 붕괴되지 않도록 하기 위한 구현 메모
요약
버추얼 컴패니언의 인격 유지를 위해 시스템 프롬프트를 역할별로 분리하고 우선순위를 설정하는 구현 방법을 제안합니다. 긴 대화에서도 캐릭터의 말투와 규칙이 무너지지 않도록 프롬프트 구조화와 문맥 관리 전략을 다룹니다.
핵심 포인트
- 시스템 프롬프트를 인격, 안전, 사용자 설정 등으로 분리하여 관리
- 안전 규칙과 기본 인격을 상위 우선순위로 두는 빌더 구조 설계
- 장기 대화 시 전체 이력 대신 요약된 문맥을 활용하여 안정성 확보
- 정형화된 평가 케이스를 통한 인격 유지 여부의 지속적 검증
버추얼 컴패니언(Virtual Companion)의 대화 품질은 LLM의 성능만으로는 안정되지 않습니다. 특히 긴 대화에서는 인격 설정, 금지 사항, 사용자 설정, 최근의 문맥이 섞이기 쉬워 캐릭터의 말투나 거리감이 조금씩 무너집니다.
이 기사에서는 AI 여자친구와 같은 대화 경험을 설계할 때, 인격 프롬프트(Personality Prompt)가 붕괴되지 않도록 하기 위한 구현 메모를 정리합니다.
가장 먼저 피해야 할 것은 인격, 세계관, 안전 규칙, 사용자 설정, 대화 이력을 하나의 거대한 시스템 프롬프트(System Prompt)에 모두 집어넣는 것입니다. 이렇게 하면 변경 사항을 파악하기 어려워지고, 어떤 규칙이 응답에 영향을 미치고 있는지 검증하기 까다로워집니다.
역할별로 나누면 관리가 쉬워집니다.
base_persona: 캐릭터의 기본적인 말투와 가치관
safety_rules: 출력해서는 안 되는 내용과 거절 방법
user_profile: 사용자가 명시적으로 설정한 취향
...
인격 프롬프트가 무너지는 원인 중 하나는 사용자의 발화나 단기 메모리(Short-term Memory)가 상위 규칙을 덮어써 버리는 것입니다. 애플리케이션 측에서는 최소한 다음과 같은 우선순위를 고정해 두어야 합니다.
- 안전 규칙 (Safety Rules)
- 서비스로서의 투명성 (Transparency)
- 캐릭터의 기본 인격 (Base Persona)
- 사용자 설정 (User Settings)
- 최근의 대화 문맥 (Recent Conversation Context)
이 순서를 코드상의 빌더(Builder)에 반영해 두면, 나중에 기능을 추가하더라도 '유용한 메모리'가 '지켜야 할 경계'를 파괴하기 어려워집니다.
장기 대화에서는 이력을 모두 넣기보다, 용도에 따라 요약한 문맥을 사용하는 것이 더 안정적입니다.
type CompanionPromptContext = {
persona: string;
safetyRules: string[];
...
포인트는 기억을 늘리는 것이 아니라, 응답에 필요한 정보만을 전달하는 것입니다. 저장 기간, 삭제 동선, 사용자가 편집할 수 있는 범위도 프로덕트 요구사항(Product Requirements)으로 다룹니다.
인격의 안정성은 주관만으로 판단하지 않는 것이 안전합니다. 정형화된 평가 케이스를 만들어 말투, 투명성, 안전한 거절 방법, 과도한 동조 여부를 지속적으로 확인합니다.
인격 프롬프트는 단순한 문장이 아니라 프로덕트 사양의 일부입니다. 분할, 우선순위, 단기 문맥, 평가 케이스를 갖춤으로써 대화의 자연스러움과 안전성을 동시에 개선하기 쉬워집니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기