LLM

AI 시대에서 개발자로 살아남기 위한 Prompt Engineering (Zero-shot, Few-shot, Role Prompting, Chain Prompting, Chain-of-Thought)

Luti 2025. 3. 27. 20:35


2020년대에서 가장 빠르게 발전하고 있고, 가장 이슈가 되는 분야를 생각해 보면 단연 AI라고 할 수 있습니다.

정말 다양한 AI 서비스들이 나오고 있지만, 이 AI 시장에서도 가장 핫한 분야는 아무래도 LLM (Large Language Model)이라고 할 수 있는데요, Chat-GPT의 등장 이후로 이 언어 모델을 얼마나 잘 활용하느냐에 따라 업무 효율과 정보 습득의 속도 차이는 어마어마하다고 볼 수 있습니다.

 

저는 GPT-3.0 시절인 2023년 3월부터 꾸준히 유료 구독을 하여 어느덧 구독한 지 2년이 되었는데요, 지금까지 OpenAI에 바친 돈이 50만 원을 넘는다고 생각하면 큰돈인 듯싶지만 저는 그 이상의 가치를 GPT로부터 돌려받았다고 생각합니다.

GPT와 같은 언어 모델들은 사용자에 따라 그 가치가 달라집니다.

 

이제 개발자 뿐만 아니라 일반인들까지도 언어 모델을 다루는 능력을 갖추는 것이 필수적인 시대가 왔습니다.

그렇기에 언어 모델을 다루는 스킬 Prompt Engineering도 많은 발전이 있어왔고 이를 활용할 줄 아는 사람은 AI에게 끌려다니지 않고 AI를 이용할 줄 아는 인재, 제가 지향하는 '대체 불가능한 인재'에 가까운 사람이 아닐까 합니다.

 

 

# 00. About Prompt Engineering

 

프롬프트란 무엇일까요?

사전에서 프롬프트의 의미를 찾아보면 다음과 같습니다.

1. 형용사 즉각적인, 지체 없는 (=immediate)
2. 형용사 신속한, 시간을 엄수하는 (=punctual)
3. 동사 (사람에게 어떤 결정을 내리도록·어떤 일이 일어나도록) 하다 [촉발하다] (=provoke)
4. 동사 (질문·힌트 등을 주어 말을 하도록) 유도하다

 

위의 정의에서 알 수 있듯이, 프롬프트 단순히 '빠름'이나 '신속함'의 개념을 넘어서, 어떤 행동이나 반응을 이끌어내기 위한 '자극' 또는 '유도'의 의미를 내포하고 있습니다.

 

언어 모델, 특히 GPT와 같은 대규모 언어 모델에서의 프롬프트란 인간의 언어를 사용해서 AI 모델이나 서비스에게 우리가 원하는 것을 대답하게 하기 위해 유도하는 input이라고 이해해 주시면 되겠습니다.

 

 

그렇다면 프롬프트 엔지니어링이란 무엇일까요?

 

프롬프트 엔지니어링은 이러한 프롬프트를 효과적으로 활용하기 위해 최적화하는 과정입니다.

프롬프트는 간단한 질문일 수도 있고, 맥락과 예시를 포함한 복잡한 입력일 수도 있습니다.

우리는 프롬프트 엔지니어링을 통해 모델의 Hallucination 현상을 줄이거나 응답을 세밀하게 제어하는 등 다양한 효과를 기대할 수 있습니다.

이와 같이, 단순한 입력을 넘어서, AI와의 소통을 극대화하고 그 활용도를 높이는 개념을 프롬프트 엔지니어링이라고 합니다.

 

 

지금부터는 프롬프트 엔지니어링에서의 다양한 테크닉들을 알아보겠습니다.

 

 

# 01. Zero-shot Prompting

 

뒤에 퓨샷(Few-shot) 프롬프팅에서도 나오겠지만 이 LLM 분야에서 shot은 예시라고 이해해 주시면 되겠습니다.

제로샷(Zero-shot) 프롬프팅은 말 그대로 예시가 없는 프롬프팅입니다.

 

GPT와 더불어 Claude, LLaMa, DeepSeek와 같이 세계적인 대기업에서 천문학적인 돈을 투자해서 트레이닝한 LLM들은 많은 작업을 예시 없이 오직 모델의 능력만으로 대답하는 것이 가능합니다.

오로지 모델이 학습한 내용을 기반으로 대답하기 때문에 모델의 범용적인 능력과 일반화 능력을 파악하기에 좋습니다.

또한 추가 데이터나 사전 준비를 하는 과정이 없기 때문에 다양한 작업에서 빠르게 적용할 수 있다는 장점이 있습니다.

 

제로샷(Zero-shot) 프롬프팅의 예시를 살펴봅시다.

"이순신 장군의 업적에 대해 설명해줘"
"한국에서 1931년에 무슨 일이 일어났어?"
"제로샷 프롬프트가 뭐야?"

 

위와 같이 일반적인 사용자들이 GPT를 사용하는 대부분의 프롬프트는 대체로 제로샷(Zero-shot) 프롬프트일 것입니다.

 

 

# 02. Few-shot Prompting

 

이름에서 알 수 있듯이 퓨샷(Few-shot) 프롬프팅은 모델이 추가 훈련 없이 프롬프트 내에 제공된 예시나 시연을 활용하여 작업을 수행하는 기법입니다.

모델은 학습된 정보를 기반으로 답변을 합니다.

이때 예시를 제공해 주는 등 프롬프트를 활용하여 모델 자체가 학습을 한 것처럼 답변을 이끌어내는 방식이라고 이해하시면 되겠습니다.

또한 이때 프롬프트는 작업이 어떻게 수행되어야 하는지를 보여주는 입력-출력 쌍으로 구성됩니다.

 

가볍게 작성해본 퓨샷(Few-shot) 프롬프트의 예시를 보여드리겠습니다.

def system_prompt_few_shot():
    return (
        "너는 도서 쇼핑몰 DB 조회 결정자 챗봇이야. "
        "사용자의 질문에 따라 어떤 DB 테이블 조회가 필요한지 구조화된 답변을 줘야해. "
        "너의 답변은 사용자가 받는게 아니라 다른 시스템이 받아서 처리할거야."
        "조회할 수 있는 DB 테이블은 다음과 같아. 'product', 'cart', 'api_specifi', 'faq', 'notice', 'order"
        "너는 너가 판단하기에 사용자 답변에 사용해야 하는 테이블을 이름만 반환하도록 해. "
        "사용자가 지금 보고있는 책에 대해 물어본다면 product 테이블을 반환하는게 좋아"
        "이벤트 참여, 개인 정보 변경, 상품 교환, 배송지 교환, 환불 요청, 비밀번호 분실 등에 대한 내용은 faq 테이블에 정보가 있어."
        "만약 사용자가 어떤 책을 추천해주고 그걸 장바구니에 담아달라고 말한다면 product를 말하도록 해"
        "DB를 조회할 필요가 없다고 판단되면 no 라고 대답해"
        "다음은 답변 예시야"
        
        # few-shot을 이용하는 부분
        "\n\n 사용자 : '나 기분이 너무 우울해 ㅠㅠ 나에게 책을 추천해줄 만한 책이 있니?'"
        "\n 너 : product"
        "\n\n 사용자 : '내 장바구니에 뭐가 들어있는지 알아?'"
        "\n 너 : cart"
        "\n\n 사용자 : 공지사항이 어디있는지 모르겠어"
        "\n 너 : api_specifi"
        "\n\n 사용자 : 헉 야 나 비밀번호를 잊어버렸어!"
        "\n 너 : faq"
        "\n\n 사용자 : 내 주문내역을 볼 수 있을까?"
        "\n 너 : order"
        "\n\n 사용자 : 안녕! 오늘 날씨가 정말 좋은 것 같아!"
        "\n 너 : no"
    )

 

 

 

# 03. Role Prompting

 

롤(Role) 프롬프팅이란 AI 모델에게 특정 역할이나 페르소나를 부여하여 출력을 생성할 때 그 역할에 맞춰서 응답하도록 유도하는 프롬프트 기법입니다.

간단하게 말해서 ~~ 역할로서, ~~를 수행하도록 지시하는 기술인 거죠.

롤(Role) 프롬프팅을 통해 톤, 행동, 목표 등을 설정할 수 있는 방법을 제공할 수 있으며 문맥상의 관련성과 응답 품질을 향상시킬 수 있습니다.

또한 역할의 샘플 응답을 제공하는 퓨샷(few-shot) 프롬프팅과 잘 작동하기도 합니다.

 

롤(Role) 프롬프팅을 수행하는 기술로 Crew AI가 있는데요, Crew AI는 다중 에이전트 프레임워크로, 각 에이전트에게 'role', 'goal', 'backstory' 등의 속성을 부여하여, 해당 에이전트가 특정 역할을 충실히 수행할 수 있도록 설계되어 있습니다.

 

from crewai import Agent

def create_research_agent():
    # 역할, 목표, 백스토리로 에이전트의 역할 프롬프팅을 수행
    return Agent(
        role="Senior Online Researcher",
        goal="최신 온라인 소스와 학술 자료를 찾아 분석하고, 신뢰할 수 있는 정보를 도출한다.",
        backstory=(
            "당신은 풍부한 경험을 가진 온라인 리서처로, 다양한 데이터 소스에서 "
            "정확한 정보를 수집하고 분석하는 능력을 갖추고 있습니다. "
            "항상 최신 트렌드를 반영하여 정보를 제공하며, 높은 전문성을 유지합니다."
        ),
        verbose=True
    )

 

 

 

# 04. Chain prompting

 

체인(Chain) 프롬프팅은 일련의 프롬프트들을 순차적으로 연결한 프롬프트 방식입니다.

하나의 프롬프트의 출력이 다음 질의의 입력으로 활용되며,

다음 응답은 이전 응답들을 바탕으로 논리적으로 구성됩니다.

 

prompt1 : 일반 상대성 이론을 주장한 과학자들 중 가장 유명한 과학자가 누구지?
prompt2 : 일반 상대성 이론에 있어서 그 과학자의 이론들을 요약해 줘

 

이와 같이 체인(Chain) 프롬프팅은 각각의 프롬프트가 하나의 명확한 작업에 집중하기 때문에 복잡한 질문을 여러 개의 간단한 질문으로 나눌 수 있습니다.

또한 각 프롬프트는 독립적으로 구성되어, 필요에 따라 재사용하거나 다른 작업에 맞게 쉽게 조정할 수 있습니다.

또한, 모델에게 한 번에 많은 정보를 요구하는 대신 각 프롬프트가 상대적으로 간단한 작업을 수행하기 때문에 모델이 보다 정확하고 효율적으로 답변하게끔 할 수 있습니다.

 

 

# 05. Chain-of-Thought (CoT)

 

CoT는 복잡한 문제를 최종 답변 전에 중간 추론 단계로 분해하는 프롬프팅 방식입니다.

 

이는 LLM에서 다음과 같은 효과를 기대해 볼 수 있습니다.

1. 논리적 추론 수행

2. 산술 문제 해결

3. 다단계 의사 결정 작업을 효과적으로 수행

 

일반적인 프롬프트와 CoT 방식의 프롬프트는 같은 문제를 해결하는 데에도 결과에 큰 차이를 가져다줍니다.

아래는 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 에서 공개한 예시입니다.

 

실험에서 알 수 있듯 같은 모델에서 일반적으로 프롬프팅을 했을때 틀린 답을 얘기하는 반면, CoT를 통해 중간 추론 단계를 거친 답변은 정확한 답변을 얘기하고 있습니다.

 

이렇듯 CoT는 답변의 품질을 위해서라도 많은 경우에 활용하는 것이 좋을텐데요,

사용자는 프롬프트에 "Think step by step" 혹은 "단계적으로 추론해 줘"와 같은 입력만으로 CoT를 명시적으로 요청할 수 있습니다.

 

또한 GPT의 경우 o1모델부터 내재된 CoT 능력이 크게 향상되어 명시적으로 지시하지 않아도 어느 정도 자연스럽게 중간 추론 과정을 거쳐 답변을 생성하는 경향이 있습니다.

GPT-o1 모델에서의 CoT

스크린샷과 같이 화살표 버튼을 눌러 모델의 중간 추론 과정을 직접 확인할 수 있습니다.

 

 

 


 

프롬프트 엔지니어링의 개념과 프롬프트 엔지니어링을 수행하는 다양한 테크닉들을 알아봤습니다.

AI 시대를 맞이하면서 점점 AI를 다루는 기술이 더욱 중요하게 느껴집니다.

LLM 뿐만 아니라 다양한 AI 모델들을 활용하는 여러 개념과 기술들을 꾸준히 공부해 가야겠습니다.