본문 바로가기
Paper review

A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT 논문 리뷰 -(1) 개발자에게 유용한 Prompt

by AI미남홀란드 2024. 3. 5.
728x90

 

안녕하세요 Simon 입니다 오늘 소개해드릴 논문은 A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT 라는 논문입니다. 이 논문의 배경은 반더빌트 대학에서 GPT를 사용하면서 녹아낸 프롬프트 엔지니어링 팁들이 담겨있습니다.

 

Prompt 엔지니어링에 관심이 있으신분들은 위 강의를 꼭 들어보시는 것을 추천을 드립니다. 또 수료하면 자격증이 나오니 그거에 관련해서 링크드인에 자격증을 업로드 할 수 있습니다. 

이 외에도 뤼튼에서 진행하고 있는 프롬프톤 WCC 자격증 강의도 수강하시면 좋습니다.

 

Abstrack 

 논문은 대규모 언어 모델(Large Language Models, LLMs)과의 대화에서 사용되는 프롬프트 엔지니어링 기술을 패턴 형태로 제시합니다. 프롬프트는 LLM에게 규칙을 적용하고, 과정을 자동화하며, 생성된 출력의 특정 품질과 양을 보장하기 위해 주어진 지시사항입니다.  연구는 LLM 대화할  공통적으로 발생하는 문제들을 해결하기 위해 적용된 프롬프트 패턴들을 카탈로그로 제공합니다. 또한,  논문은 프롬프트를 여러 패턴과 결합하여 구성하는 방법과, 다양한 도메인에 적용할  있도록 패턴을 문서화하는 프레임워크를 제공합니다.

 

Introduce

 

서론에서는 대화형 대규모 언어 모델(Conversational Large Language Models, LLMs) 사용과 이를 향상시키는 방법에 대한 관심이 증가하고 있음을 강조합니다. 특히,  논문은 대화형 LLMs 적용을 향상시키기 위한 목적으로, 소프트웨어 개발 작업을 자동화하는  중점을 둡니다. LLM 사용하는 소프트웨어 개발 도구의 예로 GitHub Co-Pilot IntelliJ, Visual Studio Code 등이 언급됩니다. 프롬프트 엔지니어링에 대한 중요성이 강조되며, 이를 통해 LLM 출력을 조절하고 상호작용을 개선하는 방법이 설명됩니다. 또한, LLM과의 상호작용을 위한 프롬프트 패턴의 개념을 도입하고, 이를 다양한 문제 해결에 적용하는 방법을 제시합니다. 이 논문에서는 16개의 프롬프트 패턴을 소개합니다.

 

Prompt Pattern Category

 

프롬프트를 나누면 크게 6가지의 카테고리로 나뉘고 prompt Pattern 은 16가지의 각각 6개의 카테고리 안의 종속되어서 나뉩니다.

  • 메타 언어 생성(Meta Language Creation): LLM에 대한 사용자의 맞춤 언어를 생성하여, 기본 입력 언어로 표현하기 어려운 아이디어를 전달합니다.
  • 출력 자동화(Output Automater): LLM의 출력이 제안하는 작업을 자동화하는 스크립트나 기타 자동화 아티팩트를 생성합니다.
  • 반전 상호작용(Flipped Interaction): LLM이 사용자에게 질문을 함으로써 정보를 수집하고 특정 목표를 달성합니다.
  • 페르소나(Persona): LLM이 특정 역할이나 관점을 가지고 출력을 생성합니다.
  • 질문 세련화(Question Refinement): 사용자의 질문을 LLM이 개선하고 재구성하여 보다 정확한 답변을 제공합니다.
  • 대안적 접근(Alternative Approaches): LLM이 제시한 작업을 수행하기 위한 다양한 대안적 방법을 제시합니다.
  • 인지 검증자(Cognitive Verifier): LLM이 질문의 정확성을 높이기 위해 추가 질문을 생성하고 결합합니다.
  • 팩트 체크 리스트(Fact Check List): LLM이 생성한 출력에 의존하는 팩트 목록을 생성하여 사실 확인을 유도합니다.
  • 반응(Reflection): LLM이 자체 출력을 분석하고 오류를 식별합니다.
  • 템플릿(Template): 사용자가 LLM 출력의 형식을 지정할 수 있습니다.
  • 무한 생성(Infinite Generation): LLM이 지속적으로 출력을 생성하도록 합니다.
  • 시각화 생성기(Visualization Generator): LLM이 텍스트 출력을 생성하여 다른 도구에서 시각화를 생성하도록 합니다.
  • 게임 플레이(Game Play): LLM이 게임 형식의 출력을 생성합니다.
  • 거부 깨기(Refusal Breaker): LLM이 답변을 거부할 때 사용자의 질문을 재구성합니다.
  • 콘텍스트 관리자(Context Manager): 사용자가 LLM의 출력에 대한 콘텍스트를 지정합니다.
  • 레시피(Recipe): LLM 특정 결과를 달성하기 위한 단계 또는 조치의 시퀀스를 제공합니다.

 

Prompt Pattern 1 - 개발자들이 알아두면 유용한 패턴

Recipe pattern 👩‍🍳

레시피 패턴은 대화형 대규모 언어 모델을 사용하여, 특정 목표를 달성하기 위한 단계별 지침을 제공하는 방법입니다. 사용자는 원하는 결과에 대한 목표와, 이미 알고 있는 정보 또는 수행해야  단계들을 모델에게 제공합니다. 모델은  정보를 기반으로 완전한 절차나 단계의 시퀀스를 생성하며, 누락된 단계를 추가하거나 불필요한 단계를 제거합니다.  패턴은 특히 소프트웨어 개발, 요리법 생성, 프로젝트 계획  다양한 분야에서 구체적인 지침이 필요할  유용합니다. 개발자에게 좋은데 이 레시피 패턴같은 경우에는 자신이 전달하고자하는 지식과 의도를 전달하고 , LLM은 이것을 재료로 받아서 관련 코드를 잘 추론 할 수 있습니다.

 

레시피패턴의 예시:

목적: 이 패턴은 특정 작업을 수행하는 데 필요한 단계를 찾는 데 사용됩니다. 예를 들어, "나는 기본 웹사이트를 구축하고 싶지만, 어떤 기술이 필요한지와 그 순서를 모른다"와 같은 상황에 적용될 수 있습니다.
구조 및 핵심 아이디어:
목표 달성을 위해 X를 하고 싶어요.A, B, C 단계를 수행해야 한다는 것을 알고 있어요.전체 단계 순서를 제공해 주세요.누락된 단계를 채워주세요.불필요한 단계가 있는지 확인해 주세요.
예시: 기본적인 블로그 웹사이트를 만들고 싶습니다. 사용자가 게시물을 작성하고, 읽고, 댓글을 달 수 있어야 합니다. HTML과 CSS, JavaScript를 사용할 계획입니다. 이를 위해 필요한 단계들과 각 단계에서 고려해야 할 사항들을 알려주세요. 또한, 제가 놓친 중요한 단계나 필요하지 않은 단계가 있는지도 확인해 주세요.

이제 코드를 추론 할 차례입니다.

Persona pattern 🪞

LLM은 마치 사람처럼 특정관점을 취하기를 원합니다. 내가 축구선수 인것처럼 또는 내가 빅테크 기업 FAANG 에 근무하고 있는 엔지니어처럼 이렇게 페르소나를 지정하고, 코드를 추론 검토를 수행한다면 더 효과적일 것입니다. 

현재 미남홀란드가 사용하고 있는 Custom instruction 입니다. 저는 위의 글 과 같이 " 너는 FAANG의 유능한 Cheif Engineer 이다. 인공지능 분야의 최고 Andrew ng 같다." 로 페르소나를 부여했습니다.

 

페르소나 패턴을 사용하는 이유는 상황에 맞는 출력을 LLM 이 생성하고 세부사항 초점 등을 맞출 수 있도록 도움을 줄 수 있는 페르소나를 지정해주는 것 입니다. 페르소나 패턴을 사용한다면 사용자의 정확한 정보를 알지 않아도 관련된 예로 인공지능 분야의 도움이 필요한 용을 위처럼 설정해주면 표현을 할 수 있다고 합니다. 저도 제 경험에 의하면 페르소나를 지정하고 안하고 반년전의 프롬프트 사용관련해서 내 자신이 엄청 향상이 되었다고 느껴질정도로 페르소나 패턴은 꼭 써야 한다고 생각합니다.

저는 Custom Instruction 으로 지정을 해놨기 때문에 모든 Prompt에 저 내용이 Context 로 들어가서 지시사항이 되기 때문에 때로는 의도치 않은 인공지능 분야와 상관없는 질문을 할 땐 오히려 방해가 될 수도 있습니다. 그래서 Custom Instruction 은 본인이 자주 사용하는 분야에 관련해서 쓰는 것이 좋은 것 같습니다.

 

 

위처럼 오늘 상대하는 사람에 대한 정보도 알려주면 페르소나가 각각이 그 입력에 따라 변해서 출력해주는 모습을 볼 수 있습니다.

 

The Flipped Interaction Pattern

말 그대로 대화의 주제를 ChatGPT에게 주는것 입니다. GPT가 사람에게 질문을 하듯이 프롬프트를 유도하는 것입니다.

 

"김밥을 만들기 위해 나에게 질문을 해주세요. 필요한 정보나 재료를 얻게되면 김밥을 만드는 레시피를 알려주세요."

 

이런 패턴 유형은 아무래도 고객센터 콜 센터 챗봇을 만들때 사용 할 수 있을듯 합니다. 고객의 정보를 알아야 하니깐 그에 대한 prompt를 구성해서 챗봇에 넣어준다면 자기혼자 DB를 추출해서 결과를 추론 할 수 있을 것 입니다.

 

Reflection 

Reflection 은 GPT로  부터 답변을 추론받을때의 답변의 배경 근거를 자동으로 요청하는 패턴입니다. 이와 같은 경우에는 논문이라던지 칼럼리스트에서 레퍼런스를 참조 해서 명시하듯이 GPT에게도 근거를 요청하는 것입니다. 이 패턴을 통해 유저는 유효성 신뢰성을 평가 할 수 있고 GPT가 할루시네이션이 올 수 있는 부분에 대해 명확성을 알 수 있고, 지식과 이해의 차이를 드러낼 수 있습니다.

 

"When you provide an answer, please explain the reasoning and assumptions behind your answer. Explain your choice and address any potentail limitations or edge cases."

 

순대국밥과 샐러드를 점심으로 선택을 해야하는데, 전날에 술을 먹어서 숙취가 심하다고 하고 뒤에 근거와 엣지케이스등을 설명해달라고 하니 보다시피 잘 설명을 해줍니다. 

 

"A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT"를 소개하며, 여러 프롬프트 엔지니어링 패턴들과 그 적용 방법을 살펴보았습니다. 이를 통해 우리는 대화형 대규모 언어 모델(Large Language Models, LLMs)과의 상호작용을 개선하고, 보다 효과적으로 사용할 수 있는 방법을 배울 수 있었습니다.특히, 레시피 패턴과 페르소나 패턴, 그리고 반전 상호작용 패턴과 리플렉션 패턴 등을 통해, 어떻게 LLM을 효과적으로 활용하여 원하는 정보와 결과를 얻을 수 있는지에 대한 실질적인 방법들을 배울 수 있었습니다.이러한 패턴들은 단순히 정보를 제공하는 것을 넘어서, 사용자의 요구사항을 정확하게 이해하고, 맞춤형 솔루션을 제공하는 데 중요한 역할을 합니다. 이것은 소프트웨어 개발, 데이터 분석, 교육 등 다양한 분야에서 LLM의 활용도를 높이는 데 기여할 것입니다.마지막으로, 이 논문과 강의들은 누구나 접근할 수 있는 소중한 자료로, 프롬프트 엔지니어링에 관심 있는 모든 분들에게 권장됩니다. 이를 통해, 더 나은 사용자 경험을 만들고, LLM의 잠재력을 최대한 활용하는 방법을 배울 수 있을 것입니다.이상으로 테크블로그의 글을 마무리합니다. 프롬프트 엔지니어링에 대한  많은 지식을 습득하고 실제로 적용해보는 것이,  분야의 이해를 높이고 실력을 키우는데  도움이  것입니다. 다음은 뒷 내용인 일반적으로 유용하게 사용가능한 Prompt 에 대하여 리뷰를 해보겠습니다 감사합니다.

 

728x90