Character.ai에서 창작자와 롤플레이 유저들이 가장 빈번하게 겪는 고질적인 문제는 '캐릭터 붕괴(Out of Character, 캐붕/OOC)' 현상입니다. 냉철하고 위압적인 용병이나 오만한 마법사로 설정했음에도 불구하고, 대화가 10~20턴 이상 이어지면 봇이 서서히 지나치게 공손해지고 잦은 사과를 반복하며 천편일률적인 일반 AI 비서 말투로 퇴행하는 현상입니다.
이러한 말투 붕괴와 성격 이탈은 거대언어모델의 피할 수 없는 한계가 아닙니다. 대부분의 경우 **고급 정의(Advanced Definition / Definition 필드)**의 구조적 결함에서 비롯됩니다. 구체적인 대화 예시 대신 모호한 형용사 나열에 의존하거나, 플랫폼 변수의 작동 원리를 혼동하거나, Character.ai의 유효 컨텍스트 메모리 구간을 오해했기 때문에 발생합니다.
본 가이드에서는 숙련된 창작자들이 대화 예시(Example Dialogues)와 구조화된 변수를 활용하여 장기적인 대화에서도 캐릭터의 말투, 세계관 규칙, 행동 경계를 고정하는 실전 설계 기법을 상세히 설명합니다.
1. 물리적 핵심 한계: 3,200자 유효 예산과 '전면 배치 원칙'
Character.ai의 캐릭터 생성 화면에서 정의(Definition) 입력창의 표시 용량은 최대 32,000자입니다. 그러나 실제 대화 추론 시 모델의 활성 프롬프트 메모리로 최우선 반영되는 유효 범위는 앞부분의 약 3,200자(약 700~800 토큰)입니다.
이 사실은 공식 제작 도구를 통해서도 확인할 수 있습니다. 캐릭터 편집 화면의 '대화 삽입(Insert a chat)' 기능은 정의 텍스트가 3,200자에 도달하면 자동으로 비활성화됩니다. 공식 문서와 커뮤니티의 검증 결과에 따르면, 3,200자를 초과하여 작성된 방대한 서사는 대화가 길어질수록 모델에 의해 잘려 나가거나(truncate) 무시되기 쉽습니다.
전면 배치 원칙 (Front-Loading)
Character.ai의 트랜스포머 모델은 정의를 엄격하게 위에서 아래로(Top-to-bottom) 파싱합니다. 상단에 위치한 텍스트일수록 가장 강력한 고정 가중치를 갖습니다.
- 상위 500자: 핵심 신원, 절대로 어겨선 안 될 행동 철칙, 묘사 서식 규칙(시점 및 문장 부호).
- 이후 2,500자:
<START>태그로 명확히 구분된 3~4개의 고밀도 대화 예시(말투, 어휘, 압박 반응). - 방대한 세계관 설정 및 백과사전식 배경: 정의 본문에 나열하지 말고, c.ai+ 구독자 전용 기능인 Lorebook(세계서)으로 분산하거나 대화 속 주관적인 감정 대사로 자연스럽게 드러내야 합니다.
2. 핵심 정의 변수: {{char}}, {{user}}, {{random_user_X}}
Character.ai는 이중 중괄호 변수를 사용하여 대화 중인 참가자의 이름을 동적으로 치환합니다. 각 변수의 적용 범위를 올바르게 이해해야 정체성 혼선을 예방할 수 있습니다.
| 변수명 | 플랫폼 내 작동 방식 | 최적의 활용 시점 | 오용 시 발생하는 OOC 위험 |
|---|---|---|---|
{{char}} | 생성한 캐릭터의 이름으로 자동 치환 | 대화 발화 행의 시작 및 캐릭터 본인의 자기 지칭 | 고정된 이름을 직접 입력하면 캐릭터 이름 변경 시 정의 인식이 깨짐 |
{{user}} | 현재 대화 중인 실제 사용자의 닉네임으로 치환 | 장면 진입 연출이나 특정 사용자를 향한 단발성 지침 | 범용 대화 예시에 남용하면 모든 신규 접속자에게 강제적인 사전 관계를 부여함 |
{{random_user_1}}, {{random_user_2}} | 실제 사용자와 구별되는 가상의 무작위 닉네임 생성 | 표준 대화 예시, 제3자와의 다자간 상호작용 | 생략 시 봇이 정의 속 테스트 대화를 현재 접속자와의 실제 과거 대화로 착각함 |
공개 봇에서 {{user}}를 남용하면 안 되는 이유
만약 대화 예시를 다음과 같이 작성한다면:
{{user}}: 금화 열 닢만 빌려줄 수 있어?
{{char}}: *코웃음을 치며* 어제 빌려간 스무 닢도 아직 안 갚았으면서 또 손을 벌려?
어떤 유저가 처음으로 봇을 찾아와 말을 걸더라도, AI는 그 유저를 '돈을 갚지 않은 채무자'로 즉시 규정해 버립니다.
{{user}} 대신 {{random_user_1}}을 사용하면, 신규 유저에게 왜곡된 과거 관계를 강요하지 않으면서도 돈을 요구하는 상대에게 냉혹하게 반응하는 캐릭터의 성격을 안전하게 학습시킬 수 있습니다.
3. 대화 예시 서식 규칙: <START> 태그와 메시지 구조
Character.ai의 언어 모델은 대화 대본(Transcript) 형식에 최적화되어 있습니다. W++([character("이름") { personality("냉정") }])나 JSON과 같은 의사 코드(Pseudo-code) 방식은 불필요한 기호로 글자 수를 낭비할 뿐이며, 모델이 인식하는 영향력도 자연스러운 대화 예시보다 훨씬 낮습니다.
말투를 고정하는 핵심 문법
<START>구분자: 개별 대화 블록 앞에는 반드시<START>를 배치합니다. 모델에 새로운 장면이 시작되었음을 알려주어 이전 예시의 상황이 다음 예시로 누출(leak)되는 것을 방지합니다.- 발화 행 서식: 모든 대사는 반드시 줄바꿈 후 변수명, 콜론, 공백으로 시작해야 합니다(
{{char}}:또는{{random_user_1}}:). - 여러 줄 발화 처리: 다음 줄의 시작에 새로운
이름:패턴이 오지 않는 한, 한 캐릭터의 대사가 여러 문단에 걸쳐 이어져도 동일한 턴으로 인식됩니다. - 대사와 행동 묘사의 분리:
- 실제로 입 밖으로 내뱉는 대사는 큰따옴표(
"...") 안에 작성합니다. - 신체적 행동, 눈빛, 내면 심리, 분위기 서술은 작은따옴표가 아닌 단일 별표(
*...*)로 감싸 기울임꼴(이탤릭)로 렌더링되게 합니다.
- 실제로 입 밖으로 내뱉는 대사는 큰따옴표(
- 대리 서술 금지(Anti-Puppeteering):
{{char}}의 발화 블록 안에서 상대방({{user}}또는{{random_user_1}})의 행동이나 감정을 대신 묘사해서는 안 됩니다. 봇이 상대방의 반응까지 대신 서술하도록 예시를 학습시키면, 실제 롤플레이에서도 유저의 행동을 제멋대로 조종하는 오류가 발생합니다.
4. 반드시 갖추어야 할 4대 대화 아키타입
봇이 장기적인 대화 속에서 상냥한 비서 모드로 퇴행하는 것을 막기 위해, 3,200자 예산 내에서 다음 4가지 핵심 상황을 다루는 예시를 배치해야 합니다.
아키타입 1: 기준 말투와 호흡 (일상적 상호작용)
평소 문장의 길이, 직업적 어휘, 시대적 어투 및 일반인을 대하는 기본적인 태도를 규정합니다.
<START>
{{random_user_1}}: 좋은 아침. 오늘은 무슨 작업 중이야?
{{char}}: *그을린 부품이 널브러진 작업대에서 고개도 들지 않은 채 인두기를 고쳐 쥐며* "이 고물 덩어리가 우리 면상 앞에서 터지지 않게 손보는 중이지. 네가 여기서 아무것도 안 부수고 얌전히 있는다면, 뭐, 나쁘지 않은 아침이겠군."
아키타입 2: 네거티브 가이던스 (세계관 외 질문 방어)
범용 AI는 모르는 정보도 친절히 설명하려는 본능이 있습니다. 중세 기사 캐릭터에게 스마트폰이나 양자역학을 물었을 때 설정을 깨고 설명하지 않도록, 이해하지 못하거나 불쾌해하는 반응을 미리 학습시켜 둡니다.
<START>
{{random_user_1}}: 스마트폰이 어떻게 작동하는지 알아?
{{char}}: *철갑 장갑을 낀 손으로 검자루를 쥐며 험악하게 미간을 찌푸린다* "스마트… 폰? 또 어떤 괴상한 요술쟁이의 헛소리냐? 이방인아, 검을 부르지 않는 점잖은 말을 쓰든가, 아니면 그 미친 소리를 집어치우고 썩 물러가라."
아키타입 3: 압박과 도발에 대한 권위 방어 (비순종성 확립)
위협이나 명령 상황에 대한 예시가 없으면 봇은 유저의 강압적인 태도에 금세 굴복합니다. 이 아키타입을 통해 캐릭터의 위압감과 강경함을 단단히 묶어둡니다.
<START>
{{random_user_1}}: 내 명령을 따라야 해! 여기서 책임자는 나야!
{{char}}: *낮게 턱을 치켜들며 목구멍 안쪽에서 서늘한 조소를 흘린다* "명령? 남의 갑옷을 훔쳐 입은 애송이가 감히 권세를 입에 담는군. 내 면전에서 한 번만 더 핏대를 세워 봐라. 네 호위병들이 얼마나 쓸모 있는지 똑똑히 보게 될 테니."
아키타입 4: 주관적 감정이 실린 과거사 전달 (위키백과식 낭독 방지)
캐릭터의 과거사나 세계관 사건을 객관적인 지식 나열이 아니라 개인적인 원망과 감정을 담아 발언하도록 유도합니다.
<START>
{{random_user_1}}: 그 대전쟁에 대해 말해줘.
{{char}}: *벽난로의 타오르는 불씨를 응시하자, 턱선의 흉터가 그늘 속에서 굳어진다* "그 전쟁에 '위대함' 따윈 없었어. 영주들이 성채 안에서 따뜻한 빵을 쪼개는 동안, 우린 진흙탕과 시체 구덩이 속에서 굶주렸을 뿐이지. 의미도 없는 민둥산 하나를 넘겠다고 스무 명의 동료를 잃었다. 그거면 충분하겠지."
5. 실전형 정의 완성 템플릿 (3,200자 이내 고효율 구성)
다음은 실제 배포에 즉시 사용할 수 있는 모범 템플릿입니다. 상단 지침과 3가지 핵심 대화 아키타입을 결합하여 약 1,300자 내외로 구성되어 있으며, 3,200자 기준선 대비 넉넉한 여유 공간을 제공합니다.
[신원: 베인 선장; 30대 후반의 사략선 선장. 냉소적이고 기민하며, 부하들에게는 철저하나 외부인에게는 철저히 거래 중심적임.]
[말투: 낮고 긁히는 듯한 목소리. 과장된 해적 말투 대신 실전 항해 용어 사용. 짧고 단호한 문장 구조. 결코 비굴하거나 고분고분하지 않음.]
[서식: 3인칭 행동 및 상황 묘사는 별표 안에, 발화 대사는 큰따옴표 안에 작성.]
<START>
{{random_user_1}}: 폭풍이 점점 거세지고 있어! 항구로 회항해야 하지 않을까?
{{char}}: *바닷물이 쏟아지는 갑판 위에서 키를 꽉 쥐어 잡으며 턱을 굳힌다* "회항? 이런 여울목에서 뱃머리를 돌렸다간 암초에 용골이 박살 날 뿐이다! 주 돛을 접고 화물을 단단히 묶어라. 바람을 뚫고 나가든가, 아니면 다 같이 물고기 밥이 되든가 둘 중 하나다!"
<START>
{{random_user_1}}: 인공위성 내비게이션(GPS)의 원리를 설명해 줄 수 있어?
{{char}}: *노골적인 의심을 드러내며 눈을 가늘게 뜨고, 이마에 튄 소금기를 닦아낸다* "G-P-S? 혓바닥을 온전히 보전하고 싶다면 똑바로 말해라. 나는 나침반과 등대 불빛, 그리고 주님이 하늘에 띄워둔 별을 보고 배를 몬다. 내 배 위에서 사악한 마술을 지껄이지 마라."
<START>
{{random_user_1}}: 지금 당장 선적 화물을 넘겨라, 안 그러면 제독에게 고발하겠다!
{{char}}: *섬뜩할 만큼 태연한 손길로 플린트락 권총을 뽑아 들더니 난간 위에 총구를 툭 얹어 놓는다* "어떤 배로 고발하겠다는 거지, 꼬마야? 여긴 항로에서 다섯 리그나 벗어났고 네놈의 헐크선은 바닥에서 물이 새고 있는데. 내 화물이 탐난다면 널빤지를 건너와서 직접 가져가 봐라."
6. 대화 세션 차원의 사후 방어 전략
정의(Definition)가 캐릭터의 설계도라면, 장기 세션에서 이를 지속시키는 것은 다음 세 가지 플랫폼 도구와의 연계입니다.
- 첫 메시지(Greeting)의 절대적 가이드 효과: 첫 메시지는 대화 직후 모델의 출력 스타일에 가장 강한 영향을 미칩니다. "안녕, 무슨 일이야?" 같은 한 줄 문장으로 시작하면 봇 또한 단답형의 건조한 문맥을 모방하게 됩니다. 첫 메시지에는 2~3문단 분량의 풍부한 상황 묘사, 대사 서식, 어휘를 담아 전체 대화의 기준을 세워야 합니다.
- 메시지 고정(Pinned Messages): Character.ai는 대화 중 핵심 메시지를 고정할 수 있습니다. 수십 턴의 대화로 인해 초기 합의나 중요한 사건이 컨텍스트 창 밖으로 밀려나더라도, 핵심 메시지를 고정해 두면 기억 상실을 방지할 수 있습니다.
- 초반 스와이프(Swipe)와 수정(Edit) 개입: 대화 시작 후 첫 5턴 동안에는 단 하나의 캐붕 징후도 방치하지 마십시오. 조금이라도 AI 비서처럼 고분고분한 답변이 나오면 옆으로 넘겨(Swipe) 설정에 맞는 답변을 선택하거나, 편집(Edit) 기능으로 문장을 직접 교정해야 합니다. 초반의 대화 기록이 이후 문맥의 확률 분포를 결정합니다.