You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: units/ko/unit1/messages-and-special-tokens.mdx
+34-34Lines changed: 34 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,15 +1,15 @@
1
-
# 메세지와 특수 토큰 [[messages-and-special-tokens]]
1
+
# 메시지와 특수 토큰 [[messages-and-special-tokens]]
2
2
3
3
이제 LLM이 어떻게 동작하는지 이해했으니, **채팅 템플릿을 통해 생성 결과를 구조화**하는 방법을 살펴보겠습니다.
4
4
5
-
예로 ChatGPT를 떠올려봅시다. 사용자는 에이전트(Agent)와 상호작용 할 때 채팅 인터페이스를 사용합니다. 따라서 LLM이 어떻게 채팅을 관리하는지 이해하는 것은 중요합니다.
5
+
예로 ChatGPT를 떠올려봅시다. 사용자는 에이전트(Agent)와 상호작용할 때 채팅 인터페이스를 사용합니다. 따라서 LLM이 어떻게 채팅을 관리하는지 이해하는 것은 중요합니다.
6
6
7
-
> **Q**: 하지만 ... 저는 ChatGPT/Hugging Chat을 사용할 때 프롬프트가 아니라 메세지로 대화를 주고 받는 데요?
7
+
> **Q**: 하지만 ... 저는 ChatGPT/HuggingChat을 사용할 때 프롬프트가 아니라 메시지로 대화를 주고받는데요?
8
8
>
9
-
> **A**: 맞습니다! 하지만 사실 그 메세지는 UI의 추상화일 뿐입니다.
9
+
> **A**: 맞습니다! 하지만 사실 그 메시지는 UI의 추상화일 뿐입니다.
10
10
실제로는 모든 대화 메시지가 하나의 프롬프트로 연결되어 LLM에 입력됩니다. LLM은 이전 대화를 "기억"하는 것이 아니라, 매번 대화를 전체적으로 읽는 방식으로 동작합니다.
11
11
12
-
지금까지 우리는 프롬프트를 모델에 입력되는 토큰의 시퀀스로 설명했습니다. 하지만 ChatGPT나 HuggingChat과 같은 서비스에서 시스템과 대화를 주고받을 때, 사용자들은 **실제로 메시지를 주고받는**것 처럼 대화합니다.사실 내부에서 메세지는**모델이 이해할 수 있도록 연결되어 프롬프트에 구조화**되고 있답니다.
12
+
지금까지 우리는 프롬프트를 모델에 입력되는 토큰의 시퀀스로 설명했습니다. 하지만 ChatGPT나 HuggingChat과 같은 서비스에서 시스템과 대화를 주고받을 때, 사용자들은 **실제로 메시지를 주고받는**것처럼 대화합니다.사실 내부에서 메시지는**모델이 이해할 수 있도록 연결되어 프롬프트에 구조화**되고 있답니다.
여기서 다시 특수 토큰(Special Tokens) 개념이 등장합니다. 특수 토큰은 모델이 사용자(User)와 어시스턴트(Assistant)의 메시지 시작과 끝을 구분하는 데 사용됩니다. 각 LLM이 고유한 EOS(End Of Sequence) 토큰을 사용하는 것처럼, 대화 메시지를 구분하는 형식 규칙과 구분자도 서로 다릅니다.
23
23
24
-
## 메세지: LLM의 근본적인 시스템 [[messages-the-underlying-system-of-llms]]
25
-
### 시스템 메세지(시스템 프롬프트) [[system-messages]]
24
+
## 메시지: LLM의 근본적인 시스템 [[messages-the-underlying-system-of-llms]]
25
+
### 시스템 메시지(시스템 프롬프트) [[system-messages]]
26
26
27
27
시스템 메시지(또는 시스템 프롬프트) 는 **모델의 행동 방식**을 가이드해주는 지침서입니다. 이는 **지속적인 안내서** 역할을 하며, 이후 모든 상호작용을 안내합니다.
28
28
@@ -35,11 +35,11 @@ system_message = {
35
35
}
36
36
```
37
37
38
-
이러한 시스템 메세지가 주어지면, AI 에이전트 알프레드는 공손하고 도움을 주는 방식으로 답변합니다:
38
+
이러한 시스템 메시지가 주어지면, AI 에이전트 알프레드는 공손하고 도움을 주는 방식으로 답변합니다:
채팅 템플릿(Chat Templates)은 대화의 문맥을 유지하기 위해 사용되며, 사용자와 어시스턴트 간 이루어졌던 이전 메시지들을 저장하여 일관된 멀티 턴(multi-turn) 대화를 가능하게 합니다.
64
+
채팅 템플릿(Chat Templates)은 대화의 문맥을 유지하기 위해 사용되며, 사용자와 어시스턴트 간 이루어졌던 이전 메시지들을 저장하여 일관된 멀티 턴(multi-turn) 대화를 가능하게 합니다.
65
65
66
66
예제:
67
67
@@ -74,8 +74,8 @@ conversation = [
74
74
```
75
75
76
76
이 대화에서 사용자는 주문 관련 도움을 요청했으며, LLM 어시스턴트는 주문 번호를 물었습니다.
77
-
이후 사용자가 주문 번호를 제공하면, 전체 대화의 모든 메세지들은 단일 시퀀스로 변환되어 LLM에 입력됩니다.
78
-
채팅 템플릿은 이 파이썬 리스트 안에 있는 모든 메세지를 프롬프트(string)로 변환합니다.
77
+
이후 사용자가 주문 번호를 제공하면, 전체 대화의 모든 메시지들은 단일 시퀀스로 변환되어 LLM에 입력됩니다.
78
+
채팅 템플릿은 이 파이썬 리스트 안에 있는 모든 메시지를 프롬프트(string)로 변환합니다.
79
79
80
80
예를 들어, SmolLM2 채팅 템플릿은 다음과 같이 메시지를 변환합니다:
81
81
@@ -114,38 +114,38 @@ Today Date: 10 Feb 2025
114
114
messages = [
115
115
{"role": "system", "content": "너는 수학 선생님이야."},
116
116
{"role": "user", "content": "미적분학이 뭐야?"},
117
-
{"role": "assistant", "content": "미적분학은 수학의 한 분야로...""},
118
-
{"role": "user", "content": "예시을 들어줘."},
117
+
{"role": "assistant", "content": "미적분학은 수학의 한 분야로..."},
118
+
{"role": "user", "content": "예시를 들어줘."},
119
119
]
120
120
```
121
121
122
122
## 채팅 템플릿(Chat-Templates) [[chat-templates]]
123
123
124
-
채팅 템플릿은 **언어 모델과 사용자의 대화를 특정 형식으로 구조화**하는 역할을 합니다. 즉, 메세지를 프롬프트로 변환하는 방법을 가르쳐주죠.
124
+
채팅 템플릿은 **언어 모델과 사용자의 대화를 특정 형식으로 구조화**하는 역할을 합니다. 즉, 메시지를 프롬프트로 변환하는 방법을 가르쳐주죠.
125
125
126
126
### 베이스 모델(Base Models) vs. 인스트럭트 모델(Instruct Models) [[base-models-vs-instruct-models]]
127
127
128
-
또다른 중요한 부분은 베이스 모델 vs 인스트럭트 모델의 차이점을 이해하는 것 입니다 :
128
+
또 다른 중요한 부분은 베이스 모델 vs 인스트럭트 모델의 차이점을 이해하는 것입니다:
129
129
130
130
-*베이스 모델(Base Model)* 은 미가공 텍스트 데이터(raw data)로 학습해 다음 토큰을 예측합니다.
131
131
132
-
-*인스트럭트 모델(Instruct Model)* 은 주어진 지시를 따라 대화할 수 있도록 추가로 미세 조정된 모델 예를 들어, `SmolLM2-135M`은 베이스 모델, `SmolLM2-135M-Instruct`은 인스트럭트 모델입니다.
132
+
-*인스트럭트 모델(Instruct Model)* 은 주어진 지시를 따라 대화할 수 있도록 추가로 미세 조정된 모델입니다. 예를 들어, `SmolLM2-135M`은 베이스 모델, `SmolLM2-135M-Instruct`은 인스트럭트 모델입니다.
133
133
134
-
베이스 모델을 인스트럭트 모델처럼 동작하게 하려면, **프롬프트 형식을 일관되게**맞춰야 합니다. 여기서 채팅 템플릿이 등장합니다.
134
+
베이스 모델을 인스트럭트 모델처럼 동작하게 하려면, **프롬프트 형식을 일관되게**맞춰야 합니다. 여기서 채팅 템플릿이 등장합니다.
135
135
136
136
*ChatML*은 시스템(system), 사용자(user), 어시스턴트(assistant)와 같은 명확한 역할 표시를 사용해 대화를 구조화하는 템플릿 형식 중 하나입니다. 여러분이 최신 AI API를 사용해 본 경험이 있으시다면, 이것이 표준 방식이라는 것을 알 것입니다.
137
137
138
-
기본 모델(base model)은 여러가지 채팅 템플릿(chat templates)으로 미세 조정 될 수 있기 때문에, 인스트럭트 모델(instruct model)을 사용할 때는 반드시 올바른 채팅 템플릿을 사용하고 있는지 확인해야 합니다.
138
+
기본 모델(base model)은 여러 가지 채팅 템플릿(chat templates)으로 미세 조정될 수 있기 때문에, 인스트럭트 모델(instruct model)을 사용할 때는 반드시 올바른 채팅 템플릿을 사용하고 있는지 확인해야 합니다.
139
139
140
140
### 채팅 템플릿(Chat Templates) 이해하기 [[understanding-chat-templates]]
141
141
142
-
각 인스트럭트 모델 마다 다른 대화 형식과 특수 토큰을 사용하기 때문에, 각 모델에 맞는 프롬프트 형식으로 채팅 템플릿이 구현됩니다.
142
+
각 인스트럭트 모델마다 다른 대화 형식과 특수 토큰을 사용하기 때문에, 각 모델에 맞는 프롬프트 형식으로 채팅 템플릿이 구현됩니다.
143
143
144
-
`transformers` 라이브러리에서는 채팅 템플릿에 [Jinja2 코드](https://jinja.palletsprojects.com/en/stable/) 를 포함하고 있습니다. 이는 위의 예제와 같이 JSON 형태 메세지의 ChatML 목록을 시스템 레벨의 지시문(instruction) 텍스트로 나타내주는데, 이는 모델이 이해 할 수 있는 사용자 메세지-어시스턴트 응답 형태로 이루어져 있습니다.
144
+
`transformers` 라이브러리에서는 채팅 템플릿에 [Jinja2 코드](https://jinja.palletsprojects.com/en/stable/) 를 포함하고 있습니다. 이는 위의 예제와 같이 JSON 형태 메시지의 ChatML 목록을 시스템 레벨의 지시문(instruction) 텍스트로 나타내주는데, 이는 모델이 이해할 수 있는 사용자 메시지-어시스턴트 응답 형태로 이루어져 있습니다.
145
145
146
146
이 구조는 모델이 대화 중 **일관성을 유지하고, 다양한 유형의 입력에 적절하게 응답**할 수 있게 합니다.
147
147
148
-
아래는 `SmolLM2-135M-Instruct`채팅 템플릿의 간소화 버전입니다:
148
+
아래는 `SmolLM2-135M-Instruct`채팅 템플릿의 간소화 버전입니다:
149
149
150
150
```jinja2
151
151
{% for message in messages %}
@@ -158,9 +158,9 @@ messages = [
158
158
{{ message['content'] }}<|im_end|>
159
159
{% endfor %}
160
160
```
161
-
위 코드와 같이, 채팅 템플릿은 메세지 리스트의 형식을 정의합니다.
161
+
위 코드와 같이, 채팅 템플릿은 메시지 리스트의 형식을 정의합니다.
162
162
163
-
다음과 같은 메세지 목록이 주어진 경우:
163
+
다음과 같은 메시지 목록이 주어진 경우:
164
164
165
165
```python
166
166
messages = [
@@ -184,7 +184,7 @@ messages = [
184
184
어떻게 사용하는지 알려줘<|im_end|>
185
185
```
186
186
187
-
`transformers`라이브러리는 토큰화 과정에서 채팅 템플릿을 처리합니다. `transformers`가 어떻게 채팅 템플릿을 사용하는 지 더 알고 싶으시다면 <a href="https://huggingface.co/docs/transformers/en/chat_templating#how-do-i-use-chat-templates" target="_blank">여기</a>를 참고하세요! 우리가 할 것은 메세지를 올바른 형식으로 구조화 해주는 것 뿐, 나머지 작업은 토크나이저가 처리합니다.
187
+
`transformers`라이브러리는 토큰화 과정에서 채팅 템플릿을 처리합니다. `transformers`가 어떻게 채팅 템플릿을 사용하는지 더 알고 싶으시다면 <ahref="https://huggingface.co/docs/transformers/en/chat_templating#how-do-i-use-chat-templates"target="_blank">여기</a>를 참고하세요! 우리가 할 것은 메시지를 올바른 형식으로 구조화해 주는 것뿐, 나머지 작업은 토크나이저가 처리합니다.
188
188
189
189
아래 Space를 통해 동일한 대화가 다양한 모델별 채팅 템플릿에 따라 어떻게 형식화 되는지 실습해 볼 수 있습니다:
190
190
@@ -196,7 +196,7 @@ messages = [
196
196
></iframe>
197
197
198
198
199
-
### 메세지를 프롬프트로 변환하기 [[messages-to-prompt]]
199
+
### 메시지를 프롬프트로 변환하기 [[messages-to-prompt]]
200
200
201
201
LLM이 올바른 형식을 갖춘 대화를 수신하도록 하는 방법은, 모델의 토크나이저가 제공하는 `chat_template`를 사용하는 것입니다.
0 commit comments