Want to Become a Sponsor? Contact Us Now!🎉

langchain-tutorials
LangChain에서 프롬프트 템플릿 사용하기: 단계별 가이드로 언어 모델 프롬프트 생성하기

LangChain에서 프롬프트 템플릿 사용하기: 단계별 가이드로 언어 모델 프롬프트 생성하기

Published on

LangChain에서 프롬프트 템플릿 사용하기: 단계별 가이드로 언어 모델 프롬프트 생성하기

소개:

언어 모델 프로젝트에서 특정 작업에 맞는 프롬프트를 생성해야 한다고 상상해보세요. 모델의 응답을 안내하기 위해 지시사항, 예시 및 문맥을 포함하고 싶습니다. 이때 프롬프트 템플릿이 유용합니다. 프롬프트 템플릿은 언어 모델 프롬프트를 생성하기 위한 미리 정의된 레시피입니다. 이는 LangChain의 핵심 기능인 강력한 언어 모델 빌드 및 세부 조정 플랫폼입니다.

이 글에서는 LangChain의 프롬프트 템플릿 세계에 대해 자세히 알아보겠습니다. 구체적으로 PromptTemplate과 ChatPromptTemplate 두 가지 유형의 프롬프트 템플릿에 초점을 맞출 것입니다. 이러한 템플릿은 지시사항, 페우샷 예제 및 특정 문맥 및 질문을 포함하여 프롬프트를 생성하는 구조화된 접근 방식을 제공합니다. 텍스트 완성, 텍스트 분류 또는 챗봇 프로젝트를 진행하더라도 프롬프트 템플릿을 사용하면 개발 프로세스를 간소화하고 고품질 프롬프트를 생성할 수 있습니다.

글 요약:

  • LangChain의 프롬프트 템플릿은 언어 모델 프롬프트를 생성하기 위한 미리 정의된 레시피입니다.
  • 이러한 템플릿은 지시사항, 페우샷 예제 및 특정 문맥 및 질문을 포함합니다.
  • 이 글에서는 프롬프트 템플릿의 생성 및 사용 방법에 대한 자세한 가이드와 예제를 제공합니다.
Anakin AI - The Ultimate No-Code AI App Builder

LangChain에서 프롬프트 템플릿 사용하기:

PromptTemplate

PromptTemplate은 문자열 프롬프트에 대한 템플릿을 생성하는 데 사용됩니다. 템플릿에서 런타임에 특정 값으로 채울 수 있는 자리 표시자를 정의할 수 있습니다. PromptTemplate 클래스를 사용한 프롬프트 템플릿 생성 예시를 살펴보겠습니다.

from langchain import PromptTemplate
 
template = PromptTemplate("Please write a {noun} sentence.")
 
formatted_prompt = template.format(noun="creative")

이 예시에서는 "Please write a noun sentence."라는 텍스트로 프롬프트 템플릿을 생성합니다. noun 자리 표시자는 프롬프트의 이 부분이 프롬프트를 생성할 때 명사값으로 대체됨을 나타냅니다. 그런 다음 템플릿의 format 메소드를 사용하여 자리 표시자를 원하는 값으로 대체할 수 있습니다. 이 경우 noun을 "creative"로 대체하여 "Please write a creative sentence."라는 형식이 완성된 프롬프트를 얻게 됩니다. 이렇게 하면 자리 표시자에 대해 다른 값들을 제공하면서 쉽게 프롬프트를 사용자화할 수 있습니다.

사용자 정의 프롬프트 템플릿에는 어떤 수의 변수도 포함될 수 있습니다. 예를 들어, 명사와 형용사를 모두 사용하여 사용자에게 문장 작성을 요구하는 템플릿을 생성할 수 있습니다.

template = PromptTemplate("Please write a {adjective} sentence using a {noun}.")
 
formatted_prompt = template.format(adjective="colorful", noun="flower")

비슷하게 Prompt Template Composition을 사용하여 여러 PromptTemplates를 결합하여 더 복잡한 템플릿을 생성할 수도 있습니다. 이를 통해 형용사 및 명사 변수를 모두 포함하는 프롬프트를 생성할 수 있습니다.

template1 = PromptTemplate("Please write a {adjective} sentence.")
template2 = PromptTemplate("Use a {noun} in your sentence.")
 
composite_template = template1 + template2
 
formatted_prompt = composite_template.format(adjective="creative", noun="paintbrush")

이 예시에서는 template1과 template2 두 개의 프롬프트 템플릿을 생성한 다음 + 연산자를 사용하여 이를 결합하여 composite template을 생성합니다. 이 결과로 얻은 프롬프트 템플릿은 형용사와 명사 변수를 모두 포함하므로 "Please write a creative sentence. Use a paintbrush in your sentence."와 같은 프롬프트를 생성할 수 있습니다.

ChatPromptTemplate

반면에 ChatPromptTemplate은 프롬프트가 챗 메시지 목록인 챗 모델용 템플릿을 생성하는 데 사용됩니다. 프롬프트의 각 챗 메시지는 시스템, 사용자 또는 AI와 같은 다른 역할을 가질 수 있습니다. ChatPromptTemplate 클래스를 사용한 챗 프롬프트 템플릿 생성 예시를 살펴보겠습니다.

from langchain import ChatPromptTemplate
 
template = ChatPromptTemplate([
    ("sys", "You are an AI assistant that helps with daily tasks."),
    ("user", "What's the weather like today?"),
    ("sys", "The weather is sunny and warm."),
    ("user", "Should I wear sunscreen?"),
    ("sys", "Yes, it's always a good idea to wear sunscreen when it's sunny.")
])
 
formatted_prompt = template.format_messages()

이 예시에서는 시스템과 사용자와 같은 다른 역할의 메시지를 포함하는 챗 프롬프트 템플릿을 정의합니다. 각 메시지는 역할을 첫 번째 요소로하고 내용을 두 번째 요소로하는 튜플로 나타냅니다. format_messages 메소드는 템플릿을 형식화하고 메시지 목록으로 프롬프트를 생성하는 데 사용됩니다.

ChatPromptTemplate은 언어 모델과의 상호작용을 시뮬레이션하고 구조화된 문맥을 제공하기 위해 작업에 적합한 특정 역할 및 메시지를 정의하는 유연한 방법을 제공합니다.

챗 메시지를 나타내는 대체 방법으로는 MessagePromptTemplate 또는 BaseMessage를 사용하는 것도 가능합니다. Both PromptTemplate and ChatPromptTemplate은 LangChain Expression Language (LCEL)의 일부로 Runnable 인터페이스를 구현합니다. 이는 프롬프트를 실행하는 다양한 invoke, stream, 및 batch 호출을 지원한다는 것을 의미합니다. 예를 들어, 프롬프트 템플릿을 프롬프트 변수와 함께 호출하고 생성된 프롬프트를 문자열 또는 메시지 리스트로 검색할 수 있습니다.

다음 섹션에서는 LangChain에서 프롬프트 템플릿을 실행하는 다양한 방법과 언어 모델에 대한 고품질 프롬프트를 생성하기 위해 프롬프트 템플릿의 기능을 최대한 활용하는 방법에 대해 알아보겠습니다.

langchain prompts

LangChain을 사용하여 복잡한 프롬프트 만들기

기본적인 프롬프트 및 채팅 템플릿의 기초 위에 구축된 LangChain은 더 복잡한 프롬프트를 구성하기 위한 고급 기능을 제공합니다. 이러한 유연성은 세심한 입력이 필요한 작업이나 복잡한 대화 시뮬레이션에 필수적입니다. 이 가이드의 두 번째 부분에서는 이러한 고급 기능을 탐색하고 프로젝트에 적용하는 방법을 살펴보겠습니다.

프롬프트 템플릿 확장하기

PromptTemplate의 기본 사용은 간단한 텍스트 생성 작업을 용이하게 만들어줍니다. 하지만 실제 상황에서는 더 복잡한 작업이 필요한 경우가 많습니다. 특정 시나리오 설명을 포함한 프롬프트를 생성하고 각각 다른 맥락을 필요로 하는 질문들의 연속을 따르도록 하는 프롬프트를 생성해야 하는 시나리오를 상상해보세요. LangChain의 유연성을 통해 이러한 요구사항을 수용할 수 있는 다중 파트 프롬프트를 생성할 수 있습니다.

예시: 시나리오 기반 프롬프트 생성

from langchain import PromptTemplate
 
scenario_description = PromptTemplate("{city}에서 여행 가이드로 일하고 있습니다. 인기 있는 관광지, 현지 요리 및 문화적 관습에 관한 정보를 제공해야 합니다.")
 
questions = [
    PromptTemplate("{city}에서 가장 인기 있는 세 곳의 관광명소는 무엇인가요?"),
    PromptTemplate("{city}에서 꼭 시도해봐야 하는 현지 요리는 무엇인가요?"),
    PromptTemplate("{city}에서 여행객이 알아야 하는 문화적 관습이나 에티켓이 있나요?")
]
 
# 특정 도시로 각 프롬프트 형식화
city = "파리"
formatted_scenario = scenario_description.format(city=city)
formatted_questions = [q.format(city=city) for q in questions]
 
full_prompt = f"{formatted_scenario}\n\n" + "\n\n".join(formatted_questions)

이 예제에서는 상세한 시나리오 설명과 여러 PromptTemplate의 리스트인 질문들을 생성합니다. 이러한 템플릿을 특정 도시와 함께 형식화하여 관광 목적의 가이드 애플리케이션이 정확한 응답을 제공할 수 있는 포괄적인 프롬프트를 생성합니다.

동적 대화를 위한 ChatPromptTemplate 활용

ChatPromptTemplate은 역할과 맥락이 동적으로 변하는 지속적인 대화를 반영해야 하는 시나리오에서 뛰어난 성능을 발휘합니다. 이는 다양한 사용자 문의를 처리할 수 있는 AI 챗봇 또는 가상 어시스턴트 개발에 특히 유용합니다.

예시: 고객 서비스 대화 시뮬레이션

from langchain import ChatPromptTemplate
 
chat_history = ChatPromptTemplate([
    ("sys", "XYZ 고객 서비스에 오신 것을 환영합니다. 오늘은 어떻게 도와드릴까요?"),
    ("user", "계정에 로그인하는 데 문제가 있어요."),
    ("sys", "안타깝게 들었습니다. 계정과 관련된 사용자 이름 또는 이메일을 입력해주시겠어요?"),
    ("user", "네, user@example.com입니다."),
    ("sys", "감사합니다. 계정 정보를 확인하는 동안 잠시만 기다려주세요.")
])
 
additional_context = ChatPromptTemplate([
    ("sys", "비밀번호를 초기화했습니다. 새로운 비밀번호를 설정하는 방법에 대한 안내가 포함된 이메일을 곧 받게 될 것입니다."),
    ("user", "감사합니다! 얼마나 걸릴까요?"),
    ("sys", "이메일은 약 5분 안에 도착할 예정입니다. 보이지 않는 경우 스팸 폴더도 확인해주세요.")
])
 
# 전체 상호작용을 위해 채팅 기록과 추가적인 맥락 결합
complete_chat = chat_history + additional_context
 
formatted_chat = complete_chat.format_messages()

이 예제에서는 대화가 시간이 지남에 따라 진행되는 고객 서비스 상호작용을 시뮬레이션합니다. 여러 ChatPromptTemplate 인스턴스를 결합하여 유사한 상호작용을 자율적으로 처리할 수 있는 현실적인 대화를 만듭니다.

고급 사용 팁

  • 맥락적 가변성: 동적으로 다양한 맥락이나 사용자 입력에 적응하는 프롬프트를 생성하려면 외부 데이터 소스나 사용자 입력 변수를 템플릿에 포함시키는 것을 고려해보세요. 이를 통해 관련성이 높고 개인화된 프롬프트를 생성할 수 있습니다.

  • 피드백 루프: 챗 모델의 경우 모델이 생성한 응답을 사용하여 후속 프롬프트를 조작하세요. 이 반복적인 접근은 모델이 대화 도중에도 문맥과 일관성을 유지하는 데 도움이 됩니다.

  • 테스트 및 반복: 프롬프트 템플릿의 효과는 특정 작업과 모델에 따라 다를 수 있습니다. 다양한 서식을 실험하고 테스트 상호작용의 피드백을 통합하여 프롬프트를 미세 조정해보세요.

결론

LangChain의 프롬프트 템플릿은 다양한 언어 모델 작업에 맞는 구조적이고 동적인 프롬프트를 생성하기 위한 강력한 메커니즘을 제공합니다. PromptTemplateChatPromptTemplate의 고급 기능을 이해하고 활용함으로써 개발자는 언어 모델과 의미 있는 상호작용을 이룰 수 있는 복잡하고 세밀한 프롬프트를 생성할 수 있습니다. 인공지능과 언어 모델이 계속 발전함에 따라 LangChain과 같은 도구는 혁신적이고 인간 중심적인 경험을 만들기 위해 개발자가 가능성의 경계를 넓힐 수 있게 해줍니다.

Anakin AI - The Ultimate No-Code AI App Builder