반응형
LangChain ChatPromptTemplate 소개
ChatPromptTemplate
은 LangChain에서 Chat 모델(OpenAI GPT, Anthropic Claude 등)과 연동하기 위해 사용하는 프롬프트 구성 클래스이다. 일반적인 PromptTemplate
과 달리, 대화형 구조를 기반으로 메시지 역할(role)을 명시하고, 다중 메시지를 조합하는 방식으로 설계된다.
기본 개념
Chat 모델은 시스템 메시지, 사용자 메시지, 어시스턴트 메시지 등의 역할을 구분하며, ChatPromptTemplate
은 이를 조합하여 구조화된 대화 맥락을 전달할 수 있도록 설계되었다.
주요 구성 요소:
SystemMessagePromptTemplate
HumanMessagePromptTemplate
AIMessagePromptTemplate
(선택적)MessagesPlaceholder
(이전 대화 삽입용)
기본 사용 예제
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
system_prompt = SystemMessagePromptTemplate.from_template(
"당신은 친절한 AI 어시스턴트입니다."
)
human_prompt = HumanMessagePromptTemplate.from_template(
"안녕, {name}에 대해 알려줘."
)
chat_prompt = ChatPromptTemplate.from_messages([
system_prompt,
human_prompt
])
formatted = chat_prompt.format_messages(name="토끼")
출력 결과 (Message 객체)
[
SystemMessage(content='당신은 친절한 AI 어시스턴트입니다.'),
HumanMessage(content='안녕, 토끼에 대해 알려줘.')
]
---
MessagesPlaceholder 사용
과거 대화 기록을 포함시키기 위해 MessagesPlaceholder
를 사용한다. 이 기능은 멀티턴(Multi-turn) 챗봇 구현 시 유용하다.
from langchain.prompts import MessagesPlaceholder
chat_prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template("대화를 계속 이어가세요."),
MessagesPlaceholder(variable_name="history"),
HumanMessagePromptTemplate.from_template("{input}")
])
실행 시:
formatted = chat_prompt.format_messages(
history=[
("human", "안녕"),
("ai", "안녕하세요! 무엇을 도와드릴까요?")
],
input="오늘 날씨 어때?"
)
---
LLM 체인 연결 예시
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
llm = ChatOpenAI(model_name="gpt-3.5-turbo")
chain = LLMChain(llm=llm, prompt=chat_prompt)
response = chain.run({"name": "코끼리"})
---
주의사항
- ChatPromptTemplate은
format_messages()
메서드로 메시지 리스트를 반환 - Chat 모델과 함께 사용할 경우에만 사용 가능 (OpenAI Chat API 등)
- 출력은
Message
객체 리스트이므로, 직접 문자열로 변환할 경우 주의 필요
728x90
반응형
'AI > LangChain' 카테고리의 다른 글
LangChain Hub: 프롬프트와 체인을 공유하고 활용하는 플랫폼 (0) | 2025.03.31 |
---|---|
LangChain 프롬프트 구성: Partial Variables 및 load_prompt 사용법 (0) | 2025.03.28 |
LangChain LCEL 컴포넌트: RunnablePassthrough, RunnableParallel, RunnableLambda (0) | 2025.03.28 |
LCEL 인터페이스 정리: Runnable 구조와 주요 메서드 (0) | 2025.03.28 |
LCEL (LangChain Expression Language): 선언형 LangChain 구성 방식 (0) | 2025.03.28 |