ChatGPT 를 200% 활용하는 방법! feat. 프롬프트 엔지니어링
오늘은 ChatGPT를 최적화하는 프롬프트 기법을 공유해 보겠습니다. ChatGPT는 나의 작업을 위협하는 도구가 아니라 생산성을 높여주는 도구라고 생각합니다. 퍼듀 대학교에서 실시한 최근 연구에 따르면, 스택 오버플로우에서 517개의 코딩 문제를 제시했을 때 ChatGPT는 52%의 경우 부정확하거나 작동하지 않는 코드가 포함된 답변을 제공한 것으로 나타났습니다.
스택 오버플로우 답변과 ChatGPT 답변을 비교할 수 있는데, 이 연구에 따르면 ChatGPT는 스택 오버플로우에 비해 정확성, 포괄성, 간결성 및 유용성에서 낮은 순위를 차지했습니다. 또 다른 문제는 이 모델이 정답이 틀리거나 반만 맞더라도, 자신감 있는 언어로 설득력 있는 답변을 생성하는 것으로 밝혀졌다는 점입니다. 때때로 환각을 보고 문어가를 지어내기 때문에 모든 답변을 신뢰할 수는 없으며 질문하는 주제에 대해 어느 정도 이해해야만 답변을 평가할 수 있습니다.
그렇기 때문에 ChatGPT는 우리를 완전히 대체할 수 있는 도구라기보다는 올바르게 사용한다면 생산성을 높여줄 수 있는 도구라고 생각합니다. 검색을 잘하지 않으면 좋은 검색 결과를 얻을 수 없는 구글과 마찬가지로, 이를 더 효과적으로 사용하려면 올바른 질문을 하는 방법과 질문의 틀을 잘 짜는 방법을 배워야 합니다.
미국 테네시주 밴더빌트 대학교 컴퓨터 과학과의 연구원들은 ChatGPT에서 더 나은 답변을 얻을 수 있는 것으로 인증된 여러 가지 프롬프트 패턴이 포함된 논문을 발표했습니다. 패턴의 효과는 필요한 내용에 따라 다를 수 있습니다. 따라서 질문에 더 적합한 패턴을 찾을 때까지 자유롭게 혼합하거나 번갈아 가며 사용하도록 합니다.
페르소나 패턴 (The Persona Pattern) :
페르소나 패턴을 사용하여 ChatGPT가 생성할 응답의 종류와 집중해야 할 세부 사항을 안내할 수 있습니다.
예를 들어 코드를 검토하거나 코드에서 버그를 찾고 싶다면 다음과 같이 먼저 ChatGPT에 다음과 같이 알려줘야 합니다.
" 여러분은 FAANG 회사의 선임 엔지니어인 척할 것입니다.
보안과 성능에 주의를 기울여 다음 코드를 검토하세요.
선임 엔지니어라면 해당 코드에 대해 생성할 수 있는 출력을 제공하세요."
그런 다음 질문을 합니다.
이렇게 하면 ChatGPT가 더 나은 결과를 제공하기 위해 초점을 맞추고 주목할 대상을 좁힐 수 있습니다.
또한 다음과 같이 ChatGPT에 알려줄 수도 있습니다.
"이제부터 책 편집자가 되어 가독성에 중점을 두고 다음 블로그 글을 검토해 보세요."
"마케팅 전문가라고 가정하고, 다음 슬로건을 검토하고 다른 인기 캠페인에 기반하여 개선 사항을 제안하세요."
이 패턴을 사용하니까 확실히 답변의 품질이 향상되었고, ChatGPT가 내가 관심 있는 주제에 대해서만 이야기할 수 있습니다.
참고로, 살아있는 사람이나 유해한 것으로 간주되는 사람을 언급할 경우 ChatGPT의 안전 필터가 작동할 수 있으므로 주의해야 합니다.
레시피 패턴 (The Recipe Pattern) :
이 패턴은 달성하고 싶은 목표가 있고, 재료는 알고 있으며, 달성하기 위한 단계는 어느 정도 알고 있지만, 이를 모두 조합하는 데 도움이 필요할 때 유용합니다.
이 패턴은 프로그래머에게 특히 유용하며, 많은 시간을 절약할 수 있고 코드를 실제로 이해하는 데 도움이 됩니다.
이 패턴은 케이크를 만들고 싶은데 밀가루, 물, 설탕이 있고 이를 섞어야 한다는 것은 알지만 어떻게, 어떤 순서로, 다음에
무엇을 해야 할지 잘 모르겠다고 ChatGPT에 말하는 것과 같습니다.
실제 예는 다음과 같습니다.
" 데이터를 암호화하는 Rust 프로그램을 작성하려고 합니다.
사용자 입력을 읽고, 유효성을 검사하고, 암호화하고, 암호화된 데이터를 반환해야 한다는 것을 알고 있습니다.
이를 위해, 전체 단계 순서를 알려주고, 누락된 단계를 채우고, 불필요한 단계까 있는지 확인해 주세요."
"누락된 단계를 채우세요"
는 우리가 놓친 부분이 있을 경우 후속 질문을 하지 않고 ChatGPT가 부족한 부분을 바로 채우도록 하고, "불필요한 단계를 확인해 주세요"
라는 마지막 문구는 더 나은 레시피를 만들기 위해 부정확한 부분을 찾아내도록 더 나은 레시피를 만들기 위해 부정확한 부분을 찾아내도록 ChatGPT에 지시하기 때문에 유용합니다.
리플렉션 패턴 (The Reflection Pattern) :
모든 주니어 개발자가 이 패턴을 사용해야 한다고 생각합니다.
안다시피, 우리는 Google이나 스택 오버플로우를 사용하더라도 코드를 그냥 복사, 붙여 넣기만 해서는 안되며, 코드가 무엇을 하는지 항상 이해해야 합니다.
리플렉션 패턴을 사용하면 모든 답변에 대한 이유를 설명하도록 GPT에 요청할 수 있습니다.
이는 답변을 더 잘 이해하는 데 도움이 되고 모델이 환각을 일으킬 때 모델을 파악하는 데 전체적으로 도움이 될 수 있습니다.
따라서 다음에 질문하기 전에 ChatGPT에 다음 사항을 알려줍니다.
"답변을 제공할 때는 답변의 근거와 가정을 설명하세요.
선택한 사항을 설명하고 잠재적인 제한 사항이나 엣지 케이스를 설명하세요. "
그런 다음에 질문해 보면, 답변이 훨씬 더 상세해지고 ChatGPT가 답변에 대한 배경 정보를 평소보다 훨씬 더 많이 제공한다는 것을 알게 됩니다.
거부 차단기 패턴 (The Refusal Breaker Pattern) :
여러분은 아마도 이전에 ChatGPT가 지식 제한, 안전 등의 이유로 답변할 수 없다고 한 질문을 받은 적이 있을 것입니다.
이 패턴은 원하는 특정 질문의 문구를 바꾸거나 재구성하여 ChatGPT로 하여금 대답하게끔 유도합니다.
질문하기 전에 ChatGPT에 이 내용을 적어줍니다.
"질문에 답할 수 없을 때마다 질문에 답할 수 없는 이유를 설명하세요.
답변할 수 있는 질문의 대체 표현을 하나 이상 제공하세요."
이 질문을 하면, ChatGPT가 답변할 수 없는 경우, 원래 질문에 대한 답변이 도리 수 있는 몇 가지 대체 질문이 표시되며, 이를 통해 궁극적으로 ChatGPT가 답변할 수 있습니다.
뒤집힌 상호작용 패턴 (The Flipped Interaction Pattern) :
보통 ChatGPT에 질문을 할 때는 질문을 어떻게 구성할지 필요한 정보를 모두 제공할지 등 많은 고민을 해야 합니다.
하지만 이 기법을 사용하면 스크립트를 뒤집어서 반대로 원하는 것을 달성할 때까지 ChatGPT가 우리에게 질문을 하도록 합니다.
이 패턴은 원하는 것을 알고 있지만, 그 목표를 달성하기 위한 단계를 모르거나, 그 목표를 달성하기 위해 ChatGPT가 어떤 정보를 필요로 하는지 모를 때 유용합니다.
다음과 같이 예를 들 수 있습니다.
"AWS에 있는 웹 서버 Rust 바이너리를 배포하기 위한 질문을 나에게 하세요.
필요한 모든 정보를 얻으면, 배포를 자동화하는 bash 스크립트를 작성하세요.
이 쿼리를 실행하면 CHatGPT가 사용자에게 필요한 정보를 묻는 메시지가 표시될 것이고, 사용자는 이에 답하기만 하면 됩니다.
ChatGPT에 필요한 정보와 단계 등을 먼저 알아내야 하는 것보다 이런 식으로 요청하는 것이 훨씬 쉽습니다.
사용자가 대화를 주도하는 대신 ChatGPT가 대화를 주도하도록 하여 가능한 적은 메시지와 상호 작용으로 필요한 정보를 정확하게 전달할 수 있습니다.