안녕하세요, 저는 HolySheep AI의 기술 문서 엔지니어입니다. 이번 튜토리얼에서는 Jinja2 템플릿 엔진과 LLM API를 결합하여 재사용 가능하고 유연한 프롬프트 템플릿 시스템을 만드는 방법을 단계별로 알려드리겠습니다.
왜 Prompt 템플릿이 필요한가?
여러분이 AI API를 사용할 때, 같은 구조의 프롬프트를 반복 작성해야 하는 경우가 많습니다. 예를 들어:
- 이메일 생성: 항상 "제목, 본문, 맺음말" 구조
- 코드 리뷰: "파일 경로, 변경사항, 개선점" 형식
- 고객 지원: "인사, 문제 확인, 해결책, 마무리" 패턴
템플릿 엔진을 사용하면 이런 반복 작업을 자동화하고, 비즈니스 로직과 프롬프트 구조를 분리할 수 있습니다.
1. 개발 환경 준비
먼저 필요한 도구를 설치합니다. 터미널에서 다음 명령어를 실행하세요:
# Python 프로젝트 생성 및 의존성 설치
mkdir prompt-template-engine
cd prompt-template-engine
python -m venv venv
Windows의 경우
venv\Scripts\activate
macOS/Linux의 경우
source venv/bin/activate
필수 패키지 설치
pip install jinja2 openai python-dotenv
설치 확인
pip list | grep -E "jinja2|openai"
💡 팁: requirements.txt 파일을 만들어 팀원들과 의존성을 공유하세요.
# requirements.txt
jinja2==3.1.3
openai==1.12.0
python-dotenv==1.0.1
2. HolySheep AI API 연결 설정
이제 HolySheep AI와 연결을 설정합니다. HolySheep AI는 지금 가입하면 무료 크레딧을 제공하며, 海外 신용카드 없이 로컬 결제가 가능합니다.
# config.py - HolySheep AI 설정
import os
from dotenv import load_dotenv
load_dotenv()
HolySheep AI API 설정
HOLYSHEEP_API_KEY = os.getenv("HOLYSHEEP_API_KEY")
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
모델별 가격 (2024년 기준, USD per Million Tokens)
MODEL_PRICING = {
"gpt-4.1": {"input": 8.00, "output": 32.00}, # $8/MTok 입력, $32/MTok 출력
"claude-sonnet-4-5": {"input": 15.00, "output": 75.00}, # $15/MTok 입력
"gemini-2.5-flash": {"input": 2.50, "output": 10.00}, # $2.50/MTok 입력
"deepseek-v3.2": {"input": 0.42, "output": 1.65}, # $0.42/MTok 입력
}
print(f"✅ HolySheep AI 연결 완료: {HOLYSHEEP_BASE_URL}")
print(f"📊 사용 가능 모델: {list(MODEL_PRICING.keys())}")
# .env 파일 (절대 GitHub에 업로드하지 마세요!)
HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY
DEFAULT_MODEL=gemini-2.5-flash # 비용 최적화를 위한 기본 모델
3. Jinja2 템플릿 기초
Jinja2는 Python에서 가장 인기 있는 템플릿 엔진입니다. 중괄호 {{ }}로 변수를, {% %}로 로직을 표현합니다.
# templates/email_template.j2
안녕하세요 {{ recipient_name }}님,
{{ greeting }}
{{ main_content }}
{% if include_closing %}
감사합니다.
{{ sender_name }}
{{ sender_position }}
{% endif %}
---
📧 자동 생성된 메시지입니다.
# template_engine.py - 템플릿 엔진 핵심 클래스
from jinja2 import Environment, FileSystemLoader, select_autoescape
from pathlib import Path
from typing import Dict, Any, Optional
import hashlib
import json
class PromptTemplateEngine:
"""LLM 프롬프트 템플릿 관리 엔진"""
def __init__(self, template_dir: str = "templates"):
self.template_dir = Path(template_dir)
self.env = Environment(
loader=FileSystemLoader(str(self.template_dir)),
autoescape=select_autoescape(['html', 'xml']),
trim_blocks=True, # 블록 끝 줄바꿈 제거
lstrip_blocks=True # 블록 앞 공백 제거
)
self._cache = {} # 템플릿 캐시
def render(self, template_name: str, context: Dict[str, Any]) -> str:
"""템플릿 렌더링 (캐시 지원)"""
template = self.env.get_template(template_name)
return template.render(**context)
def render_string(self, template_str: str, context: Dict[str, Any]) -> str:
"""문자열 템플릿 직접 렌더링"""
template = self.env.from_string(template_str)
return template.render(**context)
사용 예시
engine = PromptTemplateEngine()
방법 1: 파일에서 템플릿 로드
result = engine.render("email_template.j2", {
"recipient_name": "홍길동",
"greeting": "새로운 기능 업데이트 소식을 전해드립니다.",
"main_content": "이번 업데이트에는 AI 자동완성 기능이 추가되었습니다.",
"include_closing": True,
"sender_name": "개발팀",
"sender_position": "매니저"
})
print(result)
4. LLM 동적 생성 시스템 구축
이제 HolySheep AI의 LLM API와 연결하여 동적 콘텐츠를 생성하는 시스템을 만들겠습니다.
# llm_client.py - HolySheep AI LLM 클라이언트
from openai import OpenAI
from typing import Optional, Dict, List
import time
class HolySheepLLM:
"""HolySheep AI API 래퍼 클래스"""
def __init__(self, api_key: str, base_url: str = "https://api.holysheep.ai/v1"):
self.client = OpenAI(api_key=api_key, base_url=base_url)
self.last_request_time = 0
self.request_count = 0
def generate(
self,
prompt: str,
model: str = "gemini-2.5-flash",
temperature: float = 0.7,
max_tokens: int = 1000
) -> Dict[str, any]:
"""LLM 응답 생성"""
start_time = time.time()
response = self.client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "당신은 도움이 되는 AI 어시스턴트입니다."},
{"role": "user", "content": prompt}
],
temperature=temperature,
max_tokens=max_tokens
)
latency_ms = int((time.time() - start_time) * 1000)
self.request_count +=