랭체인 프로그래밍: 개념과 응용 – 004
템플릿은 일정한 형식을 유지하며 반복적인 작업을 쉽게 처리할 수 있게 해줍니다. 예를 들어, 문서 작성 템플릿을 사용하면 매번 새로운 문서를 작성할 때마다 기본적인 레이아웃과 스타일이 동일하게 유지되며, 그 안에 내용만 바꾸면 됩니다.
프롬프트를 작성하다보면 많은 부분이 같고 일부분은 다른 것들이 등장합니다. 이럴 때, 고정된 부분은 그대로 유지하고 변경 부분만 상황에 맞게 교체하는 방식으로 템플릿을 활용할 수 있습니다.
프롬프트는 지시 문자열이니, 생성 지시에서 고정 부분과 변경 부분을 구분해서 변경 부분을 대체할 수 있으면 됩니다. 이러 필요가 있을 때 사용할 수 있는 문자열 다루는 기술이 ‘문자열 포맷팅과 변수 대체’입니다.
LangChain에서는 프롬프트 템플릿을 문자열 포맷팅과 변수 대체를 구현한 PromptTemplate로 지원합니다.
어떤 포맷팅을 사용해야 할까요? 고정된 부분과 변경될 부분을 구분해야 합니다. 고정 부분은 고정된 문자열로 작성하면 되고, 변경 부분은 변수로 지정합니다.
- 변수를 다른 문자열과 구분하기 위해서 구분자를 사용합니다.
{}
중괄호를 사용해 변수 위치 표시- 예:
"안녕하세요, {name}님"
- 예:
- 변경 부분이 결정된다는 것은 변수 값이 설정된다는 것입니다. 변수 값이 설정되면 변수 부분을 변수 값으로 대체해 전체 문장을 완성합니다.
.format()
메서드나 f-스트링이나 딕셔너리 매핑을 사용합니다.- template = “안녕하세요, {name}님. {age}세이시군요.”
- result1 = template.format(name=”김철수”, age=30)
- result2 = template.format(name=”이영희”, age=25)
-
12345678template = """당신은 {character} 역할입니다.{personality}의 특성을 가지고 있습니다.상황: {scenario}요청: {task}"""
123456prompt = template.format(character="스타트업 CEO",personality="혁신적이고 도전적인",scenario="투자 유치 상황",task="투자자에게 회사의 비전 설명")
LangChain의 PromptTemplate
은 단순한 문자열 포맷팅을 넘어, LLM과의 상호작용을 더욱 정교하고 체계적으로 만들어주는 고급 도구입니다.
f-스트링(f-string)은 Python 3.6부터 도입된 문자열 포맷팅 방식으로, 문법이 간단하고 가독성이 뛰어난 것이 특징입니다. f-스트링은 문자열 앞에 기본 사용법:
장점:
|
PromptTemplate
- PromptTemplate.from_template
- 프롬프트 템플릿 문자열로 부터 PromptTemplate을 생성한다.
-
1234567template = PromptTemplate.from_template("""당신은 {role} 전문가입니다.질문: {question}응답: """" # 응답 처리 결과를 나타내는 자리 표시자)inputs = { "role": "의학", "question": "코로나19의 주요 증상은 무엇인가요?" } # 템플릿을 사용하여 프롬프트 생성 formatted_prompt = template.invoke(inputs)
-
- invoke
- 변수 값들로 프롬프트 템플릿의 가변 부분을 채워 프롬프트를 완성합니다.
- 이 템플릿은
{role}
과{question}
자리 표시자를 포함하여, 런타임 시 실제 값을 동적으로 삽입할 수 있도록 합니다.
- 이 템플릿은
-
12# 템플릿을 사용하여 프롬프트 생성formatted_prompt = template.invoke(inputs)
- 변수 값들로 프롬프트 템플릿의 가변 부분을 채워 프롬프트를 완성합니다.
- 프롬프트 템플릿 문자열로 부터 PromptTemplate을 생성한다.