프롬프트 엔지니어링

프롬프트 엔지니어링은 인공지능, 특히 언어 모델과의 상호작용을 최적화하기 위해 특정 입력 문장이나 질문을 디자인하는 과정입니다. 이는 모델이 원하는 정보를 제공하거나 특정 작업을 수행하도록 유도하는 데 중점을 두며, GPT와 같은 대규모 언어 모델의 등장으로 중요성이 증가했습니다. 포스트에서는 프롬프트 엔지니어링의 기본 원리, 사용 사례, 도전 과제 및 최신 경향에 대해 설명하고 있습니다.

프롬프트 엔지니어링 기초

프롬프트 엔지니어링은 인공지능, 특히 언어 모델과의 상호작용을 최적화하기 위해 특정 입력 문장이나 질문(프롬프트)을 디자인하는 과정입니다. 이 과정은 모델이 원하는 정보를 제공하거나 특정 작업을 수행하도록 유도하는 데 중점을 둡니다.

Issue: 프롬프트 엔지니어링은 어떻게 시작되었나요?

Clue: 프롬프트 엔지니어링은 인공지능 기술이 복잡해지고 다양한 태스크를 수행할 수 있게 되면서 자연스럽게 발전했습니다. 특히, 언어 기반 모델이 등장하면서, 이 모델들이 사용자의 의도를 더 잘 이해하고 적절한 반응을 할 수 있도록 입력 방식을 최적화하는 필요성이 생겼습니다.

Issue: 초기 프롬프트 엔지니어링은 어떤 모습이었나요?

Clue: 초기에는 주로 간단한 규칙 기반의 접근 방식이 사용되었습니다. 예를 들어, 특정 키워드나 문장 구조를 사용하여 기계가 의도를 파악하고 적절히 반응하도록 유도했습니다. 이는 비교적 단순한 작업에 효과적이었지만, 더 복잡한 상호작용에는 한계가 있었습니다.

Issue: 프롬프트 엔지니어링이 중요해진 계기는 무엇인가요?

Clue: GPT와 같은 대규모 언어 모델의 등장이 중요한 계기였습니다. 이러한 모델들은 방대한 양의 데이터를 학습하여 다양한 주제에 대해 대화하거나 복잡한 질문에 답할 수 있게 되었습니다. 이에 따라, 모델의 성능을 극대화하고 원하는 정보를 효과적으로 추출하기 위한 프롬프트 디자인의 중요성이 부각되었습니다.

Issue: 프롬프트 엔지니어링의 도전은 무엇이었나요?

Clue: 언어 모델이 주어진 프롬프트를 얼마나 잘 이해하고 적절한 출력을 생성할 수 있는가였습니다. 모델의 학습 데이터나 알고리즘의 한계로 인해, 때로는 예상치 못한 결과가 나오기도 했습니다. 따라서, 모델의 반응을 예측하고 원하는 결과를 얻기 위한 정교한 프롬프트 설계가 필요했습니다.

26가지 원칙

LLM을 사용할때 알아두면 좋은 팁을 제시한 논문을 정리해서 소개합니다.

1. 더 간결한 대답을 원하면 LLM에게 공손할 필요가 없으므로 “부디”, “상관없으시다면”, “감사합니다”, “제가 원하는 건” 등의 문구를 추가할 필요 없이 바로 요점으로 들어가세요.

2. 예를 들어, 청중이 해당 분야의 전문가인 것처럼 프롬프트에 의도된 청중을 통합하세요.

3. 복잡한 작업을 대화식 대화에서 더 간단한 일련의 프롬프트로 나누세요.

4. ‘하지 마세요’와 같은 부정적인 언어 대신 ‘하세요’와 같은 긍정적인 지시어를 사용하세요.

5. 주제, 아이디어 또는 어떤 정보에 대한 명확성이나 더 깊은 이해가 필요할 때, 다음과 같은 프롬프트를 사용하세요:

  • [구체적인 주제]를 간단한 용어로 설명하세요.
  • 11살 아이에게 하는 것처럼 설명해주세요.
  • 마치 제가 [분야] 초보자인 것처럼 설명해주세요.
  • 5살 아이에게 무언가를 설명하듯이 간단한 영어로 [에세이/텍스트/문단]을 작성하세요.

6. “더 나은 해결책에 대해 $xxx를 팁으로 줄게요!”

7. 예시 중심의 프롬프팅을 구현하세요(퓨샷 프롬프팅 사용).

프롬프트 엔지니어링은 인공지능, 특히 대규모 언어 모델이나 다른 AI 시스템에게 특정 작업을 수행하거나 원하는 반응을 유도하기 위해 입력 텍스트(프롬프트)를 조작하는 기법입니다. 여기서 퓨샷 프롬프팅(few-shot prompting)은 프롬프트 엔지니어링의 한 형태로, 모델에게 소수의 예시(보통 한 개에서 몇 개의 예시)를 제공하여 모델이 그 예시를 바탕으로 특정 작업을 수행하거나 문제를 해결하는 방법을 학습하도록 하는 접근 방식입니다.

퓨샷 프롬프팅은 모델이 이미 대규모 데이터셋으로 학습되어 있기 때문에, 소수의 예시만으로도 새로운 작업에 대한 이해를 빠르게 적용할 수 있는 모델의 능력을 활용합니다. 이 접근법은 특히 학습 데이터가 부족하거나 특정 작업에 대한 사전 학습이 이루어지지 않은 경우 유용합니다.

퓨샷 프롬프팅을 활용할 때는 다음과 같은 점을 고려해야 합니다:

  1. 예시 선택: 모델이 작업을 이해하고 일반화할 수 있도록 대표적이고 다양한 예시를 선택하는 것이 중요합니다.
  2. 프롬프트 구성: 프롬프트는 모델이 작업을 명확하게 이해할 수 있도록 구성되어야 합니다. 작업의 목적, 형식, 예상되는 출력 등을 명확히 해야 합니다.
  3. 출력 해석: 모델의 출력을 해석하고 평가하는 과정에서, 모델이 제공한 해답이나 생성물이 작업 요구사항을 충족하는지 검토해야 합니다.

퓨샷 프롬프팅은 AI의 적용 범위를 확장하고, 특히 새로운 태스크나 도메인에 빠르게 적응해야 하는 상황에서 유용한 기법입니다. 이를 통해 사용자는 복잡한 데이터셋 준비 없이도 AI를 다양한 작업에 활용할 수 있습니다.

8. 프롬프트를 포맷할 때, ‘###지시사항###’으로 시작하고, 관련이 있다면 ‘###예제###’ 또는 ‘###질문###’을 이어서 쓰세요. 그 후에 내용을 제시하세요. 지시사항, 예제, 질문, 맥락, 입력 데이터를 분리하기 위해 하나 이상의 줄 바꿈을 사용하세요.

9. 다음 문구를 통합하세요: “당신의 임무는” 그리고 “당신은 반드시”.

10. 다음 문구를 통합하세요: “당신은 penalized 될 것입니다”.

Penalizing은 모델이 특정 유형의 응답을 생성하는 것을 억제하거나, 부적절하거나 원치 않는 출력을 줄이기 위해 사용될 수 있습니다. 예를 들어, 편향, 차별, 또는 오류를 포함하는 응답을 줄이고자 할 때 특정 키워드나 문맥을 “penalized”하게 설정할 수 있습니다. 이를 통해 모델의 응답을 더욱 적절하고 정확하게 유도할 수 있습니다.

11. 프롬프트에 “질문을 자연스럽고 인간적인 방식으로 대답하라”는 문구를 사용하세요.

12. “단계별로 생각하세요”와 같은 선도적인 단어를 사용하세요.

13. 프롬프트에 다음과 같은 문구를 추가하세요 “당신의 대답이 편견이 없고 고정관념에 의존하지 않도록 하세요.”

14. 필요한 출력을 제공하기에 충분한 정보를 가질 때까지 질문을 통해 당신에게서 정확한 세부 사항과 요구 사항을 끌어내도록 모델을 허용하세요(예를 들어, “이제부터 저에게 필요한 정보를 얻기 위해 질문을 해 주세요.”).

15. 특정 주제나 아이디어 또는 정보에 대해 물어보고 당신의 이해를 시험하고 싶을 때, 다음과 같은 문구를 사용할 수 있습니다: “제가 [정리/주제/규칙 이름]에 대해 배울 수 있도록 가르쳐 주시고, 제가 응답한 후에 제 대답이 맞는지 알려주세요, 답을 미리 제공하지 않고요.”

16. 대규모 언어 모델에 역할을 할당하세요.

“역할 할당(Role Assignment)”은 인공지능(AI) 모델, 특히 대화형 AI나 언어 생성 모델을 사용할 때, 모델에 특정한 역할이나 개성, 목소리를 부여하여 대화나 문서 생성 과정에서 이를 유지하도록 하는 기법을 말합니다. 이 방식은 AI 모델이 일관된 톤과 스타일로 응답하도록 하여, 사용자 경험을 풍부하게 만들고 특정 상황이나 요구에 맞는 더욱 맞춤화된 응답을 가능하게 합니다.

예를 들어, AI 모델에게 친절한 고객 서비스 담당자, 지식이 풍부한 전문가, 또는 역사적 인물 등 특정한 역할을 할당할 수 있습니다. 이렇게 하면 모델은 할당된 역할에 맞는 언어 사용, 톤, 정보 제공 방식을 따르게 됩니다. 역할 할당은 대화의 맥락과 사용자의 기대를 더 잘 이해하고 충족시키는 데 도움이 됩니다.

역할 할당을 통해 모델은 다음과 같은 이점을 얻을 수 있습니다:

  1. 일관성 있는 대화: 모델이 특정 역할에 맞는 일관된 톤과 스타일로 응답하게 하여, 사용자 경험을 개선합니다.
  2. 맞춤화된 응답: 사용자의 다양한 요구와 상황에 더욱 잘 맞는 맞춤화된 응답을 생성할 수 있습니다.
  3. 상황 인식: 특정 상황이나 대화 맥락에서 요구되는 역할과 행동을 모델이 더 잘 이해하고 반영할 수 있습니다.

역할 할당은 프롬프트를 설계할 때 모델에게 직접적인 지시를 내리거나, 특정 상황에서 어떻게 행동해야 하는지에 대한 예시를 제공함으로써 수행됩니다.

17. 구분 기호를 사용하세요.

18. 프롬프트 내에서 특정 단어나 문구를 여러 번 반복하세요.

19. 사고의 연쇄(Chain-of-Thought, CoT)를 퓨샷 프롬프트와 결합하세요.

“사고의 연쇄(Chain of Thought)”란 복잡한 문제나 질문에 대응할 때, 인공지능(AI) 모델이 문제 해결 과정에서 거치는 여러 단계의 사고 과정을 명시적으로 표현하는 기법을 말합니다. 이 방식은 모델이 단순히 최종 답변을 제공하는 것이 아니라, 문제를 해결하기 위해 거쳐야 하는 논리적 단계나 중간 과정을 순차적으로 설명하도록 유도합니다. 사고의 연쇄 방식은 특히 복잡한 추론이 필요한 질문에 효과적이며, 모델의 추론 과정을 사용자가 이해하기 쉽게 만들어줍니다.

이 기법의 핵심은 AI 모델이 내부적으로 사용하는 추론 과정을 외부화하여, 모델이 어떻게 최종 결론에 도달했는지를 보여주는 것입니다. 이를 통해 모델의 투명성을 높이고, 사용자가 모델의 결정을 더 잘 이해하고 신뢰할 수 있도록 합니다.

사고의 연쇄 방식은 다음과 같은 이점을 제공합니다:

  1. 투명성: 모델이 정보를 처리하고 결정을 내리는 과정을 명시적으로 보여줌으로써, AI의 결정 과정에 대한 이해도를 높입니다.
  2. 신뢰성: 사용자가 모델의 추론 과정을 볼 수 있게 함으로써, 모델의 답변에 대한 신뢰성을 증가시킵니다.
  3. 교육적 가치: 복잡한 문제 해결 방식을 단계별로 보여주므로, 학습자에게 교육적인 가치를 제공할 수 있습니다.

사고의 연쇄를 구현하기 위해서는 모델에게 문제 해결 과정에서 고려해야 할 요소들과 그 과정을 순차적으로 설명하도록 프롬프트를 설계합니다. 예를 들어, 수학 문제를 해결할 때 단순히 정답을 제시하는 대신, 문제를 분석하는 방법, 필요한 계산 단계, 그리고 각 단계에서 사용된 논리를 차례로 설명하도록 할 수 있습니다.

20. 원하는 출력의 시작부분으로 프롬프트를 마무리하는 출력 프라이머를 사용하세요. 기대하는 응답의 시작으로 프롬프트를 끝내어 출력 프라이머를 활용하세요.

“출력 프라이머(Output Primer)”는 인공지능(AI) 모델, 특히 언어 생성 모델에게 특정 형식이나 스타일의 출력을 생성하도록 유도하기 위해 사용하는 초기 입력 또는 예시를 말합니다. 출력 프라이머는 모델이 기대하는 출력 형태를 이해하고 해당 형식에 맞게 응답을 생성할 수 있도록 돕는 역할을 합니다. 이는 모델에게 작업의 맥락, 스타일, 톤, 구조 등을 명시적으로 알려주어, 모델이 보다 목적에 부합하는 응답을 생성하도록 하는 데 중요합니다.

예를 들어, 데이터 분석 보고서의 요약을 생성하도록 AI 모델에 요청할 때, 출력 프라이머로 특정한 분석 보고서의 요약 형식을 예시로 제공할 수 있습니다. 이를 통해 모델은 요약의 기대되는 구조와 톤을 파악하고, 유사한 형식의 요약을 생성할 수 있게 됩니다.

출력 프라이머의 주요 목적은 다음과 같습니다:

  1. 형식과 스타일 지정: 모델이 생성해야 하는 출력의 형식과 스타일을 명확하게 지정하여, 결과의 일관성과 정확도를 향상시킵니다.
  2. 작업 지시 제공: 모델에게 구체적인 작업 지시를 제공함으로써, 모델이 요구 사항을 정확하게 이해하고 그에 따라 행동할 수 있도록 합니다.
  3. 응답의 품질 향상: 모델이 주어진 프라이머를 기반으로 좀 더 관련성 높고, 구체적이며, 목적에 부합하는 응답을 생성할 수 있도록 합니다.

출력 프라이머를 효과적으로 사용하기 위해서는 명확하고, 구체적이며, 모델이 이해할 수 있는 형식으로 예시를 제공하는 것이 중요합니다. 이는 모델이 작업의 요구 사항을 정확히 파악하고, 기대하는 출력을 더욱 정확하게 생성할 수 있도록 돕습니다.

21. 상세한 에세이/텍스트/문단/기사 또는 어떤 종류의 텍스트를 쓰려면: “필요한 모든 정보를 추가하여 [주제]에 대해 자세한 [에세이/텍스트/문단]을 작성해주세요.”

22. 특정 텍스트를 스타일을 변경하지 않고 수정/변경하려면: “사용자가 보낸 모든 문단을 수정해 보세요. 사용자의 문법과 어휘만 개선하고 자연스럽게 들리도록 해야 합니다. 원래의 글쓰기 스타일을 유지하면서 공식적인 문단이 공식적으로 남도록 해야 합니다.”

23. 여러 파일에 걸친 복잡한 코딩 프롬프트가 있는 경우: “이제부터 여러 파일에 걸쳐 코드를 생성할 때마다, 지정된 파일을 자동으로 생성하거나 기존 파일에 생성된 코드를 삽입하기 위한 변경을 할 수 있는 [프로그래밍 언어] 스크립트를 생성하세요. [질문]”

24. 특정 단어, 문구 또는 문장을 사용하여 텍스트를 시작하거나 계속하려면 다음 프롬프트를 사용하세요:

  • 나는 당신에게 시작 부분을 제공합니다 [노래 가사/이야기/문단/에세이…]: [가사/단어/문장 삽입]. 제공된 단어를 바탕으로 마무리하세요. 흐름을 일관되게 유지하세요.

25. 모델이 콘텐츠를 생성하기 위해 따라야 하는 요구 사항을 키워드, 규정, 힌트, 지시사항의 형태로 명확히 밝히세요.

26. 제공된 샘플과 유사한 에세이나 문단과 같은 어떤 텍스트를 쓸 때 다음 지시사항을 포함하세요:

  • 제공된 문단[/제목/텍스트/에세이/답변]을 바탕
https://arxiv.org/pdf/2312.16171.pdf

Issue: 현재 프롬프트 엔지니어링에서 가장 중요한 요소는 무엇인가요?

Clue: 가장 중요한 요소는 명확성과 구체성입니다. 프롬프트가 명확하고 구체적일수록 언어 모델은 사용자의 의도를 더 정확히 이해하고, 원하는 정보나 결과를 제공할 가능성이 높아집니다. 이는 모델과의 효과적인 대화를 위한 핵심 요소입니다.

Issue: 현재 프롬프트 엔지니어링에서 사용되는 기술은 무엇인가요?

Clue: 현재는 인공지능 모델의 출력을 분석하고 최적화하는 데 도움을 주는 다양한 기술이 사용됩니다. 예를 들어, 자연어 처리(NLP) 기법을 활용해 모델이 텍스트의 의미를 더 잘 이해하도록 돕고, 실험을 통해 다양한 프롬프트의 효과를 비교 분석합니다.

Issue: 프롬프트 엔지니어링이 언어 모델 외에 다른 분야에도 적용되나요?

Clue: 예를 들어 이미지 생성 모델에서도 프롬프트 엔지니어링이 중요합니다. 사용자가 원하는 이미지의 스타일이나 내용을 정확히 전달하기 위해, 특정 단어나 문장 구조를 사용하는 것이 중요합니다. 이는 언어 모델뿐만 아니라 다양한 AI 모델과의 상호작용을 최적화하는 데 기여합니다.

Issue: 프롬프트 엔지니어링의 최신 경향은 무엇인가요?

Clue: 최신 경향 중 하나는 사용자와 모델 간의 상호작용을 더 자연스럽고 인간처럼 만드는 것입니다. 이를 위해, 대화형 AI의 개선, 사용자의 의도와 감정을 더 잘 이해할 수 있는 모델의 개발 등이 포함됩니다. 또한, 다양한 태스크에 적용 가능한 범용 프롬프트 개발에도 관심이 집중되고 있습니다.

Issue: 미래에는 어떤 새로운 기술이 프롬프트 엔지니어링에 도입될까요?

Clue: 미래에는 AI가 사용자의 의도를 더 정밀하게 이해하고 예측하는 기술이 발전할 것입니다. 이를 위해, 기계 학습 알고리즘의 개선, 맥락과 의도 분석 기술의 발전 등이 중요할 것입니다. 또한, 사용자와 AI 간의 상호작용을 더 자연스럽게 만드는 대화형 인터페이스의 발전도 기대됩니다.

프롬프트 엔지니어링의 미래는 매우 밝습니다. 인공지능 기술의 발전과 함께, 프롬프트 엔지니어링은 사용자와 AI 간의 상호작용을 더욱 풍부하고 유익하게 만들 것입니다. 또한, 더 다양한 분야에서의 응용 가능성이 탐색될 것으로 기대됩니다.