ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring AI 시리즈 5화 – Prompt Template과 Prompt Engineering 전략
    기술과 산업/언어 및 프레임워크 2025. 6. 3. 11:47
    728x90

    Spring AI에서 제공하는 PromptTemplate 기능을 바탕으로, LLM 응답을 더 정밀하게 제어할 수 있는 프롬프트 설계 전략을 살펴봅니다. 다양한 실전 예시와 함께 Prompt Engineering의 핵심 개념을 정리합니다.

     

    우리가 GPT나 Hugging Face 모델을 쓸 때 가장 많이 하는 실수 중 하나는 이겁니다.

    그냥 질문만 던지고 결과가 별로면 모델 탓을 한다는 거죠.

    사실 LLM의 성능은 모델의 파라미터 수나 학습 데이터만으로 결정되지 않습니다.
    **어떻게 질문하느냐(Prompting)**도 그 못지않게 중요합니다.
    프롬프트 엔지니어링(Prompt Engineering)은 이 “질문 설계”를 통해 원하는 출력을 이끌어내는 기술입니다.

    Spring AI는 이걸 위한 도구로 PromptTemplate을 제공합니다.
    이름 그대로, 프롬프트를 템플릿처럼 구성하고 변수만 바꿔서 사용할 수 있는 유용한 기능입니다.


    PromptTemplate 기본 구조

    Spring AI의 PromptTemplate은 단순한 문자열 포맷팅이 아닙니다.
    구조화된 프롬프트 설계를 가능하게 해줍니다.

    PromptTemplate template = new PromptTemplate("당신은 전문 마케터입니다. 다음 제품을 소개하는 이메일을 작성해주세요.\n제품: {product}");
    template.add("product", "AI 스마트 스피커");
    

    위 템플릿은 다음과 같은 프롬프트로 변환됩니다:

    당신은 전문 마케터입니다. 다음 제품을 소개하는 이메일을 작성해주세요.
    제품: AI 스마트 스피커
    

    이렇게 구조화된 프롬프트는 특히 반복적인 LLM 호출이 필요한 상황에서 유용합니다.


    실전 예시 1 – 요약 템플릿

    PromptTemplate template = new PromptTemplate(
        "다음 글을 한 문단으로 요약해주세요.\n\n{article}"
    );
    template.add("article", 사용자로부터 입력받은 긴 텍스트);
    

    요약 요청 시마다 매번 "요약해줘"를 직접 쓰는 대신, 템플릿화된 구조로 프롬프트를 유지할 수 있습니다.


    실전 예시 2 – 비교 분석

    PromptTemplate template = new PromptTemplate(
        "{topicA}와 {topicB}를 비교해서 장단점을 알려줘."
    );
    template.add("topicA", "Java");
    template.add("topicB", "Python");
    

    이런 방식으로 구성하면 웹에서 선택된 항목을 바로 변수로 넣어 프롬프트를 동적으로 생성할 수 있습니다.


    실전 예시 3 – 역할 부여 (Role Prompting)

    PromptTemplate template = new PromptTemplate(
        "너는 숙련된 법률 자문가야. 아래 계약서를 분석하고 주요 리스크를 조목조목 설명해줘.\n\n{document}"
    );
    template.add("document", 계약서 원문);
    

    이 방식은 "LLM이 어떤 역할을 수행해야 하는가"를 명시하는 Role Prompting 기법입니다.
    단순한 Q&A보다 훨씬 정밀하고 맥락 있는 응답을 유도할 수 있습니다.


    Prompt Engineering – 꼭 기억해야 할 4가지 팁

    1. 역할(Role)을 먼저 지정하자.
      예: “너는 변호사야”, “너는 베테랑 의사야”
      → 맥락을 잡아주는 것이 중요합니다.
    2. 출력 형식을 명시하자.
      예: “표 형식으로 요약해줘”, “JSON으로 반환해줘”
      → 파싱/응답의 안정성이 올라갑니다.
    3. 예시(Few-shot)를 넣으면 정밀도가 올라간다.
      예: 질문-답변 쌍을 2~3개 먼저 넣고, 마지막에 실제 질문을 붙이는 방식
    4. 너무 짧은 프롬프트는 지양하자.
      “요약해줘”만 던지면 모델은 애매하게 동작합니다.
      지시 + 입력 + 출력 형식이 모두 들어가야 안정적입니다.

    PromptTemplate vs 직접 문자열?

    Spring AI를 쓰면서 "굳이 PromptTemplate을 써야 하나?"라는 생각이 들 수도 있습니다.
    사실 단순한 경우엔 문자열만으로도 충분합니다.
    하지만 다음과 같은 상황에서는 템플릿 사용이 거의 필수에 가깝습니다.

    • 사용자 입력 기반으로 다양한 프롬프트를 생성해야 할 때
    • 프롬프트를 재사용하거나, 관리형 시스템에 저장할 때
    • 여러 프롬프트 버전을 실험할 때 (A/B 테스트 등)

    정리하자면

    항목 설명

    핵심 기능 변수 바인딩 기반 프롬프트 템플릿 생성
    장점 반복 구조 관리, 역할 기반 프롬프트 설계 용이
    사용 예 요약, 설명, 비교, 역할 지시, 분석 요청 등
    주의점 너무 단순한 프롬프트엔 오히려 비효율적일 수 있음

     

    728x90
Designed by Tistory.