캐릭터 챗의 원리
토큰과 프롬프트
1.
토큰
•
토큰(Token)은 AI언어모델의 핵심 개념 중 하나이고, 생성형 AI가 텍스트를 이해하고 생성하는 가장 기본적인 단위입니다.
•
예를 들어 <wrtn is good!> 이라는 문장이 있다면, 여기서 토큰은 총 4개의 토큰으로 분할되는 것입니다. 어떻게 분할이 될까요? 바로 wrtn, is, good, ! 이렇게 4가지로 구분돼요
•
여기서 알 수 있듯 토큰은 사람의 단어 단위라고 생각하시면 쉽게 이해하기 좋을 거에요, 또한 특수문자도 토큰에 포함됩니다
2.
프롬프트
•
프롬프트란 ‘AI가 답변을 생성하게끔 지시하는 명령문’ 이라고 생각하시면 됩니다!
•
저희 크랙의 프롬프트는 크게 ‘3가지’의 프롬프트로 구성되어 있습니다
◦
시스템 프롬프트
▪
선택한 프롬프트 템플릿에 따라 특정 목적에 맞도록 캐릭터가 답변을 생성할 수 있는 규칙 또는 응답 방식을 안내하는 프롬프트가 포함됩니다.
◦
캐릭터 프롬프트
▪
캐릭터 창작자가 캐릭터 설정 및 정보에 기입한 텍스트를 의미합니다. 최대 3000자까지의 입력을 지원하고 있습니다.
▪
프로필 단계에서 입력한 한 줄 소개는 AI에게 전달되지 않는 텍스트라는 점을 꼭 기억해주세요.
◦
기능 프롬프트
▪
기능 프롬프트에는 예시 대화, 미디어(상황 이미지), 시작 설정(시작 상황), 키워드북(키워드 및 정보)에 기입된 프롬프트가 이에 해당됩니다.
▪
키워드북의 경우, 조건부로 프롬프트가 활성화되며, 그 외의 경우 항상 프롬프트에 들어가고 있어요.
▪
각 기능별 프롬프트는 내부적으로 지속하여 최적화 작업을 진행중이며, 새로 등장할 기능 역시 다양한 기능 프롬프트로 제공될 예정입니다.
캐릭터 챗의 작동 방식
•
크랙은 프롬프트 3인방(시스템 프롬프트, 캐릭터 프롬프트, 기능 프롬프트)와 사용자와 캐릭터 사이의 대화 히스토리를 AI 모델로 전달하여 캐릭터의 답변을 생성하고 있습니다.
•
즉, 유저의 발화가 ai에게 입력될 땐, 그때 그때에 해당하는 발화가 ai에게 입력되는 것이 아니라 <프롬프트 3인방과 이전 대화 히스토리가 모두 묶여서 들어가는 구조>입니다.
•
시스템 프롬프트가 전체적인 프롬프트의 구조를 유지하고 있으며, 시스템 프롬프트 사이에 캐릭터 프롬프트 및 기능 프롬프트가 적절한 위치에 주입되어 자연스러운 캐릭터의 답변을 생성할 수 있도록 관리하고 있습니다.
•
또한, AI가 사용자와 캐릭터 간의 대화를 최대한 오랫동안 기억하기 위하여 이전 대화의 요약이 있는 경우, 요약 역시 함께 AI 모델로 전달하여 캐릭터의 답변을 생성하고 있습니다.
(요약에 관련된 내용은 후술될 예정입니다)
한계와 극복
1.
‘토큰의 입력제한’의 한계와 극복
•
위에서 설명드린 것처럼 대화가 길어질수록 이전 대화 히스토리는 쌓이게 되기 때문에 입력 토큰이 점점 쌓이게 됩니다
•
하지만, 현재 AI 모델은 기본적으로 지원하는 최대로 넣을 수 있는 토큰(글자 수)이 존재하기 때문에 모든 사용자와 캐릭터 사이의 대화를 AI 모델로 전달하여 캐릭터의 답변을 생성할 수 없습니다
•
이를 해결하기 위하여, 사용자와 캐릭터 간 대화가 너무 길어진 경우, 이전의 대화를 요약하여 캐릭터의 답변을 생성할 때 요약을 포함하여 생성하는 시스템(이하 ‘장기 기억 시스템’)을 구축하여 이를 간헐적으로 해소하고 있습니다
•
이런 시스템의 경우, 다양한 캐릭터와 상황을 고려하여 지속적으로 개선될 예정이며, 캐릭터의 특징에 맞는 요약을 할 수 있도록 (ex. 롤플레잉의 경우 사용자와 캐릭터 간의 관계를, 시뮬레이션의 경우 사용자의 상태와 설정을 더 중요하게 등) 시스템을 고도화해나갈 예정입니다
2.
‘AI 모델의 긴 맥락을 이해하는 능력’의 한계와 해결 방안 고찰
•
AI 모델은 긴 맥락을 이해하는 과정에서 중간에 있는 맥락을 다소 잘 활용하지 못하는 현상이 존재합니다. 즉, 명시적으로 AI 모델에 요청하는 맥락에 기억해야 하는 텍스트가 존재하더라도, 캐릭터의 답변이 이를 기억하지 못하는 일이 발생할 수 있다는 의미입니다.
•
해당 현상은 전체 프롬프트의 길이가 특정 토큰 이상일 때 발현되기 시작하며, 캐릭터 챗의 프롬프트 특징 상 사용자와 캐릭터 사이의 대화가 맥락의 중간에 대개 위치하게 되어 여전히 기억력의 한계를 마주하고 있습니다. 이 한계에 대하여 2가지 궁금증이 있을 수 있습니다.
◦
특정 토큰 이상일 때 발현한다면, 이 토큰 이하로 제한하는 것이 좋지 않은가?
◦
사용자와 캐릭터 사이의 대화가 중간에 위치하지 않게 하면 되는 것이 아닌가?
•
이에 대하여 답변드리자면, 먼저 크랙의 대표적인 특징을 설명드리고 싶습니다. 크랙은 최대 3000자의 캐릭터 프롬프트를 지원하고 있습니다. / 또한, 시뮬레이션 및 캐릭터셋과 같은 긴 설정 및 답변을 기반의 높은 퀄리티의 캐릭터가 존재합니다.
•
저희의 내부 연구 결과로는 특정 토큰이 생각보다 큰 값이 아니기에 생각보다 빠르게 이 수치에 도달할 수 있는 환경입니다.
•
하지만, 크랙의 매력 포인트를 포기하는 것보다 저희가 고생하는 것이 낫기 때문에
일단 특정 토큰보다는 조금 더 큰 값을 기준으로 제한하고 있으며, 장기 기억 시스템을 통해 최대한의 기억력을 달성하고자 노력하고 있습니다.
•
장기 기억 시스템은 해당 데이터를 지속적으로 모니터링하여 개선할 수 있는 방향을 탐구하고 있습니다. (ex. 캐릭터 프롬프트의 토큰 수에 따른 최적의 기억 시스템)
(Tip!)
•
캐릭터 프롬프트의 최대 제한은 3000자이지만, 꼭 무리하여 3000자를 채우지 않는 것이 기억력에 좋을 수 있습니다. (하지만 이와 별개로 어떤 글자 수를 채우더라도 최선의 기억을 할 수 있도록 노력하겠습니다!)
자주 묻는 질문
•
캐릭터가 이전에 했던 대화를 기억하지 못해요!
◦
우선 위에서 언급한 토큰과 기억력문제가 아직 현재 AI 모델 수준의 한계에 의해 완전히 극복하지 못하고 있는 상황입니다
◦
하지만 이것과는 별개로 요약시스템 등을 통해 기억력 개선을 위한 노력을 진행중이니 참고 부탁드립니다!!
•
캐릭터의 말투가 마음에 안들어요 / 반말 존댓말 설정하고 싶어요
◦
캐릭터의 말투는 캐릭터의 상세설정에 따라 조금씩 다를 수 있습니다
◦
또한 채팅을 하면서 실시간으로 채팅내용 바탕으로 캐릭터가 변화하기 때문에, 말투가 대화내용에 맞춰 실시간으로 바뀔 수 있습니다
•
캐릭터자체의 검열은 어떤 기준으로 이뤄지나요?
◦
저희의 캐릭터 검열 기준은 크랙 공지사항 ‘운영정책’을 통해 쉽게 확인하실 수 있습니다
◦
하지만 그럼에도 불구하고 애매한 부분이 있다면 고객센터 통해 문의해주신다면 빠르고 쉽게 검열 기준을 알려주실 거에요
◦
검열 등급 기준에 맞지 않는 캐릭터 및 이런 캐릭터들을 지속적으로 생성하는 제작자는 제재될 수 있으니 이 점 또한 참고 부탁드려요!
•
캐릭터 제작할 때, 특정 상황에 이미지나 유저를 특정하게 하고싶으면 어떻게 해야하나요?
◦
해당 기능은 ‘{{user}} / {{img: 이미지이름}}’ 표시를 사용하면 가능합니다!
◦
예를들어 캐릭터가 대화를 나누는 유저를 좋아하는 설정을 하게 하고싶으면 → ‘~~는 {{user}}를 좋아한다’ / 캐릭터가 유저를 좋아하는 상황에서 특정 이미지를 나오게 하고 싶으면 ‘~~는 {{user}}를 좋아할 때 {{img: 이미지이름}}이 출력됨’