프롬프트 템플릿(Template)

프롬프트 템플릿(Template)

LLM 프롬프트를 코드 안에서 문자열로 조립하다 보면 금방 지저분해져요. Outlines의 템플릿은 재사용 가능한 프롬프트 구조를 만들고, 자리표시자에 동적 내용을 채워 넣는 방법이에요. 반복, 조건과 같은 템플릿 언어 기능을 지원해서 복잡한 프롬프트도 깔끔하게 관리할 수 있어요.

템플릿 만들기

outlines.Template을 문자열이나 파일에서 만들 수 있어요. {{ name }} 같은 자리표시자가 동적 내용으로 바뀌어요.

from outlines import Template

template_str = """
Hello, {{ name }}!
The weather today is {{ weather }}.
"""

template = Template.from_string(template_str)

파일에서 만들 땐 Template.from_file(...)을 씁니다.

출처: https://dottxt-ai.github.io/outlines/latest/features/utility/template/

프롬프트 함수

Outlines의 @outlines.prompt 데코레이터를 쓰면 함수의 docstring을 템플릿으로 사용해요. 함수를 호출하면 템플릿이 렌더링된 문자열을 반환해요. 리스트·딕셔너리 반복과 조건을 템플릿 언어로 직접 표현할 수 있어요.

import outlines

@outlines.prompt
def few_shots(instructions, examples, question):
    """{{ instructions }}
    Examples
    --------
    {% for example in examples %}
    Q: {{ example.question }}
    A: {{ example.answer }}
    {% endfor %}
    Question
    --------
    Q: {{ question }}
    A:
    """

instructions = "Please answer the following question following the examples"
examples = [
    {"question": "2+2=?", "answer": 4},
    {"question": "3+3=?", "answer": 6},
]
question = "4+4 = ?"

prompt = few_shots(instructions, examples, question)
print(prompt)

이 코드는 지시문과 예시, 질문이 렌더링된 실제 프롬프트 문자열을 돌려줘요. 예시를 반복해서 채워 넣기 때문에 프롬프트를 수동으로 조립하는 것보다 훨씬 읽기 좋아요.

템플릿을 구조화 출력과 결합

템플릿만으로는 부족하고, 저장한 함수와 출력 구조를 함께 묶고 싶다면 outlines.Function을 써요(Application 문서 참고). 함수는 프롬프트 템플릿과 출력 타입을 하나로 캡슐화해서 프로그램의 다른 부분에서 호출 가능한 형태로 만들어 줘요.

더 알아보기