partial_variables는 LangChain에서 프롬프트 템플릿(Prompt Template)을 다룰 때 사용되는 개념으로, 템플릿에 포함된 변수 중 일부를 미리 채워넣는 데 사용됩니다. LangChain의 ChatPromptTemplate이나 PromptTemplate과 같은 클래스에서 프롬프트 템플릿을 정의할 때, 동적으로 값을 삽입할 수 있는 placeholder(변수)를 설정합니다. partial_variables는 이 변수들 중 일부를 사전에 고정된 값으로 지정하여 템플릿의 유연성을 유지하면서도 반복적인 입력을 줄이는 데 유용합니다.
쉽게 말해, partial_variables를 사용하면 템플릿의 일부 변수를 미리 정의해 놓고, 나중에 다른 변수들만 동적으로 채워 넣을 수 있습니다. 이는 특히 반복적인 작업이나 특정 값이 고정된 상황에서 코드를 간결하게 만들어줍니다.
LangChain에서 partial_variables의 역할
LangChain의 프롬프트 템플릿은 주로 대화형 AI 모델(예: EXAONE 3.5나 Ollama에서 실행되는 모델)과 상호작용할 때 사용됩니다. 템플릿은 사용자가 모델에 전달할 질문이나 지시사항을 구조화하는 데 사용되며, partial_variables는 이 구조화 과정에서 일부 변수를 “부분적으로(partial)” 채워 넣는 역할을 합니다.
예를 들어, 시스템 메시지나 특정 역할을 고정하고 싶을 때 partial_variables를 활용할 수 있습니다. 이렇게 하면 나중에 invoke나 format 메서드를 호출할 때 나머지 변수만 제공하면 됩니다.
코드 예시
다음은 partial_variables를 사용한 간단한 예시입니다. 여기서는 EXAONE 3.5 모델을 Ollama에서 실행한다고 가정하고, LangChain의 ChatPromptTemplate을 사용합니다.
from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama
from datetime import datetime
# 날짜를 반환하는 함수 정의
def get_today():
return datetime.now().strftime("%m-%d")
prompt = PromptTemplate(
template="오늘의 날짜는 {today} 입니다. 생일이 정확히 오늘인 유명인 {n}명을 나열해 주세요. 생년월일을 표기해주세요.",
input_variables=["n"],
partial_variables={
"today": get_today # dictionary 형태로 partial_variables를 전달
},
)
prompt.format(n=3)
llm_model = ChatOllama(model='exaone3.5', temperature=0)
# chain 을 생성합니다.
chain = prompt | llm_model
# chain 을 실행 후 결과를 확인합니다.
result = chain.invoke(3).content
print (result)
오늘 날짜가 3월 22일이시군요! 정확히 오늘 생일인 유명인 3분을 소개해 드리겠습니다:
1. **브래드 피트 (Brad Pitt)**
– 생년월일: 1963년 3월 22일
2. **크리스티나 아길레라 (Christina Aguilera)**
– 생년월일: 1980년 3월 22일
3. **존 말코비치 (John Malkovich)**
– 생년월일: 1953년 3월 22일
이 분들 모두 오늘 생일을 맞이하고 계시네요! 🎉
# chain 을 실행 후 결과를 확인합니다.
print(chain.invoke({"today": "Jan 02", "n": 3}).content)
1월 2일에 태어난 유명인 세 분을 소개합니다:
1. **브래드 피트 (Brad Pitt)**
– 생년월일: 1963년 1월 2일
2. **케이트 윈슬렛 (Kate Winslet)**
– 생년월일: 1975년 1월 2일
3. **크리스티나 아길레라 (Christina Aguilera)**
– 생년월일: 1980년 1월 2일
이들 모두 오늘의 생일을 맞이하고 있습니다!
언제 유용한가?
- 고정된 컨텍스트: 시스템 메시지나 역할이 자주 변하지 않을 때.
- 코드 간소화: 반복적으로 동일한 값을 입력해야 하는 상황에서 중복을 줄임.
- 다양한 입력 처리: 일부 변수는 고정하고, 나머지는 사용자 입력에 따라 유연하게 변경할 때.
partial_variables는 LangChain에서 프롬프트 템플릿을 보다 효율적으로 다룰 수 있게 해주는 도구입니다. 로컬 모델과 Ollama를 활용한 환경에서는 모델의 역할, 언어 설정, 또는 기타 고정된 컨텍스트를 미리 정의하여 작업 흐름을 간소화하는 데 특히 유용합니다.