[LangChain] 랭체인의 Components(구성요소) - Prompt template(프롬프트 템플릿)

1. prompt tmplate
- 프롬프트 템플릿은 사용자 입력 및 매개 변수를 언어 모델에 대한 지침으로 변환하는 데 도움이 됩니다.
- 이를 통해 모델의 응답을 안내하여 문맥을 이해하고 관련성 있고 일관된 언어 기반 출력을 생성하는 데 도움을 줄 수 있습니다.
1) 프롬프트 템플릿 입력
딕셔너리를 입력으로 받으며, 각 키는 프롬프트 템플릿에서 입력할 변수를 나타냅니다.
2) 프롬프트 템플릿 출력
- 프롬프트 템플릿은 프롬프트 값(PromptValue)을 출력합니다.
- PromptValue는 LLM이나 ChatModel에 전달할 수 있으며, 문자열이나 메시지 목록으로 캐스팅할 수도 있습니다.
- PromptValue가 존재하는 이유는 문자열과 메시지 간에 쉽게 전환할 수 있도록 하기 위해서입니다.
2. 프롬프트 템플릿 유형
1) String PromptTemplates(문자열 프롬프트 템플릿)
단일 문자열의 서식을 지정하는 데 사용되며, 일반적으로 간단한 입력에 사용됩니다.
예를 들어 PromptTemplate을 만들고 사용하는 일반적인 방법은 다음과 같습니다:
from langchain_core.prompts import PromptTemplate
# PromptTemplate 인스턴스 생성
prompt_template = PromptTemplate.from_template("Tell me a joke about {topic}")
# 템플릿에 값을 채워서 프롬프트 완성하기1
filled_propmpt1 = prompt_template.format(topic="cats")
print(filled_propmpt1)
# 결과: Tell me a joke about cats
# 템플릿에 값을 채워서 프롬프트 완성하기2
filled_propmpt2 = prompt_template.invoke({"topic": "dogs"})
print(filled_propmpt2)
# 결과: text='Tell me a joke about dogs'
2) ChatPromptTemplates(채팅 프롬프트 템플릿)
메시지 목록의 서식을 지정하는 데 사용됩니다.
이러한 "템플릿"은 템플릿 자체의 목록으로 구성됩니다.
예를 들어 ChatPromptTemplate을 구성하고 사용하는 일반적인 방법은 다음과 같습니다:
from langchain_core.prompts import ChatPromptTemplate
prompt_template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant"),
("user", "Tell me a joke about {topic}")
])
prompt_template.invoke({"topic": "cats"})
위의 예에서 ChatPromptTemplate은 호출될 때 두 개의 메시지를 구성합니다.
첫 번째는 시스템 메시지로, 서식을 지정할 변수가 없습니다.
두 번째 메시지는 휴먼 메시지로, 사용자가 전달한 주제 변수에 따라 서식이 지정됩니다.
3) MessagesPlaceholder(메시지플레이스홀더)
이 프롬프트 템플릿은 특정 위치에 메시지 목록을 추가하는 역할을 합니다.
위의 ChatPromptTemplate에서는 각각 문자열인 두 메시지의 서식을 지정하는 방법을 살펴봤습니다.
하지만 사용자가 특정 위치에 넣을 메시지 목록을 전달하도록 하려면 어떻게 해야 할까요? 이것이 바로 메시지 플레이스홀더를 사용하는 방법입니다.
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
prompt_template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant"),
MessagesPlaceholder("msgs")
])
prompt_template.invoke({"msgs": [HumanMessage(content="hi!")]})
이렇게 하면 두 개의 메시지 목록이 생성되는데, 첫 번째 메시지는 시스템 메시지이고 두 번째 메시지는 우리가 전달한 휴먼 메시지입니다.
5개의 메시지를 전달했으면 총 6개의 메시지(시스템 메시지와 전달한 5개의 메시지)가 생성되었을 것입니다.
이 방법은 메시지 목록을 특정 지점에 배치할 때 유용합니다.
메시지플레이스홀더 클래스를 명시적으로 사용하지 않고 동일한 작업을 수행하는 다른 방법도 있습니다:
prompt_template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant"),
("placeholder", "{msgs}") # <-- This is the changed part
])
프롬프트 템플릿을 사용하는 방법에 대한 자세한 내용은 여기에서 관련 사용 방법 가이드를 참조하세요.
ref
https://python.langchain.com/v0.2/docs/concepts/#prompt-templates
Conceptual guide | 🦜️🔗 LangChain
This section contains introductions to key parts of LangChain.
python.langchain.com