카테고리 없음

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

늘이 2024. 6. 25. 15:37

 

 

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