대형언어모델과의 대화에 마크다운 이용하기
프롬프트에 마크다운을 입히면, 사용자의 요구가 더욱 선명해집니다.
“마크다운(Markdown)”은 태그나 기호를 사용하여 제목, 목록, 링크, 이미지, 코드 블록 등의 서식을 지정하는 간단하고 직관적인 방법입니다. 마크다운은 읽기 쉽고 작성하기 쉬우며, 다양한 플랫폼과 호환되고 HTML로 변환이 가능해 웹에서도 쉽게 공유할 수 있습니다.
마크다운은 일반 텍스트 편집기를 사용하여 서식이 지정된 텍스트를 만들기 위한 목적으로, 2004년 존 그루버와 아론 스워츠가 만든 “마크업 언어(Markup Language)”입니다.
마크업 언어는 일반 텍스트에 특별한 태그를 삽입하여 문서의 구조, 서식, 레이아웃 등을 표현하는 언어입니다. 대표적인 마크업 언어 HTML은 꺾쇠괄호(<, >)로 둘러싸인 태그를 사용하여 텍스트에 추가 정보를 제공합니다. 예를 들어, HTML에서 <p> 태그는 단락을 나타냅니다.
마크업 언어는 문서의 구조와 의미를 명확히 전달하고, 다양한 매체에서 일관된 표현을 가능하게 합니다. 또한 마크업 언어로 작성된 문서는 쉽게 처리, 변환, 저장, 검색할 수 있어 정보 교환에 유용합니다. HTML, XML, LaTex 등 다양한 마크업 언어가 웹 개발, 데이터 교환, 문서 작성 등 각각의 용도와 목적에 맞게 사용되고 있습니다.
마크업 언어의 일종인 마크다운은 오랫동안 블로그, 협업 도구, Readme 파일 등 다양한 곳에서 사용되어 왔습니다. 대형언어모델도 마크다운을 이해하고 이에 기반한 출력을 생성할 수 있습니다. 그러므로 사용자가 마크다운에 대한 지식을 갖추고 있으면, 프롬프트의 작성 및 모델의 출력 형식을 제어하는데 상당한 도움이 될 수 있습니다.
더 설명하기 전에, 먼저 프롬프트 작성 시 마크다운을 사용하는 예시를 살펴보죠. 프롬프트를 살펴보는 게 목적이기에, 모델의 답변은 포함하지 않았습니다.
프롬프트
# 건강한 식단 계획 짜기
나는 현재 건강한 식습관을 기르기 위해 노력하고 있는 40세의 채식주의자 여성입니다. 다음의 지침을 바탕으로, 내게 적합한 주간 식단 계획을 작성해 주세요.
## 식단 구성
1. 일일 칼로리 섭취량을 1500~1800 kcal로 제한해 주세요.
2. 단백질, 복합 탄수화물, 건강한 지방이 균형 잡힌 식단으로 구성해 주세요.
3. 아침, 점심, 저녁 식사로 구분하고, 간식도 포함해 주세요.
4. 식사별로 음식명과 분량을 표시해 주세요.
## 고려 사항
- 가능하면 조리법이 간단한 메뉴로 구성해 주면 좋겠습니다.
## 추가 요청
식단과 함께 다음 내용도 포함해 주세요:
- 하루 30분 이상 운동할 수 있는 운동 계획
- 건강한 생활 습관을 유지하기 위한 실천 가능한 팁
#, ##, 1., - 등이 마크다운의 예시입니다. 그냥 일반적인 문장을 나열하는 식으로 프롬프트를 작성할 수도 있겠지만, 이렇게 마크다운을 이용해 프롬프트를 작성하면 사용자와 AI 모두에게 좋으며 구체적으로 다음과 같은 이점이 있습니다.
가독성 향상: 마크다운으로 프롬프트를 작성하면, 구조화(체계적으로 조직하고 정리하는 것)되고 읽기 쉬운 형태로 모델에 프롬프트를 제공할 수 있습니다. 즉 제목, 소제목, 목록 등을 사용하여 정보를 체계적으로 전달할 수 있습니다.
모델의 이해도 향상: 모델에게 사용자의 의도를 명확히 전달할 수 있어, 모델의 이해도를 높이고 결과적으로 정확하고 유용한 응답을 받을 가능성이 높아집니다.
템플릿 제공: 마크다운으로 프롬프트 템플릿을 만들어 공유하면, 다른 사람들도 이를 수정해 손쉽게 프롬프트를 작성할 수 있습니다.
마크다운을 이용한 프롬프트는 사용자 입장에서 작성하기 쉽고, 읽기 쉽고, 수정하기 쉽습니다. 긴 문장을 작성하다 보면 글이 꼬이기 쉬운데, 제목과 목록을 사용해 명료하게 작성할 수 있으니까요.
사람이 읽기 쉬운 문장은 AI도 읽기 쉽습니다. AI가 오해하거나 잘못 해석하면 틀린 답변을 제공할 수 있는데, 마크다운으로 구조화된 프롬프트는 그럴 가능성을 줄여 줍니다.
1. 제목(Headers)
#~######(최대 6개)를 사용해 제목을 나타냅니다. # 하나는 가장 큰 제목을 나타내고, ##은 두 번째로 큰 제목, 그 다음은 ###로, 이런 식으로 제목의 레벨을 나타냅니다. 예: # 제목 1, ## 제목 2, ### 제목 3 등
2, 강조(Emphasis)
*로 감싸면 이탤릭체가 됩니다. 예: *이탤릭체*
**로 감싸면 볼드체가 됩니다. 예: **볼드체**
~~로 감싸면 취소선이 됩니다. 예: ~~취소선~~
3. 목록(Lists)
*, +, - 중 하나로 시작하면 순서 없는 목록이 됩니다.
숫자와 점으로 시작하면 순서 있는 목록이 됩니다. 예: 1.
4. 링크(Links)
[텍스트](URL)로 링크를 만들 수 있습니다. 예: [구글](https://www.google.com)
5. 이미지(Images)
![텍스트](이미지 URL)로 이미지를 삽입할 수 있습니다. 예: ![로고](https://example.com/logo.png)
6. 코드(Code)
백틱(`)으로 감싸면 인라인 코드가 됩니다. 예: `print("Hello, World!")`
세 개의 백틱(```)으로 코드 블록을 만들 수 있습니다.
참고로, 백틱(Backtick)은 키보드에서 숫자키 1 왼편의 물결(~) 표시와 함께 있는, 작은따옴표와 비슷한 문자입니다. 원래 타자기와 초기 컴퓨터에서 사용된 특수 문자 중 하나였는데, 이후 잘 사용되지 않다가 현재는 마크업 언어와 프로그래밍에서 코드와 관련된 표현에 주로 사용되고 있습니다.
7. 인용문(Blockquotes)
>로 시작하는 줄은 인용문이 됩니다. 예: > 이것은 인용문입니다.
8. 수평선(Horizontal Rules)
***, --- 중 하나로 수평선을 만들 수 있습니다.
9. 표(Table)
파이프(|)로 열을 구분하고, 하이픈(-)으로 헤더와 데이터를 구분합니다.
예:
| 제목 1 | 제목 2 | 제목 3 |
|---------|---------|---------|
| 내용 1 | 내용 2 | 내용 3 |
10. 체크리스트(Checklists)
순서 없는 목록 기호(-, +, *) 다음에 대괄호([])를 사용합니다. 대괄호 안에 공백은 빈 체크박스를, x는 체크된 체크박스를 나타냅니다. 예: - [ ] 체크되지 않은 항목, - [x] 체크된 항목
이러한 문법을 프롬프트 작성 시 모두 이용할 필요는 없습니다. 앞선 예시처럼 일반적인 상황에서는 제목과 목록으로 구분해 요구사항을 구조화하는 정도로 충분합니다. (다만, 모델의 출력을 제어할 때는 더 다양하게 사용할 수 있는데요. 이에 대해서는 다음 글에서 살펴볼 예정입니다.)
이전 글 “나만의 프로젝트 관리 전문가 만들기 feat. LLM”의 프롬프트도 마찬가지로 마크다운을 이용해 작성한 것인데요. 해당 글의 프롬프트에서는 #로 입력, 처리, 출력을 구분했는데, 다음과 같이 #로 프롬프트 제목을 붙이고 ##로 입력, 처리, 출력을 구분하는 형태로 작성할 수도 있습니다. 이에 대한 유일한 정답은 없으며, 사용자 선택의 문제입니다.
프롬프트
# 나만의 프로젝트 전문가 만들기
## 입력
(생략: 세부 내용은 이전 글의 프롬프트과 동일)
## 처리
## 출력
정리하면, 마크다운의 기본 문법 중 필요한 내용만 골라서 사용자가 편한 형태로 자신의 프롬프트를 구조화해서 사용하면 됩니다.
오늘은 마크다운의 기본 문법과 프롬프트 작성 시 이용하는 내용에 대해 살펴보았습니다. 다음에는 모델의 출력을 제어하는데 마크다운을 이용하는 방법을 살펴보겠습니다.
마크다운은 프롬프트 작성의 동반자입니다.
모델과의 의사소통에 효과적이거든요.