최근에 일정이 바빠지면서 한동안은 앵챗 관련으로 거의 들여다보지를 못했네요. 공모전 당선도 축하해 주셔서 뒤늦게 알았습니다. 매우 기쁩니다. 감사합니다.
오랜만에 약간의 체력과 시간이 남는 김에 거창한 팁까지는 아니고 그동안 제작을 하면서 체감으로나마 익혀놓았던 것들을 풀어보려고 합니다.
말 그대로 저는 체감으로만 챗봇을 제작하고 있고 전문적인 지식은 전혀 없으므로 참고 정도로만 생각 부탁드립니다. 또한 이미 제작을 몇 차례 해보신 분은 이미 알고 있을법한 이야기들 뿐인 것도 양해 부탁드립니다.
정량제, 그 중에서도 케이브덕 기준으로 말씀 드릴 예정입니다.
---
우선 토큰 관련입니다.
저는 한 번 토큰을 줄이는 과정을 티스토리에 러프하게 포스팅한 적이 있는데요. 이것을 주구장창 한 끝에 깨닫게 된 점은 토큰수가 채팅 질에 당연히 영향을 주지만 토큰 이전에 프롬이 어떤 형태로 짜였는지가 더 큰 영향을 미친다는 것이었습니다.
같은 지침을 다른 방식으로 짜보겠습니다.
어디까지나 예시일 뿐 실제로 이렇게 짜지는 않습니다.
1. ❤️🔥💬
2. 진지한 로맨틱 관계에 들어서면 고백을 한다.
3. npc와 pc 사이에 로맨틱한 감정이 형성되고, 그것이 장기적으로 관계에 영향을 미칠 경우 npc는 애정 표현이 가미된 고백을 고려하며 그러한 고백은 반드시 언어적 표현을 동반한다. 예시는 "사랑해" 등이다.
이 경우 1번이 가장 토큰이 적고, 2번이 중간, 3번이 토큰이 가장 많이 나오겠죠. 그러나 실제로 가장 원활하게 적용되는 지침은 3번입니다.
1번은 과다하게 축약되어 해석의 여지가 많고, 2번은 진지한 로맨틱 관계에 대한 해석도, 고백이 어떤 형태인지에 대한 해석도 없어 원하는 방향으로 반영이 되지 않을 가능성이 큽니다. 토큰을 줄이기 위해 과축약하는 것보다는 적절하게 반영되는 프롬을 만들었는지가 더 중요하겠죠.
또한 제가 주력으로 하는 대부분의 정량제 플랫폼은 "추론 토큰"은 보여주지 않습니다.
따라서 프롬을 추론이 많이 튈 수 있는 방향으로 짜게 되면 프롬 길이만으로 토큰을 계산하는 토크나이저로는 다소 불분명한 측정이 될 수 있습니다.
그러니 케이브덕의 토크나이저를 너무 믿지 말고 "시간차를 두고" 출력 테스트를 해보시는 게 가장 확실하다고 생각합니다.
그렇다고 토큰이 아예 품질에 영향을 안 미치느냐 하면 그렇지는 않아서 저는 4,000토큰 미만의 챗봇에는 능동성 지침을 따로 넣지 않습니다. 넣지 않아도 충분히 능동적으로 반응하기 때문입니다. "아주 작음"과 "아주 큼"의 양극단은 영향이 있는 것 같아요.
---
다음은 로어북입니다.

다른 플랫폼의 로어북 활성화 로직은 몰라도 케이브덕 로어북만은 약간 오용을 하시는 분이 계시는 듯해서요. 우선 케이브덕의 로어북에 대한 설명을 캡쳐로 가져왔습니다.
케이브덕 로어북은 완전히 "사용자의 입력"에만 반응합니다. 즉, "출력문에 보이지 않게 특정 키워드나 이모지를 심어두어서 트리거를 거는 방식"은 그 키워드에 반응하는 지침이 "로어북"이 아닌 "프롬 본문"에 들어가지 않으면 의미가 없습니다.
출력문을 통한 내부 트리거를 걸어놓고 정작 그 트리거에 연계되는 명령문을 로어북에 넣으면 작동되지 않는다는 뜻입니다. ← 그리고 프롬을 본문에 넣어놓았다면 기억력 보강용 보조 상태창으로 쓰는 게 아닌 한 굳이 추가 트리거까지 넣어 작동시킬 필요는 없죠.
---
🚫 작동하지 않는 트리거 예시
인풋
유저 : 뭐해?
출력 : →💓← (트리거 걸고 숨김처리)
로어북
활성화 키워드 💓
활성화 시 로맨틱한 감정을 드러낸다.
→ 유저 입력이 아닌 ai 출력에 키워드가 있으므로 로어북은 작동되지 않음 🙅♂️
---
당연히 → 우연히 로어북 키워드가 ai턴에 출력되어 특정 지침이 활성화 된다는 운빨도 기대할 수 없습니다. 오로지 사용자 입력에만 의존하니까요.
그래서 저는 개인적으로 로어북을 거의 쓰지 않고 있습니다. 제때 활성화 되지 않을 수 있다는 위험부담이 너무 크고, 그렇다고 ** 같은 사용자가 반드시 쓸 수 밖에 없는 키워드에 걸어두면 상시 토큰을 더하는 것과 같으니까요. 그마저도 로어북은 활성화 되는 갯수가 정해져 있어 누락이 될 수도 있고요.
대신 사용자가 스스로 입력을 컨트롤할 수 있는 명령어는 로어북에 넣습니다.
!% !@ !# ← 이런 걸로요.
예전에는 명령어를 한글로 주로 만들었는데 요즘 만드는 캐릭터들은 외국인 사용자분들 번역 문제를 고려해 숫자나 기호 등 만국 공통의 명령어를 쓰려고 하고 있습니다.
로어북 트리거는 따로 번역이 안 되기 때문입니다.

제작자가 "!사과" 라고 명령어를 넣어두면 외국 사용자분들도 "!사과"라고 적어야 활성화가 되고 "!apple" 등으로 적으면 활성화가 안 됩니다.
---
그 외에도 프롬을 쓸 때 퍼센트(예시: 분위기 지침을 느와르 50% 코미디 50%으로 씀)로 쓰는 건 큰 의미가 없다거나 캐릭터의 생각나는 그대로의 모든 면모를 쓸 필요는 없다는 소소한 체감도 있었습니다.
캐릭터의 모든 면모를 서술할 필요는 없다 ← 이것을 말씀드리기에 앞서 저는 챗봇을 제작할 때 0에서 제작한다고 생각하지 않습니다. LLM에 학습된 정보 중에 제 캐나 시뮬이 들어갈 클리셰 방석을 찾는다는 사고로 제작합니다.
→ 똑똑함, 냉철함, 의사
이런 성향의 캐릭터를 서술했다고 했을 때 LLM은 갑자기 "안경"을 끼워 주곤 하죠.
왜냐면 LLM 입장에서는 안경까지가 "똑똑냉철의사"의 클리셰이기 때문입니다. 따라서 캐릭터 프로필 자체는 간단 서술하더라도 그 캐릭터가 서술하지도 않은 각자의 안경을 찾아서 쓰게 하면 그 "안경" 파트는 프롬에 안 쓰셔도 됩니다. 오히려 자연스럽게 등장하는 클리셰는 프롬으로는 재차 안 쓰시는 쪽이 LLM이 해당 파트에 과집중을 하지 않게 하는 방지턱이 됩니다.
간략히 정리하면
1. 몇 가지 키워드의 조합법을 찾는다!
2. 성공적인 조합을 하고 나면 서술상 공백인 "실제로는 프롬에 적히지 않은 부분"을 클리셰의 힘을 빌어 발현 빈도는 높이면서 토큰을 아낄 수 있다는 말입니다.
---
마지막으로 그래서 이걸 전부 적용해서 프롬을 짜느냐 하면 그렇지는 않고요. 저는 테스트 만능주의자라 테스트만 쌔끈하게 나오면 출하합니다.