이전에 단일 문장에 대한 템플릿을 만드는 PromptTemplate 에 대해서 알아봤다.
이번 포스트에서는 메시지 목록 을 입력받는 ChatPromptTemplate에 대해서 알아보겠다.
왜 쓰는가 ?
각 메시지의 역할이 구분되어야 할 때 사용한다. 메시지는 system, user, assistant와 같은 역할을 갖고, 이 구조는 GPT 계열 Chat 모델(GPT-3.5-turbo 등)이 기대하는 입력 형식이다.
예를 들어, 증권사나 은행 앱에서 챗봇이 "무엇을 도와드릴까요?"라고 묻고,
사용자가 계속 질문을 이어가는 형태처럼 이전 대화를 기반으로 새 질문에 대한 응답을 생성하고 싶을 때 유용하다.
즉, ChatPromptTemplate은 문맥을 반영한 마지막 질문에 대한 답변을 생성하는 데에 쓰인다.
예시
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "너는 여행 일정 추천 도우미야."),
("user", "서울에서 2박 3일 여행 갈 건데 추천해줘."),
("assistant", "서울 2박 3일 추천 일정을 알려드릴게요..."),
("user", "{question}")
])
이 프롬프트는 마치 실제로 사용자와 이전에 나눈 대화처럼 구성돼 있다.
마지막 "user" 메시지의 {question}에 실제 입력을 넣어서 프롬프트를 완성하게 된다.
어떻게 활용할 수 있나
위 예시처럼 system → user → assistant → user 순으로 대화 흐름 자체를 템플릿화할 수 있다.
이전 대화 예시를 포함시켜 모델이 문맥과 말투를 더 잘 파악할 수 있도록 유도할 수 있다.
실제 서비스에서는 이전 질문 + AI의 답변을 누적하면서 새로운 질문만 채워넣는 방식으로 응답 품질을 높일 수 있다.
format_messages()로 변수만 넣으면 Chat 모델이 기대하는 형식의 메시지 리스트가 자동 생성된다.