2.1.4. ChatPromptTemplate

LangChain에서 ChatPromptTemplate는 대화형 AI 애플리케이션을 구축할 때 매우 중요한 도구입니다. LangChain은 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 간소화하는 프레임워크로, 그 중심에는 프롬프트 템플릿이 있습니다. 특히 ChatPromptTemplate는 대화 형식의 프롬프트를 구조화하고 동적으로 관리할 수 있게 해주는 강력한 도구입니다. 

ChatPromptTemplate는 LangChain에서 제공하는 프롬프트 템플릿 클래스로, 대화 흐름을 반영한 프롬프트를 생성하는 데 특화되어 있습니다. 일반적인 PromptTemplate가 단일 텍스트 입력을 기반으로 프롬프트를 생성한다면, ChatPromptTemplate는 시스템 메시지, 사용자 메시지, AI 응답 등 다중 메시지 형식을 지원합니다. 이는 특히 채팅 기반 애플리케이션에서 LLM과 자연스럽고 맥락적인 대화를 구현할 때 유용합니다.

ChatPromptTemplate의 주요 특징은 다음과 같습니다:

  • 역할 기반 메시지 정의: 시스템, 인간(Human), AI 등의 역할을 구분하여 메시지를 구성할 수 있습니다.
  • 동적 변수 삽입: 템플릿에 변수를 추가해 입력값에 따라 프롬프트가 유연하게 변형됩니다.
  • 대화 히스토리 통합: 이전 대화 내용을 반영하여 맥락을 유지할 수 있습니다.

ChatPromptTemplate의 구조

ChatPromptTemplate는 langchain.prompts 모듈에서 가져올 수 있으며, 메시지 리스트로 구성됩니다. 각 메시지는 SystemMessage, HumanMessage, AIMessage와 같은 객체로 표현됩니다. 예를 들어:

  • AIMessage: AI의 응답을 나타냅니다(템플릿에서는 예상 응답을 설계할 수 있음)
  • SystemMessage: AI의 동작 방식이나 대화의 기본 규칙을 정의합니다.
  • HumanMessage: 사용자가 입력한 질문을 나타냅니다.

기본적인 사용법은 다음과 같습니다:

from langchain.prompts import ChatPromptTemplate

# ChatPromptTemplate 생성
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 도움이 되는 AI 비서입니다."),
    ("human", "안녕하세요, {topic}에 대해 알려주세요."),
])

# 변수 삽입
formatted_prompt = prompt.format(topic="LangChain")
print(formatted_prompt)
System: 당신은 도움이 되는 AI 비서입니다.
Human: 안녕하세요, LangChain에 대해 알려주세요.

주요 메서드와 활용법

  1. from_messages: 메시지 리스트를 기반으로 템플릿을 생성합니다.
    • 사용 예: 위 코드처럼 시스템과 인간 메시지를 조합.
  2. format: 변수 값을 삽입하여 최종 프롬프트를 생성합니다.
    • 입력값에 따라 동적으로 변형 가능.
  3. format_prompt: ChatPromptValue 객체를 반환하며, LLM 호출에 직접 사용할 수 있습니다.

실제 예제: FAQ 봇 구축

ChatPromptTemplate를 활용해 간단한 FAQ 봇을 만들어 보겠습니다. 이 봇은 사용자가 특정 주제에 대해 질문하면 사전 정의된 형식으로 답변을 제공합니다.

from langchain.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama

# ChatPromptTemplate 정의
faq_template = ChatPromptTemplate.from_messages([
    ("system", "당신은 {company}의 고객 지원 AI입니다. 간결하고 정확하게 답변하세요."),
    ("human", "{question}에 대해 알려주세요."),
])

# LLM 모델 설정
llm = ChatOllama(model="exaone3.5", temperature=0.7)

# 프롬프트 포맷팅
prompt = faq_template.format(company="우주그룹", question="스마트폰의 기능")

# LLM 호출
response = llm.invoke(prompt)
print(response.content)
스마트폰의 주요 기능은 다음과 같습니다:
1. **통신**: 전화 및 텍스트 메시지 전송
2. **인터넷 연결**: 웹 브라우징, 이메일, 소셜 미디어
3. **앱 실행**: 다양한 유틸리티, 엔터테인먼트 앱 사용
4. **사진 및 비디오**: 촬영, 편집, 공유
5. **음악 및 비디오 재생**: 미디어 플레이백
6. **GPS 및 네비게이션**: 위치 추적, 길 안내
7. **건강 관리**: 운동량 추적, 건강 모니터링 앱
8. **페이먼트**: 모바일 결제 시스템
궁금한 특정 기능이 있으시면 말씀해 주세요!
이 글은 카테고리: 랭체인 (LangChain)에 포함되어 있습니다. 고유주소를 북마크하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다