Upstage

원본 보기

[프롬프트 엔지니어링 - Part 2] 프롬프트 엔지니어링의 정석: LLM 완벽 활용 가이드

2024/08/08 | 작성자: 김수완

이전 게시물에서는 프롬프트 엔지니어링과 그 구성 요소, 효과적인 결과물을 생성하기 위해 프롬프트를 디자인하는 방법에 대해 정의했습니다. 프롬프트 엔지니어링이 무엇이며 간단한 디자인을 통해 효율성을 개선하는 방법을 이해하려면 이전 콘텐츠를 다시 참조하세요!

[ → 프롬프트 엔지니어링 시리즈 Part 1 자세히 보기]

이번 Part 2 콘텐츠에서는 프롬프트 엔지니어링의 중요성과 함께 가장 핵심적인 프롬프트 엔지니어링 기법들부터 심화 기법까지 자세히 배워보겠습니다. Solar LLM과 함께 프롬프트 엔지니어링 방법론을 익혀볼까요?

프롬프트 엔지니어링의 중요성

본격적으로 방법론을 살펴보기에 앞서 프롬프트 엔지니어링이 무엇인지에 대해 다시 한 번 되짚어 보겠습니다. 프롬프트는 LLM으로부터 사용자가 원하는 결과를 도출하기 위해 AI 모델에 내리는 지시사항이고, 프롬프트 엔지니어링은 이러한 프롬프트 입력값들의 최적의 조합을 찾는 작업입니다.

그렇다면 프롬프트 엔지니어링은 왜 중요할까요? 프롬프트 엔지니어링은 LLM이 효과적으로 답변할 수 있게끔 지도해 주는 역할을 합니다. 사람도 여러 예시를 보면 이해하기 더 쉽고, 예습을 진행하는 것이 효율적인 공부를 하는 데 있어서 중요한 것처럼 LLM도 마찬가지로 미리 예시를 보여주거나 템플릿을 지정해 준다면 더 나은 답변을 얻을 수 있습니다.

프롬프트 엔지니어링 기법

1. N-Shot Prompting

Zero-shot, One-shot, Few-shot 이라는 용어를 들어보신 적이 있으신가요? 각 기법에는 어떤 차이가 있는지 알아보겠습니다.

  • Zero-Shot Prompting

    • 프롬프트(예제) 없이도 바로 답변을 생성하도록 하는 방법입니다. 아무 예시를 주지 않고 답변을 하도록 하기 때문에 LLM의 기존 성능을 측정하기 위해 사용됩니다.

Zero-Shot Prompting 예시

  • One-Shot Prompting

    • 하나의 예시를 LLM에게 제공한 후 답변을 받는 것을 의미합니다.

One-Shot Prompting 예시

  • Few-Shot Prompting

  • 여러개의 프롬프트 예시를 LLM에게 제시한 후 답변을 받는 방식을 의미합니다. LLM에게 더 많은 예시를 제공할수록 보다 정확한 답변이 가능합니다.

Few-Shot Prompting 예시


Solar LLM과 함께 감정 분석을 진행하며 더 자세한 예시를 살펴 보겠습니다.



2. Chain-Of-Thought (CoT) Prompting

Chain-Of-Thought Prompting은 마치 사람의 뇌가 단계적으로 계산을 하는 과정처럼 여러 단계의 추론 과정을 LLM에게 학습시켜 LLM의 추론 능력을 향상시키는 기법 중 하나입니다. '문제-답변'으로 프롬프트를 구성하는 것이 아니라  '문제-풀이 단계 1-풀이 단계 2-풀이 단계 3-답변'과 같이 풀이 과정과 함께 프롬프트를 구성하는 방식을 의미합니다.

수학 문제에 대한 답을 구성하는 프롬프트로 예시를 들어보겠습니다.

CoT 프롬프트를 사용하지 않은 예시

CoT 프롬프트를 사용한 예시

이를 위에서 배운 One-Shot, Few-Shot Prompting 개념과 접목시켜 보자면 프롬프트 예시 없이 바로 질문에 대한 답변을 요구한 첫 번째 예시는 Zero-Shot Prompting이며, 하나의 CoT 프롬프트와 함께 질문에 대한 답변을 요구한 두번째 예시는 One-Shot Prompting입니다. 더 많은 예시를 LLM에게 적용할수록 더욱 정확한 답변을 생성할 수 있습니다.

이 방법은 수학 문제 풀이 뿐만 아니라 일반 상식이나 날짜 이해, 기호 추론 등 다양한 태스크에 적용할 수 있습니다. 다음 예시는 상식(commonsense) 질문에 대해 Few-Shot CoT Prompt를 제공하여 얻은 답변입니다.

일반 상식 예시

3. Least-To-Most Prompting

이 기법은 복잡한 문제를 더 간단한 하위 문제로 나누어 순차적으로 해결하는 방법론입니다.

프로세스:

  1. Decomposing Prompt: LLM이 복잡한 문제를 하위 문제로 잘 분해할 수 있도록 주는 예시를 의미합니다.

  2. Solving Prompt: 분해된 하위 문제를 하나씩 해결하고 최종 답변을 생성하는 예시 프롬프트를 의미합니다. 

이 접근 방식은 LLM의 성능을 극대화하고, 특히 복잡하거나 창의적인 문제를 해결하는 데 매우 유용합니다.

이제Least-to-Most Prompting 방법론을 적용하여 몇 가지 문제를 해결해 보겠습니다.

Decomposing Prompt 예제

Solving Prompt 예제

첫 번째로, 왼쪽 예시와 같이 Decomposing Prompt를 통해서 복잡한 문제에 대한 하위 문제를 나누는 예시와 함께 문제 분해를 요청했습니다. 그 결과, LLM은 3단계로 문제를 잘 분리해 주는 것을 확인할 수 있었습니다.

그 후 오른쪽 이미지는 Solving Prompt를 통해서 하위 문제를 하나씩 해결하고 최종 답변을 생성하는 예시를 보여주고 풀고자 하는 문제의 분해된 하위 문제 해결을 요청한 결과입니다. 각 하위 문제에 대한 답변 및 최종 답변까지 제대로 생성된 것을 확인할 수 있습니다.

이처럼 Least-To-Most Prompting을 활용한다면 LLM이 추론 과정을 한 번 더 분해함으로써, 복잡한 문제에 대해 보다 정확한 답변을 제공할 수 있습니다.

4. Self Consistency Prompting

이는 Chain-Of-Thought (CoT) Prompting을 발전시킨 기술 중 하나입니다. CoT 방법의 경우 추론 과정에서 치명적인 실수가 한 번 발생한다면 추론 결과가 완전히 틀리는 경우가 발생합니다. Self-Consistency Prompting은 하나가 아닌 다양한 추론 경로를 샘플링하고 그 중 가장 일관적인 출력을 선택하는 방법입니다.

프로세스:

  1. LLM에게 Chain Of Thought (CoT) 프롬프트를 생성하도록 요청합니다.

  2. 다양한 추론 경로를 생성합니다.

  3. 최종 답변을 위한 가장 일관적인 출력을 선택합니다.

이 방법론은 다수의 추론 경로를 생성하고 평가하는 과정에서 추가적인 비용과 시간이 필요할 수 있지만, 복잡한 문제 해결의 정확성을 높이는데 도움이 됩니다.

세 단계로 이루어지는 Self-consistency 방법론의 예시 (출처: SELF-CONSISTENCY IMPROVES CHAIN OF THOUGHT REASONING IN LANGUAGE MODELS)

5. Generated Knowledge Prompting

Generated Knowledge Prompting을 사용하면 LLM이 사용자의 질문에 답변하기 전에 스스로 추가 정보를 생성하여 그 정보를 답변에 반영하는 기법입니다. 이는 LLM이 초기 프롬프트에 기반하여 필요한 배경 지식을 먼저 생성하고, 이를 활용하여 더 깊이 있는 답변을 제공하도록 합니다.

우선 아무런 배경 지식 없이 예시 질문에 대한 답변을 받아보면 아래와 같습니다.

이제 Knowledge를 생성하는 여러 프롬프트 예시들과 함께 예시 문장에 대한 지식을 생성해 봅시다.

Knowledge Prompt 예제

이제 해당 지식을 예시 질문과 함께 넣어보겠습니다.

생성된 지식을 예제 문에 적용하기:

Knowledge를 바탕으로 보다 더 체계적으로 답변을 하는 것을 알 수 있습니다. 이처럼 Generated Knowledge Prompting은 외부 지식이 아닌 모델 자체로부터 지식을 생성하기에 외부 지식의 품질, 신뢰성 등의 문제가 발생하지 않습니다. 또한, 생성된 지식을 바탕으로 LLM이 각 상황에 맞는 더 정확한 답변을 제공할 수 있도록 합니다.

요약

지금까지 우리는 주요 프롬프트 엔지니어링 기법을 다루어보았습니다. 각 기법의 핵심을 한 줄로 간결하게 요약해 볼까요?

  • N-Shot Prompting: 다양한 예시를 제공하여 LLM의 답변 정확도를 높이는 기법

  • Chain-Of-Thought Prompting: 단계별 추론 과정을 통해 문제 해결 능력을 향상시키는 기법

  • Least-To-Most Prompting: 복잡한 문제를 단순한 하위 문제로 분해해 해결하는 기법

  • Self Consistency Prompting: 다양한 추론 경로를 생성하여 가장 일관된 답변을 선택하는 기법

  • Generated Knowledge Prompting: LLM이 자체적으로 배경 지식을 생성해 더 깊이 있는 답변을 제공하는 기법

이처럼 다양한 프롬프트 엔지니어링 기법들을 활용하면 대규모 언어 모델의 성능과 답변의 정확성을 극대화할 수 있습니다. 업스테이지 콘솔에 접속하여 Solar Chat을 사용해 보세요. 이 콘텐츠를 통해 습득한 다양한 방법론을 시도해보고 원하는 결과를 얻어볼 수 있습니다. 다양한 실전 실험을 통해 더 나은 프롬프트를 설계하며, 프롬프트 엔지니어링의 새로운 가능성을 탐험하시길 기대합니다!

Solar Playground를 탐험하세요!

Solar Playground로 이동하여 이러한 기법들을 실제로 적용해 보세요. 실제로 실험을 수행하며 여러분의 프롬프트 엔지니어링 역량을 향상시키고 이를 다양한 작업에 적용시켜볼 수 있습니다.