프롬프트 템플릿
언어 모델은 텍스트를 입력으로 받아 일반적으로 "프롬프트"라고 합니다. 프롬프트는 개발 중에 직접 하드코딩되는 경우가 종종 없으며 이는 프롬프트 관리에 도움이 되지 않습니다. 대신, 프롬프트 템플릿을 사용하여 프롬프트를 유지합니다. 마치 SMS나 이메일 콘텐츠에 사용되는 템플릿과 유사합니다.
프롬프트 템플릿이란?
프롬프트 템플릿은 일반적으로 사용되는 이메일이나 SMS 템플릿과 별반 다르지 않습니다. 템플릿 파라미터 세트를 포함할 수 있는 문자열 템플릿이며, 템플릿 파라미터의 값은 템플릿 내 해당 파라미터들을 대체하는 데 사용될 수 있습니다.
프롬프트 템플릿은 다음 내용을 포함할 수 있습니다:
- Large Language Model (LLM)에게 보내는 명령.
- AI에게 예상되는 형식으로 요청을 반환하는 예상형식의 질문-응답 예제 세트.
- 언어 모델에게 보내는 질문.
프롬프트 템플릿 생성
PromptTemplate
클래스를 사용하여 간단한 프롬프트를 만들 수 있습니다. 프롬프트 템플릿은 어떤 수의 템플릿 파라미터를 내장하고 그런 다음 파라미터 값들을 사용하여 템플릿 콘텐츠를 포맷할 수 있습니다.
from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template(
"{adjective}로 재미있는 {content}에 관한 농담 좀 해 주세요."
)
prompt_template.format(adjective="재미있는", content="닭들")
템플릿 출력 결과:
'재미있는 농담 좀 해 주세요.'
채팅 메시지 프롬프트 템플릿
채팅 모델은 채팅 메시지 목록을 입력으로 받으며, 이러한 채팅 메시지의 콘텐츠는 프롬프트 템플릿을 사용하여 관리될 수 있습니다. 이러한 채팅 메시지들은 로우 문자열과 다르며 각 메시지는 "역할"과 관련이 있습니다.
예를 들어, OpenAI의 채팅 완성 API에서 OpenAI의 채팅 모델은 다른 채팅 메시지 유형에 대해 세 가지 역할을 정의합니다: Assistant, Human, 또는 System 역할입니다:
- Assistant 메시지는 AI의 응답을 나타냅니다.
- Human 메시지는 사용자가 AI에게 보낸 메시지를 나타냅니다.
- System 메시지는 일반적으로 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="Bob", user_input="당신의 이름이 뭐에요?")
다른 메시지 형식의 예제:
from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_openai import ChatOpenAI
chat_template = ChatPromptTemplate.from_messages(
[
SystemMessage(
content=(
"당신은 사용자의 텍스트를 더 기분 좋게 소리내어 다시 작성하는 도움이 되는 어시스턴트입니다."
)
),
HumanMessagePromptTemplate.from_template("{text}"),
]
)
messages = chat_template.format_messages(text="맛있는 것을 먹는 걸 좋아하지 않아요")
print(messages)
일반적으로 format_messages
함수를 직접 사용하여 프롬프트 템플릿 콘텐츠를 서식화하지 않고 Langchain 프레임워크가 자동으로 처리하도록 합니다.