# 개요
- LangChain의 PromptTemplate을 활용하여 반복적인 프롬프트 작성을 최적화하는 방법을 알아봅니다
- 기본적인 템플릿 구성부터 다중 변수 활용까지 실용적인 예제를 통해 설명합니다
- 일본어-한국어 번역 사례를 통해 실제 적용 방법을 살펴봅니다
# 문제 상황
LLM을 활용할 때 우리는 종종 비슷한 패턴의 프롬프트를 반복해서 작성하게 됩니다. 특히 일본어를 한국어로 번역하는 작업에서는 다음과 같은 지시사항이 자주 등장합니다:
- "~를 한국어로 번역해 주세요"
- "경어체로 번역해 주세요"
- "자연스럽게 번역해 주세요"
예를 들어 다음과 같은 상황을 생각해볼 수 있습니다:
```
입력: "何をしている?"라는 문장을 한국어로 번역해줘. 번역문은 항상 경어를 사용해줘.
출력: "무엇을 하고 계신가요?"
```
만약 경어 사용을 지정하지 않았다면, ChatGPT는 "무엇을 하고 있어?"와 같은 반말로 번역했을 것입니다. 이러한 반복적인 작업을 더 효율적으로 관리할 방법이 필요합니다.
# LangChain의 PromptTemplate 소개
LangChain은 이러한 문제를 해결하기 위한 우아한 솔루션을 제공합니다. 템플릿을 미리 정의해두고 필요한 변수만 교체하여 사용할 수 있어, 프롬프트 작성의 일관성과 효율성을 크게 높일 수 있습니다.
## 기본 템플릿 구성하기
가장 기본적인 형태의 PromptTemplate 사용법은 다음과 같습니다:
```python
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
# 템플릿 정의
template = PromptTemplate.from_template(
"""{sentence}라는 문장을 한국어로 번역해줘.
번역문은 항상 경어를 사용해줘."""
)
# 모델 설정
model = ChatOpenAI(model="gpt-4-mini", temperature=0)
# 체인 생성 및 실행
chain = template | model
result = chain.invoke({"sentence": "何をしている?"})
print(result.content)
```
## 다중 변수를 활용한 고급 템플릿
더 유연한 사용을 위해 여러 변수를 활용할 수 있습니다.
```python
# 다중 변수 템플릿
template = PromptTemplate.from_template(
"""{sentence}라는 문장을 {language}로 번역해줘.
번역문은 항상 경어를 사용해줘."""
)
# 여러 변수 입력
input = {
"sentence": "何をしている?",
"language": "한국어"
}
result = chain.invoke(input)
print(result.content)
```
# 사용시 주의사항
1. **변수 완전성**: 템플릿에 정의된 모든 변수는 `chain.invoke()` 실행 시 반드시 제공되어야 합니다. 하나라도 빠지면 에러가 발생합니다.
2. **변수 구문**: 변수명은 반드시 중괄호(`{}`)로 감싸야 합니다. 이는 파이썬의 문자열 포매팅 문법과 유사합니다.
3. **리터럴 중괄호**: 템플릿 내에서 중괄호 자체를 텍스트로 사용하고 싶다면 두 번 작성하면 됩니다: `{{이렇게}}`
# 마무리
PromptTemplate을 활용하면 반복적인 프롬프트 작성 작업을 크게 줄일 수 있습니다. 또한 템플릿화를 통해 프롬프트의 품질을 일관되게 유지할 수 있으며, 필요에 따라 유연하게 수정할 수 있습니다.
이러한 도구를 활용하면 LLM 기반 애플리케이션 개발에서 보다 체계적이고 유지보수가 용이한 코드를 작성할 수 있습니다.