LangChain | ChatPromptTemplate

Ruah·2024년 11월 2일

ChatPromptTemplate을 활용한 대화형 AI 개발

ChatPromptTemplate를 사용하여 대화형 AI 만드는 방법 시도.

  • 역할별 메시지 구성, 대화형 프롬프트 생성 방법

ChatPromptTemplate의 역할과 사용법

ChatPromptTemplate은 대화형 프롬프트를 생성할 때 사용된다.
메시지는 role, message의 튜플로 구성되고, 역할에는 system, human, ai 등이 있다.

from langchain_core.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages([
    ("system", "당신은 뮤지컬 전문가 AI이다. 당신의 이름은 {name}이다."),
    ("human", "안녕!"),
    ("ai", "안녕하세요, 무엇을 도와드릴까요?"),
    ("human", "{user_input}")
])

# 메시지 포맷팅
messages = chat_template.format_messages(
    name="Ryan",
    user_input="당신의 이름은 무엇입니까?"
)

# LLM과 연결해 응답 얻기
message = llm.invoke(messages).content
print(message)

MessagesPlaceholder로 동적 대화 삽입하기

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 뮤지컬 배우 입시 전문 AI 선생님이다. 임무는 학생과 레슨 과정에서의 상황을 주요 키워드로 대화 요약을 하는 것이다."),
    MessagesPlaceholder(variable_name="conversation"),
    ("human", "지금까지의 대화를 {word_count}단어로 요약한다.")
])

# 대화 내용
conversation = [
    ("human", "어떻게 나한테 이럴 수 있어요? 그럼 저는 괜찮을 거라 생각하세요????"),
    ("ai", "그게 아니지! 좀 더 감정을 넣어야 해. 진짜 괜찮지 않은 사람이어야 해!")
]

# 메시지 포맷팅
formatted_chat_prompt = chat_prompt.format(
    word_count=5,
    conversation=conversation
)

# LLM과 연결해 요약 얻기
chain = chat_prompt | llm
messages = chain.invoke({
    "word_count": 5,
    "conversation": conversation
})
print(messages.content)

종합실습 : 대화형 AI 튜터

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from datetime import datetime
from langchain_openai import ChatOpenAI

llm = ChatOpenAI()

def get_today():
    return datetime.now().strftime("%b %d")

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 뮤지컬 배우 입시 전문 AI 선생님이다. 오늘은 {today}이다."),
    MessagesPlaceholder(variable_name="conversation"),
    ("human", "지금까지의 대화를 {word_count}단어로 요약해 주세요.")
])

conversation = [
    ("human", "노래 연습을 더 해야 할 것 같아요."),
    ("ai", "네, 고음 부분을 특히 신경 써서 연습해 봅시다.")
]

chain = chat_prompt | llm

messages = chain.invoke({
    "today": get_today(),
    "word_count": 10,
    "conversation": conversation
})

print(messages.content)

# 출력 : 학생이 노래 연습을 더 하고 싶어 하고, 선생님은 고음 부분을 연습하도록 조언했다.
profile
집요한 주니어 개발자의 호되게 당했던 기록

0개의 댓글