이미지와 출력 규칙
캐릭터를 더욱 생생하게 만나보기 위해, 이미지를 추가해 봅시다.
이미지 작동 시스템
이미지를 사용하기 전, 반드시 알고 가야 할 사항이 있습니다.
AI는 이미지를 출력하면서도 그 이미지가 무엇인지 모르는 상태입니다.
AI는 실제 이미지 파일이 아니라 이미지라고 정의된 텍스트를 출력하는 것이고,
그 정보는 프롬프트로 "이 이미지는 이런 이미지다"라고 얻은 것입니다.
예제
아래와 같은 이미지가 있습니다. 이 이미지는 프롬프트로 "무표정"에 속하는 이미지입니다.
프롬프트에 "상황에 맞는 이미지 출력" 관련 내용이 있었습니다.
이에 따라 무표정인 상황 속에서 아래 텍스트를 출력했습니다.
이 경우 AI는 해당 이미지를 보고 출력하지 않았습니다.
칠판에 낙서가 있는지, 왼쪽에서 빛이 들어왔는지 등의 "시각적 정보"는 주어지지 않았습니다.
단지 이 이미지는 캐릭터의 무표정 이미지다라는 내용을 바탕으로 출력하였습니다.
이미지를 사용할 경우, 해당 개념을 이해하고 가는 것이 추후 활용에 도움이 됩니다.
이미지 매크로
⚠️ 안내
해당 항목 이후의 내용은 노벨챗에서의 기능을 다룹니다.
시네마챗의 경우 이미지 시스템이 별도로 존재하므로, 넘기셔도 됩니다.
잠시 돌아가 보면, 링크가 정보에 비해 지나치게 길다는 의문을 가져볼 수 있습니다.
가장 큰 문제는, 이 링크들을 전부 프롬프트에 썼다간 이미지 출력 시스템만 몇천 자가 들 것입니다.
이미지를 출력할 때는 "이 텍스트는 이미지다" 라는 최소한의 구분 기호만 있으면 됩니다.
코멧의 기본 시스템에서는 아래 구문을 사용하고 있습니다.
{{img::0}}다만 웹의 경우 이미지를 사용하려면 반드시 마크다운 이미지 문법을 사용해야 합니다.
마크다운 이미지 문법은 반드시 아래 규칙을 따라야 합니다.
md
여기서 우리가 임의로 정한 이미지 구문을 실제 마크다운 이미지 문법으로 바꾸는 장치가 매크로입니다.
매크로 탭의 이미지 아이콘을 클릭하면 이미지 파일을 업로드할 수 있습니다.
파일 업로드에 성공하면, 자동으로 아래와 같은 매크로를 생성하게 됩니다.
{{img::이미지 번호}} 글자를 로 변환하는 매크로이미지를 번호로 저장하는 이유?
만약 매크로를 {{img::화남}} , {{img::슬픔}}과 같이 저장하면 어떻게 될까요?
이 경우, 다양한 감정에 대한 설명이 존재하므로 없는 감정도 존재할 것이다라는 환각이 발생합니다.
예를 들면, 분명히 화남, 슬픔, 기쁨만 등록했는데,
시간이 지나면 어느 순간 자연스럽게 우울함, 부끄러움 등을 사용하는 현상이 일어납니다.
이를 할루시네이션 (Hallucination) 이라고 하며, 이는 AI의 고질적인 문제입니다.
이 현상을 사전에 방지하기 위한 가장 효과적인 방법으로 1, 2, 3과 같이 숫자로 매기는 방법이 있습니다.
때문에 코멧에서는 이미지 매크로 생성 시 {{img::숫자}} 꼴로 생성하게 되어 있습니다.
숫자를 사용할 때에도 주의해야 할 점은, 반드시 연속된 자연수만을 사용해야 한다는 점입니다.
예를 들어, 1, 2, 4를 저장해 놓았다면 자연스럽게 3을 사용해버릴 가능성이 생깁니다.
출력 형식 프롬프트
출력 프롬프트의 경우 사전 제공된 템플릿을 사용하는 것을 권장하고 있습니다.
후술할 출력 양식 프롬프팅에 속하는 내용이므로, 지금은 우선 사용해 봅시다.
xml
<image-code>
1: 무표정
2: 희미한 미소
3: 활짝 웃음
...(이하 생략)
</image-code>
<output-syntax>
- 대사 문법 syntax: "대사"
- 나레이션 문법 syntax: *나레이션*
- 캐릭터 대화 syntax: {{img::이미지 코드}} (대사 and/or 나레이션)
</output-syntax>해당 템플릿에는 이미지 매크로 출력 규칙 이외에도,
대사는 "대사" 문법으로, 나레이션은 *나레이션* 문법으로 출력하도록 하는 프롬프트가 포함되어 있습니다.
이미지 코드는 별도의 블록으로 관리하는 시스템입니다.<image-code> 블록에 각 이미지에 맞는 설명을 작성해 주면 됩니다.
상태창
캐릭터 채팅을 더욱 돋보이게 해주는 가장 대표적인 방법입니다.
흔히 마크다운 코드블록 문법을 사용하며, 문법은 아래와 같습니다.
md
```
기본 구조 관련 내용들
```기본적으로 코멧에서 추천하는 상태창 양식은 아래와 같습니다.
```
❤️(0 이상 100 이하 정수, 호감도)
📜(현재 상황 한 줄 요약)
💭(캐릭터의 속마음. 실제 캐릭터 말투로 생생하게)
```호감도 수치는 사실상 시각적 즐거움 용도에 가깝습니다.
물론 프롬프트로 호감도 수치에 따른 반응을 설계하였다면 좋은 시스템으로 동작합니다.
한 가지 짚고 가야 할 것은, 상태창은 캐릭터 채팅 장면과 독립되어야 한다는 것입니다.
별개의 톤, 별개의 시스템으로 동작하니, 영역 구분을 명확히 해주는 것이 좋습니다.
코멧에서는 body, foot의 영역 구분 키워드 사용을 권장하고 있습니다.<output-syntax> 블록을 아래와 같이 수정하면 됩니다.
md
<output-syntax>
# body
- 대사 문법 syntax: "대사"
- 나레이션 문법 syntax: *나레이션*
- 캐릭터 대화 syntax: {{img::이미지 코드}} (대사 and/or 나레이션)
# foot
- syntax: ```
❤️(0 이상 100 이하 정수, 호감도)
📜(현재 상황 한 줄 요약)
💭(캐릭터의 속마음. 실제 캐릭터 말투로 생생하게)
```
</output-syntax>생각보다 AI는 꽤 능동적으로 작업을 수행합니다.
위와 같이 정말 대략적으로만 프롬프트를 작성해 주어도, 시작 대화가 잘 작성되어 있다면
그에 맞추어 상태창 시스템을 잘 구현해 줄 수 있습니다.