챗 템플릿 vs 생성 템플릿

Soogyung Gwon·2026년 5월 30일

구름을잡아라

목록 보기
68/76

챗 템플릿(Chat Template)과 생성 프롬프트 템플릿(Generation Prompt Template)의 차이

LLM을 공부하다 보면 챗 템플릿(Chat Template)생성 프롬프트 템플릿(Generation Prompt Template) 이라는 용어를 자주 만나게 된다.

이 둘은 비슷해 보이지만 역할이 다르다.

간단히 말하면:

  • 챗 템플릿 → 대화 데이터를 모델 입력 형식으로 변환하는 규칙
  • 생성 프롬프트 템플릿 → 원하는 작업을 수행하도록 프롬프트를 구성하는 틀

이다.


챗 템플릿(Chat Template)

챗 모델은 일반적으로 다음과 같은 메시지 구조를 입력으로 사용한다.

messages = [
    {"role": "system", "content": "You are helpful"},
    {"role": "user", "content": "안녕"}
]

하지만 실제 모델은 결국 토큰 시퀀스만 이해한다.

따라서 이러한 메시지 구조를 모델이 학습한 문자열 형식으로 변환해야 한다.

이 변환 규칙이 바로 챗 템플릿(Chat Template) 이다.

예를 들어 다음과 같은 메시지가 있다고 하자.

messages = [
    {"role": "system", "content": "You are helpful"},
    {"role": "user", "content": "안녕"}
]

Llama 계열 모델에서는 다음과 같이 변환될 수 있다.

<|system|>
You are helpful

<|user|>
안녕

<|assistant|>

다른 모델에서는 다음과 같은 형식을 사용할 수도 있다.

[INST] 안녕 [/INST]

즉 챗 템플릿은

메시지 구조를 실제 모델 입력 문자열로 바꾸는 포맷

이라고 볼 수 있다.


생성 프롬프트 템플릿(Generation Prompt Template)

생성 프롬프트 템플릿은 모델에게 특정 작업을 수행하도록 지시하는 프롬프트 구조이다.

예를 들어 감정 분석을 수행한다고 가정해보자.

template = """
다음 문장의 감정을 분석하시오.

문장: {text}

감정:
"""

입력 문장이 다음과 같다면

text = "오늘 너무 행복하다"

최종 프롬프트는 다음과 같이 생성된다.

다음 문장의 감정을 분석하시오.

문장: 오늘 너무 행복하다

감정:

즉 생성 프롬프트 템플릿은

입력 데이터를 특정 작업용 프롬프트로 조립하는 템플릿

이다.


둘의 핵심 차이

구분챗 템플릿생성 프롬프트 템플릿
목적메시지를 모델 입력 포맷으로 변환작업 지시 프롬프트 생성
대상모델 구조 및 포맷사용자 작업
역할시스템 레벨 포맷팅작업 설계
모델 의존성매우 높음비교적 낮음
예시`<user
주 사용처Hugging Face TokenizerLangChain, 프롬프트 엔지니어링

실제로는 함께 사용된다

실제 LLM 서비스에서는 생성 프롬프트 템플릿과 챗 템플릿을 함께 사용한다.

1단계: 생성 프롬프트 템플릿 적용

prompt = f"""
다음을 번역하시오.

{text}
"""

결과:

다음을 번역하시오.

Hello World

2단계: 챗 메시지 생성

messages = [
    {"role": "user", "content": prompt}
]

3단계: 챗 템플릿 적용

tokenizer.apply_chat_template(messages)

결과:

<|user|>
다음을 번역하시오.

Hello World

<|assistant|>

이후 해당 문자열이 토큰화되어 모델 입력으로 전달된다.


Hugging Face에서의 예시

Hugging Face에서는 다음과 같이 챗 템플릿을 적용한다.

tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

여기서 중요한 옵션은 add_generation_prompt=True 이다.

이 옵션을 사용하면 마지막에 Assistant 응답 시작 토큰이 추가된다.

예를 들면:

<|assistant|>

가 자동으로 붙는다.

모델은 이 위치부터 응답 생성을 시작한다.


왜 챗 템플릿이 중요한가?

많은 사람들이 처음에는 다음과 같이 모델을 사용하려고 한다.

prompt = "안녕"
model.generate(prompt)

하지만 대부분의 챗 모델은 실제 학습 시 다음과 같은 형식으로 데이터를 학습했다.

<|user|>
안녕

<|assistant|>

따라서 챗 템플릿을 사용하지 않으면 모델이 학습한 입력 형식과 실제 입력 형식이 달라질 수 있다.

그 결과:

  • 응답 품질 저하
  • 이상한 출력 생성
  • 역할(Role) 인식 실패

등의 문제가 발생할 수 있다.


정리

챗 템플릿과 생성 프롬프트 템플릿은 서로 다른 역할을 수행한다.

챗 템플릿

  • 대화 메시지를 모델 전용 포맷으로 변환
  • 모델마다 형식이 다름
  • 토크나이저 수준에서 처리

생성 프롬프트 템플릿

  • 작업 수행용 프롬프트 생성
  • 번역, 요약, 감정 분석 등의 작업 정의
  • 프롬프트 엔지니어링 영역

결국 실제 LLM 파이프라인에서는 다음 순서로 동작한다.

사용자 입력
↓
생성 프롬프트 템플릿
↓
챗 메시지 구성
↓
챗 템플릿 적용
↓
토큰화
↓
모델 입력
↓
응답 생성

한 줄로 정리하면,

생성 프롬프트 템플릿은 "무엇을 시킬지"를 정의하고, 챗 템플릿은 "어떻게 모델에게 전달할지"를 정의한다.

profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글