문법의 종류
실제 프롬프트 작성 시 사용하는 문법들을 알아봅시다.
XML
가장 간단한 문법입니다. 내용을 설명하는 영문 단어와 내용이 있을 때, 아래와 같이 작성합니다.
xml
<keyword>
(내용)
</keyword>여는 태그와 달리 닫는 태그의 경우 </와 같이 슬래시가 붙는 점을 주의하세요.
이게 끝입니다. 이전 챕터의 예시를 XML로 작성해본다면 아래와 같이 작성하게 됩니다.
xml
<profile>
<name>OO</name>
<age>OO</age>
<like>OO</like>
<personality>주로 OO함</personality>
<feature>OO하면 OO함</feature>
</profile>들여쓰기의 경우 선택입니다.
장점
- 정보의 시작과 끝이 매우 명확하여, 독립된 정보를 나타낼 때 매우 강력합니다.
- 장문 처리에 매우 유용합니다.
단점
- 글자수가 너무 많습니다. 특히 위의 예시처럼 데이터를 하나하나 전부 태그로 묶는 것은 낭비에 가깝습니다.
사용 방안
- 큰 틀을 구성하는 용도로 사용하세요. 문체 / 세계관 / 캐릭터 / 출력 부분을 나눌 때 사용하면 좋습니다.
마크다운
가장 널리 쓰이는 문법입니다. 문법이 여러 개가 있으며, 아래는 몇 가지 문법 예시들입니다.
markdown
# 헤더 1단계
## 헤더 2단계
### 헤더 3단계
- 리스트 1
- 리스트 2
*기울임*
**굵게**헤더의 경우 일반적으로 최대 3개까지 사용합니다.
헤더를 통해 어디서부터 어디까지가 어떤 데이터인지 간접적으로 나타낼 수 있습니다.
예를 들어, 아래와 같이 헤더를 설정할 경우,
markdown
# 헤더 1단계
## 헤더 2단계
## 헤더 2단계
### 헤더 3단계
### 헤더 3단계구역은 아래와 같이 나뉘어집니다.
💡 설명
같은 레벨, 또는 더 높은 레벨의 헤더가 오기 전까지는 모두 그 헤더의 구역입니다.
예를 들어, # 헤더 1단계로 적었다면 다음 # 헤더 1단계가 나오기 전까지가 해당하는 구역입니다.## 헤더 2단계로 적었다면 # 헤더 1단계 또는 ## 헤더 2단계가 나오기 전까지가 해당하는 구역입니다.
장점
- 쓰는 기호가 매우 간단명료하기 때문에 토큰 낭비가 거의 없습니다.
- 문법을 사용하면서도 동시에 문맥을 부드럽게 이해할 수 있습니다.
단점
- 상황이 지나치게 복잡해질 경우, 프롬프트 제어력이 약해질 수 있습니다.
사용 방안
- 일반적인 정보 서술이 필요할 경우 사용하세요. 대부분의 경우 마크다운을 사용한다고 보시면 됩니다.
JSON
LLM을 코딩 / 논리 쪽으로 활성화하는 문법입니다.
아래와 같이 데이터를 담을 틀 (오브젝트)를 생성하고, 성분에 값을 추가합니다.
json
{
"이름": "아무개"
}{으로 열고, "key": "value" 꼴로 key의 값을 value라고 명시합니다.key는 항상 큰따옴표로 감싸야 하며, value는 숫자가 아닐 경우 큰따옴표로 감싸야 합니다.
모든 데이터가 작성되었다면 }으로 닫습니다.
여러 성분이 있을 경우, 쉼표로 구분해야 합니다.
json
{
"이름": "아무개",
"나이": 21
}오브젝트 역시 value에 담을 수 있습니다.
json
{
"이름": "아무개",
"특징": {
"나이": 21,
"성별": "male"
}
}이름 구분 없이 여러 개의 데이터를 나열해야 할 경우, 배열을 사용할 수 있습니다.
json
{
"이름": "아무개",
"성격": ["친절", "상냥", "외향적"]
}배열은 [으로 열고, ]로 닫습니다.
배열 안의 데이터 역시 문자열은 큰따옴표로 감싸야 합니다.
장점
- 가장 강력한 프롬프트 제어력을 지닙니다. 구조 덕분에 설정이 헷갈리지 않습니다.
- 복잡한 관계도, 중첩된 정보를 표현하는 데 뛰어납니다.
단점
- 토큰 낭비가 매우 심합니다. 문법 기호가 토큰을 많이 잡아먹어 정보 밀도가 떨어집니다.
- 학습 방향성이 달라 명령문에는 적합하지 않습니다. (명령문 대부분은 마크다운)
- 주요 문법이 JSON일 경우, 모델의 창의성을 저하시킬 가능성이 있습니다.
사용 방안
- 구체적인 수치 정의 (스탯이나 호감도 시스템)나 상태 정의 등에만 사용하세요.
자주 하는 오해 & 질문
1. 꼭 이렇게 써야 하는지?
아닙니다. 어디까지나 다양한 경험적 자료들에 기반한 사용 방안일 뿐, 절대적이지는 않습니다.
모든 프롬프트를 원하는 문법으로 작성해도 문제없이 작동합니다.
다만 문법별로 장단점이 있기에 예시 사용 방안을 작성한 것입니다.
어디까지나 최적의 사용처일 뿐, 유일한 사용처는 아님을 알려드립니다.
2. 문법을 반드시 지켜야 하나요?
아닙니다. 사소하게 문법을 틀렸더라도, 작동에 큰 영향을 끼칠 만큼 오류가 발생하는 것은 아닙니다.
물론 지킬 수 있다면 지키는 게 조금이나마 더 프롬프트의 품질을 높이는 것에 도움이 되지만, 너무 강박적으로 문법 오류에 집착하지는 마세요.
3. 자연어는 쓰면 안 되나요?
아닙니다. 모든 항목에 절대 자연어가 없어야 한다는 의미가 아닙니다.
특히 캐릭터의 감정이나 성격처럼 미묘한 설정이 필요한 경우, 때로는 자연어로 작성하는 것이 뉘앙스를 더욱 잘 살릴 때도 있습니다.
기본적으로는 문법을 사용하여 큰 부분부터 조금씩 세분화하되, 단어 하나하나까지 문법을 적용하지는 마세요.
오히려 문법을 지키는 것 때문에 프롬프트가 지나치게 딱딱해진다면, 자연어를 쓰는 것도 좋은 선택입니다.