ChatGPT Prompt Engineering 요약

앤드류 응 교수님의 프롬프트 강의와 OpenAI Cookbook을 참고하여 프롬프트 작성 가이드를 정리해보았습니다. 최근 ChatGPT가 등장하면서 개발자들에게 이를 잘 활용하는 것이 매우 중요해졌다고 생각합니다. TDD 창시자인 켄트 벡은 ChatGPT가 등장한 후, 자신이 가진 기술의 90%가 무의미해졌다고 말할 정도입니다. 그러나 나머지 10%는 1000배 더 중요해졌다고 말합니다. ChatGPT를 잘 활용하려면 프롬프트를 잘 작성하는 것이 중요한데요, 이에 대한 방법들을 알아보고 글로 정리해보겠습니다. 앞으로 이와 관련된 글도 종종 쓰게 될 것 같습니다. <프롬프트 작성이 중요한 이유> "13 * 17 = ?" 이라는 질문에 3초 내로 대답해보라는 명령을 받았다고 가정해봅시다. 인간은 이런 질문에 틀릴 수 있습니다. 하지만 그렇다고 인간이 두 자리 수 곱셈 계산을 못하느냐고 묻는다면 그렇지 않습니다. LLMs도 이와 비슷합니다. 한 번에 답을 요구하면 틀릴 수 있지만 차근차근 계산하도록 (= Let's think step by step) 질문하면 제대로 답합니다. 사람들이 자주하는 오해 중 하나는, 나의 질문에 언어 모델이 답을 틀리게 낸다면 "아, 이 정도 수준의 일은 못하는구나!"라고 생각할 수 있는데, 어떤 프롬프트로 지시하느냐에 따라 정답을 낼 수도 있고 못 낼 수도 있습니다. 프롬프트에 Let's think step by step를 추가하면 답변을 더 정확하게 작성한다고 합니다. 이 프롬프트는 상당히 일반적으로 사용할 수 있으며, 특히 문제 해결에서 정답률을 급격히 높입니다. (18% → 79% 향상) <프롬프트 작성 원칙> 프롬프트 작성 원칙에는 크게 두 가지를 기억해야 합니다. 1. 명확하고 구체적인 지시 작성하기 2. 모델에게 생각할 시간을 주기 명확하다는 의미는 이런 것입니다. - 엘런 튜닝에 대해 무언가를 작성해주세요 (X) - 엘런 튜닝의 과학적 업적과 개인적인 삶에 대해서 작성해주세요. (O) 명확한 지시를 위해 Few-shot Prompting이라는 방법이 있습니다. 이는 프롬프트에 예시를 제시하는 것입니다. 예를 들어 다음과 같은 문제 풀이를 내는 프롬프트를 살펴봅시다. Q: 로저는 5개의 테니스 공이 있습니다. 그는 테니스 공이 들어간 두 개의 캔을 샀고, 각각의 캔에는 3개의 공이 들어있습니다. 이때 테니스 공의 총 개수는? A: (여기서 어떻게 계산하는지 알려주는 것입니다.) 로저는 5개의 공으로 시작했고, 2개의 캔에는 각각 3개의 공이 들어있으니 총 6개의 공이 있습니다. 그러므로 5 + 6 = 11 입니다. Q: (이제 내가 물어보고 싶은 문제를 작성합니다.) 카페에는 23개의 사과가 있습니다. 20개는 점심에 사용했고, 6개를 추가로 샀습니다. 이때 사과의 총 개수는? 이처럼 프롬프트에 Few-shot 방식으로 예시를 제시하면 훨씬 더 잘 대답합니다. 성능적으로는 약 3배 정도 (18% -> 57%) 더 뛰어납니다. 이제 다음 방법인 모델에게 생각할 시간을 주는 방법을 알아봅시다. 모델에게 한 번에 결론을 내도록 하는 것이 아니라 중간 단계인 Step들을 명시해서 이를 먼저 수행하도록 하거나, 결론을 내기 전에 풀어야 할 핵심 과제가 있다면 이를 먼저 수행하도록 지시하는 것입니다. Step별로 질문을 단순화하여 복잡한 질문을 처리하는 방법으로 Least-to-most prompting이라고 합니다. 프롬프트로는 To solve {question}, we need to first solve:을 명시하는 것입니다. 또는 Perform the following actions: step1: … , step2: … step3: … 이렇게 step을 명시하면 됩니다. Least-to-most prompting을 사용했을 때 복잡한 추론 문제에 대해 성능이 16% -> 99.7%로 향상되었다고 합니다. <프롬프트는 어떻게 개발하는가?> 프롬프트는 반복적인 개발 프로세스(Iterative Prompt Development)를 통해 개발됩니다. 특별히 복잡한 것은 없습니다. 분석하고 개선하는 노력이 필요할 뿐입니다. 프롬프트 개발 프로세스는 다음과 같습니다. 1. LLMs에게 명확하고 구체적인 지시를 전달합니다. 2. 원하는 결과가 나오지 않았다면 왜 그런지 분석합니다. 3. 이를 바탕으로 프롬프트를 수정(refine)합니다. 4. 1-3 과정을 반복합니다. 앤드류 응(Andrew Ng) 교수님은 효과적인 프롬프트 엔지니어조차도 처음부터 모든 프롬프트를 완벽하게 알고 있지 않을 것이라고 말씀하십니다. 단지 이 과정을 잘 수행할 뿐입니다. 결론적으로, 프롬프트를 잘 작성하려면 다음과 같은 요소들을 고려해야 합니다. - 명확하고 구체적인 지시를 작성하세요. - 모델에게 생각할 시간을 주세요. - 프롬프트 개발은 반복적인 과정이므로 지속적으로 개선하려는 노력이 필요합니다. References - https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/ - https://github.com/openai/openai-cookbook/blob/main/techniques_to_improve_reliability.md

ChatGPT Prompt Engineering for Developers

Deeplearning

ChatGPT Prompt Engineering for Developers

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 5월 1일 오전 5:48

 • 

저장 167조회 17,517

댓글 0