시리즈 AI채팅 중급자용 가이드

서론


리스는 다양한 중괄호 구문(Curly Braced Syntax)을 통해 자바스크립트 등을 전혀 모르는 사람들이라도 마일드하게 변수, 변수 계산, 배열 등 다양한 기능을 사용할 수 있도록 해 놓았다. 대부분의 구문은 이 렌트리에서 확인할 수 있고, 몇몇 신 구문의 경우 리스 공지에서 업데이트를 확인할 수 있다.


변수 기능은 활용 가능성이 무궁무진하다. 나도 봇카드 실시간 업데이트자동 페르소나 변경 글을 쓴 적이 있는데, 이렇게 프롬프팅/기능적인 측면이 아니라도 변수나 배열 등 기능은 AI 모델 성능과는 전혀 관계 없이 프론트엔드 자체에서 저장/계산 등을 담당하는 것이기 때문에 RPG 봇의 스탯, 시뮬 봇의 현재 상태/돈 등 다양한 상황에서 모델의 연산 부담과 찐빠 걱정 없이 유용하게 쓸 수 있다.


하지만 아무리 기능이 단순하다고 해도 코딩 같은 것을 전혀 모르는 경우 변수 기능에 섣불리 손을 대기 어려운 게 사실이다. 따라서 이 글에서는 변수 개념과 리스 중괄호 구문에서의 관련 기능들에 대해 간단하게 설명해 보고자 한다.



주의사항


- 중괄호 구문은 채팅 메시지, 봇카드/페르소나 디스크립션, 로어북 등 리퀘스트에 포함되는 대부분의 항목에서 사용할 수 있다.

- 하지만 {{setvar}} 등 퍼메에서 작동하지 않는 구문도 있기 때문에 렌트리를 잘 확인해야 한다.

- 변수 기능 등은 메시지가 '전송될 때' 작동한다. 순서에 유의해야 한다.

- 대소문자는 구분되지 않는다. 예를 들어, {{user}}, {{User}}, {{USER}}는 모두 같은 값을 가진다.

- 원인은 모르겠으나 트리거 스크립트에서는 변수 기능이 잘 작동하지 않는다.



변수(var) 만들기/불러오기


변수(Variable, var)는 일종의 그릇 같은 개념이다. 이 그릇에는 우리가 원하는 문자, 숫자 등을 담을 수 있고, 그릇 하나하나에도 이름을 붙여 구분할 수 있다.

빈 유리컵에 '체력'이라는 이름을 붙이고, 그 그릇에 '98'을 담아 보자. 다른 그릇에는 '정신력'이라는 이름을 붙이고, '86'을 담아 보자.

그러면 우리는 체력이 얼마야? 라는 질문에 '98', 정신력이 얼마야? 라는 질문에 '86'이라고 대답할 수 있다.


리스에서 그릇에 이름을 붙이고, 내용물을 담기 위해서는 {{setvar}} 구문을 사용한다. set variable, 즉 변수를 세팅한다는 개념이다.


{{setvar::그릇 이름::내용물}}


위의 '체력'과 '정신력' 예시를 구현하자면 다음과 같이 된다.


{{setvar::체력::98}}

{{setvar::정신력::86}}


이렇게 이름을 붙이고 내용물을 넣은 그릇들은 화면상에서는 보이지 않는다.

대신 리스 냉장고에 차곡차곡 저장되어, 꺼내오지 않으면 우리 눈으로는 확인할 수 없다.

이 때 그릇에 뭐가 들었는지 내용물을 확인하기 위해 사용하는 것이 {{getvar}} 구문이다. get variable, 즉 변수를 얻는다는 개념이다.


{{getvar::그릇 이름}}


만약 '정신력'이 현재 얼마인지를 확인하고 싶다면 '정신력' 그릇을 꺼내 내용물을 확인해야 한다.


{{getvar::정신력}}


이 구문은 화면상에서 정신력에 들어있는 값인 '86'으로 치환된다.


그릇에는 숫자 뿐 아니라 문자도 담을 수 있다.


{{setvar::nsfw::on}}


'nsfw' 라는 변수에 'on' 이 담겼다는 뜻이다.


어떤 변수든 사용하기 위해서는 {{setvar}}를 먼저 사용해서 그릇을 세팅해 주어야 하는 것을 잊지 말자.



실제 사용 방법 예시


로어북을 만들어 체력과 정신력 항목을 표시해 보자. 우리가 원하는 모습은 다음과 같다.


체력: (체력 값)
정신력: (정신력 값)


체력 값과 정신력 값을 불러오기 위해 getvar 구문을 사용할 수 있다.


체력: {{getvar::체력}}
정신력: {{getvar::정신력}}


{{getvar}}를 활용한 로어북 생성 예시


하지만 아직 우리는 '체력'과 '정신력'이라는 그릇에 내용물을 담지 않았기 때문에, {{getvar}}는 지금으로서는 아무런 의미도 없다.

그릇을 만들고 내용물을 채우기 위해 {{setvar}}를 전송해 보자.


{{setvar}} 전송 예시


결과물-리퀘스트 로그


결과물-화면



변수 계산하기


변수 값이 숫자일 경우에는 저장된 변수에 값을 더하고 빼거나, 변수끼리 서로 사칙연산을 하는 게 가능하다.

이 때 사용할 수 있는 것이 {{addvar}} 구문과 {{calc}} 구문이다.


{{addvar}}

그릇에 내용물을 더하거나 빼고 싶을 때 사용하는 것이 addvar, 즉 add variable 기능이다.


{{addvar::그릇 이름::값}}


이 때 '값'에는 음수도 들어갈 수 있고, 당연히 뺄셈으로 계산된다.

'체력'에서 8을 빼려면 다음과 같이 하면 된다.


{{addvar::체력::-8}}




{{addvar}} 과정 및 결과


중요한 것은 {{addvar}}의 경우 그릇에 들어가 있는 내용물 자체, 즉 변수 값을 바꾼다는 사실이다. 이는 아래에 있는 {{calc}}와 가장 주요한 차이이다.


{{calc}}

{{calc}}, calculate 구문의 경우 기본적으로는 사칙연산 식의 결과를 반환, 즉 표시하거나 리퀘스트에 포함해 준다.


{{calc::(식)}}


이 때 식은 단순한 계산식을 적어도 된다.


{{calc::3*6}}




{{calc}} 단순 계산식 결과


하지만 우리는 변수끼리 계산하기를 원한다. 이 경우에는 숫자 대신 {{getvar}}를 통해 변수 값을 불러와 계산시키면 된다.

예를 들어, 체력과 정신력을 더하고 싶을 때 {{calc}}를 사용할 수 있다.


{{calc::{{getvar::체력}}+{{getvar::정신력}}}}


이제 구문이 중첩되기 시작했으니 중괄호를 열고 닫는 것에 주의해 주어야 한다.

조금 어지러울 수도 있겠지만, 핵심은 '값' 자리에 {{getvar}}를 넣는 것이다.


{{calc::{{getvar::체력}}+{{getvar::정신력}}}}
{{calc::90+86}}


{{calc::{{getvar::체력}}+{{getvar::정신력}}}} 은 계산 결과값인 176으로 나타날 것이다.




{{calc}} 변수 계산식 결과