ChatPromptTemplate은 LangChain에서 제공하는 프롬프트 구성 도구로,
여러 개의 메시지를 조합하여 하나의 프롬프트로 만들 수 있도록 도와줍니다.
LLM에게 시스템 지시, 사용자 질문, 예시 답변 등을 함께 전달하고 싶을 때 매우 유용합니다.
system, human, ai 등 메시지 역할을 분리해서 작성 가능 from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "당신은 친절하고 똑똑한 AI 비서입니다."),
("human", "오늘 서울 날씨 어때?")
])
이렇게 구성된 프롬프트는 다음과 같은 형태로 LLM에 전달됩니다:
System: 당신은 친절하고 똑똑한 AI 비서입니다.
Human: 오늘 서울 날씨 어때?
프롬프트를 구성할 때 변수도 함께 사용할 수 있습니다:
prompt = ChatPromptTemplate.from_messages([
("system", "당신은 여행 전문가입니다."),
("human", "{user_input}")
])
사용 시:
prompt.format(user_input="오사카 2박 3일 여행 코스 추천해줘")
| 항목 | 설명 |
|---|---|
| 목적 | 다양한 메시지를 조합하여 LLM 입력을 구성 |
| 장점 | 구조화, 역할 분리, 재사용 용이 |
| 사용처 | 챗봇, 에이전트, 대화형 서비스 등 |
ChatPromptTemplate은 단순한 질문/응답을 넘어서,
LLM과의 상호작용을 더 정교하게 설계하는 기본 도구입니다.
MessagesPlaceholder는 프롬프트 템플릿 안에 이전 대화 내용(chat history) 을 삽입할 수 있도록 도와주는 자리 표시자입니다.
대화 흐름을 자연스럽게 유지하고, LLM이 컨텍스트를 이해하도록 만들 때 중요한 역할을 합니다.
Memory 객체와 함께 사용 시 자동 관리 가능from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
("system", "당신은 사용자를 돕는 AI입니다."),
MessagesPlaceholder(variable_name="chat_history"),
("human", "{question}")
])
이 구성에서 chat_history는 다음과 같은 형식으로 전달될 수 있습니다:
chat_history = [
("human", "오늘 뭐 먹을까?"),
("ai", "김치찌개 어때요?")
]
이렇게 하면 LLM은 이전 대화를 이해하고, 그 맥락에 맞춰 적절한 응답을 할 수 있게 됩니다.
Memory와 함께 사용하는 예from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
이 메모리를 사용하면 MessagesPlaceholder를 위한 chat_history를 자동으로 관리할 수 있습니다.
| 항목 | 설명 |
|---|---|
| 목적 | 대화 기록을 프롬프트에 삽입 |
| 장점 | 컨텍스트 유지, 자연스러운 대화 흐름 |
| 사용처 | 챗봇, 대화형 서비스, 에이전트 등 |
MessagesPlaceholder는 단순히 메시지를 추가하는 기능을 넘어서,
LLM이 상황을 기억하고 더 지능적으로 반응할 수 있도록 만들어주는 핵심 요소입니다.