기본 프롬프트 엔지니어링 태크닉

Intro

이전 챕터에서는 응답목적에 맞추어 프롬프트를 작문하는 방법들에 대해서 배워 봤습니다.

이번 챕터에서는 프롬프트를 최적화 할 수 있는 방법인 프롬프트 엔지니어링 패턴들에 대해서 알아보도록 하겠습니다.

프롬프트 엔지니어링을 통한 최적화로 얻을 수 있는 이점들은 다음과 같습니다.

  1. 정확한 응답 유도

    1. 프롬프트설계로 애매한 답변이 아닌 명확하고 원하는 정보를 얻을 수 있음

  2. 시간 & 비용 절감

    1. 적절한 프롬프트를 사용하면 불필요한 재요청 없이 원하는 결과를 빠르게 도출할 수 있음.

  3. 일관된 결과 유지

    1. 같은 질문에 대해 일정한 품질의 답변을 유지할 수 있음.

  4. AI모델 성능 극대화

    1. AI가 최적의 학습데이터를 활용할 수 있도록 유도할 수 있음.


1) Zero Shot Prompt

  • AI에게 예제를 주지 않고(Zero Shot) 작업을 수행하는 방법으로 LLM이 자체적으로 학습한 데이터를 기반으로 응답을 생성하도록 유도하는 방법

과일 apple정보를 얻고 싶다면?

특징

  • 빠른 적용 : 예제 없이 바로 사용할 수 있다.

  • 일반적인 질문에 적합 : 모델이 사전 학습된 지식을 사용하기 때문에 일반적인 질문에 적합하다.

한계점

  • 정확성이 떨어질 수 있음 : 모델이 문맥을 잘못 이해하여 잘못된 응답을 반환할 수 있다.

2) Few Shot Prmopt

  • AI에게 몇 개의 예제(Few Shot)를 제공한 후, 추가적인 입력에 대해 유사한 방식으로 응답하도록 유도하는 방법 으로 복잡한 문제 수행에 있어서 Zero Shot Prompt보다 정확도가 높다.

System : 
예제1:
    질문 : "tomato가 뭐야"
    답변 : "토마토는 비타민 C, 비타민 K, 칼륨, 엽산 등이 풍부하며, 특히 리코펜(lycopene)이라는 항산화 물질을 다량 함유하고 있는 과일입니다"
예제2:
    질문 : "Strawberry에대해서알려줘"
    답변 : "사과는 비타민 C, 망간, 엽산, 식이섬유가 풍부합니다. 항산화 성분도 많이 함유되어 있어 건강에 여러 이로운 효과를 제공하는과일입니다"
User :
질문 : Apple에 대해서 알려줘    
Gpt Response

특징

  • 사전 예제 필요 : 모델이 원하는 형식을 학습할 수 있도록 프롬프트에 예제를 포함시켜줘야 한다.

  • 일관된 응답 : Zero Shot에 비해 문맥을 더 잘 파악할 수 있으며 일관된 답변을 생성한다

  • 적응력 증가 : AI가 사전학습하지 못한 새로운 개념이나 패턴을 학습할 때 유용하다

  • 예시 품질의 중요도 : 예시품질이 응답결과에 영향을 끼친다.

한계점

  • 복잡한 추론이 필요한 문제는 예제만으로 부족할 수 있다.

Few Shot Prompt 실습

Few Shot Prompt 기법을 사용하여 1년 후 , 5년 후 , 10년 후 , 20년 후 의 미래계획을 각 1줄 이상작성하세요. 각 년도별 미래계획은 다음 형식에 맞춰서 출력되어야 합니다.

  • N년 후의 나는 ..........


3) Chain-of-Thought Prmopt(COT)

  • 복잡한 과제 수행을 위해 , AI에게 논리적인 사고 과정을 단계별로 설명(Chain of Thought)하도록 유도하는 기법

Few-Shot Prompt방식

질문: 길동이는 과일가게에서 사과 5개를 구매했습니다. 그 후 오렌지 5개, 아보카도 3개를 구매했습니다.
사과는 개당 2000원, 오렌지는 개당 1000원, 아보카도는 개당 5000원 이라면 총 가격은 얼마인가요?
답변 : 30000원
  • 계산을 바로 출력하지만 계산 과정이 없음.

COT 방식

질문: "어떤 가게에서 사과를 3개 사고, 오렌지를 2개 샀습니다. 
사과는 개당 2000원, 오렌지는 개당 1000원이면 총 비용은 얼마인가요? 
생각하는 과정을 단계별로 설명해주세요."
답변:  
1. 사과 3개의 가격은: 3 × 2000 = 6000원입니다.  
2. 오렌지 2개의 가격은: 2 × 1000 = 2000원입니다.  
3. 총 비용은 6000 + 2000 = 8000원입니다.  
따라서 총 비용은 **8000원입니다.**
  • 응답결과에 답을 얻기 위한 추론 과정이 포함됨

  • 단, 최신 LLM들은 이전 모델들에 비해 더묵 많은 데이터를 학습하여 자연스럽게 추론능력이 향상되었고, 추가적인 학습과정에서 COT방식을 학습하였기 때문에 응답을 생성하는 과정에서 COT가 필요하다고 판단되는 경우 자동으로 적용된다.

  • Zero Shot Prompt에 COT 자동 적용
  • 다만, 더욱 복잡한 문제나 정밀한 논리과정이 필요한 경우에는 아직 LLM이 문제해결방법에 대해 학습하지 못했을 가능성이 높으므로 COT를 사용하는 것이 효과적

특징

  • 단계별 사고 유도 : 응답을 바로 반환하는 것이 아닌 논리적인 추론을 수행한 후 응답을 생성한다

  • 복잡한 문제 해결 : 수학, 논리, 추론 기반의 질문에 효과적

  • 정확도 향상 : Few shot, Zero shot에 비해 더 깊이 있는 답변을 생성할 수 있다.

한계점

  • 소규모 LLM모델에서는 성능이 떨어진다.(100B 이상의 모델에서 사용할 것을 권장)

  • 직접적인 사고과정을 문장으로 작성해야 하는 번거로움이 있다.

  • 프롬프트의 완성도가 응답 퀄리티에 영향을 끼친다.

COT 실습

  • 다음 문제를 해결할 수 있는 COT Propmt를 작성하시오

철수는 시속 5km로 걷고, 영희는 시속 7km로 걷습니다. 
두 사람이 같은 출발점에서 동시에 출발했을 때, 
3시간 후 두 사람 사이의 거리는 몇 km인가요? 
논리적인 사고 과정을 포함하여 답을 도출하세요

4) Zero-Shot Chain-of-Thought(ZCOT)

  • ZCOT는 기존 Zero-Shot방식에 COT기법을 자연스럽게 적용하여 AI가 사고과정을 거쳐 응답을 생성하도록 유도하는 기법입니다.

  • 즉 COT와 같이 직접 사고과정을 작성하는 예제가 없이 단순한 질문을 던지더라도 AI가 자체적으로 단계별 사고과정을 포함한 답변을 생성해줍니다.

  • Zero shot기반의 프롬프트에 "단계적으로 사고하시오" 혹은 "논리적으로답변하시오" 같은 키워드를 추가하면 ZCOT방식의 응답 프롬프트가 완성된다.

어느 마을에 살고 있는 A,B,C,D 중 한명은 거짓말쟁이다.
다음 예제를 분석하여 거짓말쟁이를 찾는 단계별 사고 과정을 설명해 주세요.

A : B또는 C가 거짓말쟁이에요
B : 전 거짓말쟁이가 아닙니다
C : A가 거짓말쟁이입니다.
D : A 또는 B가 거짓말쟁이입니다.
GPT 응답 결과

이 문제의 목표는 A, B, C, D 네 사람 중에서 누가 거짓말쟁이인지 찾아내는 것입니다. 우리는 각 사람의 말을 분석하여 모순을 찾아야 합니다. 다음은 단계별 사고 과정입니다.

1. **조건 확인**:

- A: B 또는 C가 거짓말쟁이이다.

- B: 나는 거짓말쟁이가 아니다.

- C: A가 거짓말쟁이다.

- D: A 또는 B가 거짓말쟁이이다.

2. **가정 설정**:

- 우리는 네 사람 중 한 명만 거짓말쟁이라는 조건을 기반으로 각 가능성을 검토합니다.

3. **각 사람을 거짓말쟁이라고 가정하고 모순을 찾아봅시다**:

- **A가 거짓말쟁이라고 가정**:

- A의 말이 거짓이므로 B와 C 둘 다 거짓말쟁이가 아니어야 합니다. 이때, C의 말 "A는 거짓말쟁이"가 참이 되고, D의 말 "A 또는 B가 거짓말쟁이다"가 참이므로 모순이 발생하지 않습니다. 따라서 이 가정에서는 모순이 없습니다.

- **B가 거짓말쟁이라고 가정**:

- B의 말이 거짓이면, B는 거짓말쟁이가 맞습니다. A의 말 "B 또는 C가 거짓말쟁이이다"에서 B가 거짓말쟁이인 것이 성립하므로 만족합니다. 또한, D의 말 "A 또는 B가 거짓말쟁이이다"에서 B가 거짓말쟁이이므로 역시 만족합니다. 그러나 C의 말 "A가 거짓말쟁이다"는 모순이 없습니다. 따라서 B가 거짓말쟁이일 수도 없습니다.

- **C가 거짓말쟁이라고 가정**:

- C의 말이 거짓이므로 A는 거짓말쟁이가 아닙니다. 따라서 A의 말 "B 또는 C가 거짓말쟁이이다"에서 C가 거짓말쟁이인 것이 성립합니다. 또한, D의 말 "A 또는 B가 거짓말쟁이이다"에서도 A와 B 중 누구도 거짓말쟁이가 아닌 경우인데 이것은 모순입니다.

- **D가 거짓말쟁이라고 가정**:

- D의 말 "A 또는 B가 거짓말쟁이이다"가 거짓이면, A와 B 둘 다 거짓말쟁이가 아닙니다. A의 말 "B 또는 C가 거짓말쟁이이다"에서 C가 거짓말쟁이가 되어야 하므로 모순이 있으며, 또한 C의 말 "A가 거짓말쟁이다"에서 모순이 없습니다.

4. **결론**:

- A를 거짓말쟁이로 하면 전체적으로 모순은 없습니다. 다른 경우에는 모순이 발생합니다.

- 따라서, A가 거짓말쟁이입니다.

특징

  • 간결하고 강력한 사고력 : Zero shot방식의 간결함과 COT의 논리적 사고력을 동시에 갖춤

  • AI의 사고과정을 확인 할 수 있으므로 적절한 피드백을 부여하여 응답을 개선할 수 있다.

  • 복잡한 문제에서 더 정확한 답변을 얻을 수 있다

한계점

  • 논리적인 사고과정을 즉흥적으로 사용하기 때문에 논리적인 사고과정 자체가 불완전할 수 있다.

  • 단순한 질문에 대한 응답결과도 쓸데없이 장황해질 수 있다.(비용문제)

  • Few-shot COT보다는 부정확한 응답결과를 반환한다.

Zero-Shot COT 실습

  • 한 상점에 120개의 사과가 있습니다. 이 상점은 매일 15개의 사과를 판매합니다. 7일 후에는 몇 개의 사과가 남아 있는지를 ZCOT 기법을 활용하여 구하시오.


5) Self-Consistency(자기일관성)

  • 질문에 대한 답변들 중 가장 많이 등장하는 답변이 정답에 가까울 확률이 높다는 아이디어에서 만들어진 기법.

  • 기존 COT방식이 한 번의 사고과정을 거쳐 답변을 생성한다면 , Self-Consistency는 여러번의 독립적인 사고과정을 거친 후 , 가장 많이 등장하는 답변을 논리적으로일관성있는 최종 응답으로 채택 하는 기법

Self-Consistency 적용 과정

  1. 프롬프트 준비(Temperature는 0.7 이상)

  2. 같은 프롬프트를 최소 5 ~ 10번 실행

  3. 각 실행에서 얻은 답변을 기록

  4. 가장 많이 등장하는 답변을 채택

당신은 논리적 사고 과정을 단계별로 설명하는 AI입니다.

어느 마을에 살고 있는 A,B,C,D 중 한 명은 거짓말쟁이입니다.  
다음 예제를 분석하여 거짓말쟁이를 찾는 단계별 사고 과정을 설명해 주세요.  

A : B 또는 C가 거짓말쟁이에요  
B : 전 거짓말쟁이가 아닙니다  
C : A가 거짓말쟁이입니다.  
D : A 또는 B가 거짓말쟁이입니다.

논리적인 추론 과정을 거쳐 최종 답을 도출하세요.

특징

  • 응답 퀄리티 향상 : 단순 COT방식은 한 번의 추론과정만 거치기 때문에 실수할 가능성이 높으나, Self-Consistency는 여러번의 사고 과정을 거치므로 논리적으로 일관성 있는 답변을 채택할 가능성을 높여줌.

  • 정확한 정답 도출을 위해 여러 접근 방식으로 테스트하고자 할 때 유용하다.

한계점

  • 비용 문제 : 복잡한 추론과정을 거치므로 답변 하나를 생성하는데 비용이 많이 발생함

  • 프롬프트의 퀄리티에 의해 부정확한 응답이 발생할 가능성 존재

  • 복잡한 추론을 위해선 많은 양의 훈련데이터가 필요하므로 소규모 LLM에서는 성능이 저하된다.

정리


  1. 각 패턴의 동작방식에 대한 예시 이미지 추가하기

  2. 각 패턴을 적용 했을 떄의 응답퀄리티ㄱ 증가된 증거자료도 추가하기.

  3. 그 외, 요즘에는 기본이 되어버린 역할부여, 대화형 프롬프트같은 자료도 추가하기

  4. 최종정리

Last updated