AI/LangChain

LangChain ChatPromptTemplate

불타는고굼이 2025. 3. 28. 15:40
반응형

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
반응형