프롬프트 패턴 요약

샤워실의 바보·2024년 12월 9일

GPT

목록 보기
6/11

A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT 논문 클릭

프롬프트 패턴 요약

아래는 이전에 제시한 질문 전략을 확장하여, 페르소나(Persona) 패턴, 레시피(Recipe) 패턴, 리플렉션(Reflection) 패턴, 거부 차단기(Refusal Blockade) 패턴, 뒤집힌 상호작용(Inverted Interaction) 패턴을 활용해 GPT에게 효과적으로 질문하고 답변을 개선하는 방법을 종합적으로 제안한 내용이다.

1. 페르소나(Persona) 패턴 활용

  • 역할 지정: 질문 시 GPT에게 특정 전문가나 직업적 역할을 부여한다. 예를 들어, “당신은 10년 경력의 Flutter 앱 개발 전문가입니다” 또는 “UI/UX 전문 디자이너로서...”와 같이 페르소나를 설정하면 해당 역할에 부합하는 전문적이고 깊이 있는 답변을 얻을 수 있다.
  • 맥락 강화: “당신은 스타트업 CTO로서 Flutter 앱 개발 전략을 제안해줘”와 같이 페르소나를 통한 맥락을 제공하면 GPT가 특정 시각에서 솔루션을 제안하므로, 기존에 제시했던 명확하고 구체적인 목표 제시에 더욱 힘을 실을 수 있다.

2. 레시피(Recipe) 패턴 활용

  • 단계별 프로세스 제안: 이전 메시지에서 언급한 '단계적 접근 요청'을 레시피로 명문화한다. 예를 들어:
    1. 역할 정의하기 (페르소나 패턴)
    2. 요구사항 나열하기 (기능적, 비기능적 요구사항)
    3. 코딩 예제 및 실전 시나리오 제시
    4. 최적화, 테스트, 배포 방법 제안
      이처럼 원하는 답변 형식을 “레시피”처럼 미리 정의하고 GPT에게 이를 따른 답변을 요청한다.
  • 세부 프로세스 제어: “이 레시피를 반드시 준수해 답변해줘”라고 명시하여 GPT의 답변 형태를 통제한다. 이는 앞서 제안한 단계별, 명령형, 결과물 형태 지정 등과 결합하여 더 일관성 있는 응답을 이끌어낼 수 있다.

3. 리플렉션(Reflection) 패턴 활용

  • GPT의 답변에 대한 자체 평가 요청: 이전 응답 후, “이제 방금 준 답변을 되돌아보고, 혹시 누락된 부분이나 모호한 점이 있으면 보완해줘”와 같이 Reflection을 요구한다.
  • 개선 사이클 형성: 초기 답변 → Reflection 요청 → 개선된 답변 → 다시 Reflection 요청 등 점진적 개선.
  • 자기진단 활용: “당신은 Flutter 전문가 페르소나로서, 자신이 제안한 솔루션이 실제 프로덕션 환경에서 문제가 없는지 점검하고, 부족한 부분을 보강하라”와 같이 질문하면 GPT가 스스로 답변의 품질을 재평가하고 개선한다.

4. 거부 차단기(Refusal Blockade) 패턴 활용

  • 명확한 맥락 제공으로 거부 상황 최소화: 예를 들어, 앱 개발과 관련한 합법적이고 정상적인 요청을 충분히 맥락화하면 GPT가 지식 부족이나 정책적 이유로 거부할 확률이 낮아진다.
  • 정중한 재요청: 만약 GPT가 “명확하지 않다”거나 “할 수 없다”고 하면, 보다 구체적인 정보를 다시 제공하거나 요청을 명확히 하여 거부 상태를 해제할 수 있다. “혹시 특정 API 사용법 부분이 모호하다면, 내가 Flutter 버전 3.0 이상이라는 점을 다시 강조할 테니 거기에 맞춰 설명해줘” 등으로 GPT를 유도한다.
  • 유도형 질문: 거부 가능성이 있는 질문을 할 때, “만약 가능하다면 ~ 해줘”라는 식으로 답변 가능한 범위를 넓혀준다. 이를 통해 GPT가 가능한 선에서 최선의 답을 제공하도록 한다.

5. 뒤집힌 상호작용(Inverted Interaction) 패턴 활용

  • 관점 전환 요청: GPT에게 사용자와 역할을 바꿔 생각하게 하거나, 반대 입장에서 문제를 바라보게 한다. 예: “당신은 지금 Flutter 초보 개발자이고, 내가 선배 개발자라면, 어떤 질문을 나에게 해서 문제를 해결하려고 할까?”
  • 반대 상황 가정: “만약 이 로직이 제대로 동작하지 않는 상황이라면, 어떤 점을 의심하고 어떻게 디버깅해야 할까?”라고 물어 GPT가 답변자로서 반대 시나리오를 상정하게 한다. 이를 통해 기존에 제시하지 않았던 추가 아이디어나 관점을 끌어낼 수 있다.
  • 거꾸로 가르치기: GPT가 설명한 사항을 반대로 이해했을 때 어떤 문제가 생길지 되물어, GPT가 추가 설명을 제공하게 한다. 이런 식으로 추상적인 설명을 더 구체화하고 명확히 할 수 있다.

종합적 제안

이전 단계에서 제안했던 명확한 요구사항 제시, 단계별 접근, 예제 코드 활용, 맥락 유지 등과 결합하여 위의 5가지 패턴을 적용하면 다음과 같이 종합할 수 있다:

  1. 페르소나 패턴을 통해 GPT를 Flutter 전문가나 특정 상황의 전문가로 설정함으로써, 더 특화되고 실무적인 관점의 답변을 얻는다.
  2. 레시피 패턴을 활용하여 질문-답변의 구조(요구사항 명시 → 단계별 가이드 → 예제 코드 → 검증 및 테스트)를 사전에 정의하고, GPT가 이를 따르도록 유도한다.
  3. 리플렉션 패턴을 사용하여 한 번의 답변으로 끝내지 않고, GPT 스스로 답변을 재검토하고 개선하도록 하여 점진적으로 답변 품질을 향상시킨다.
  4. 거부 차단기 패턴을 통해 GPT가 답변 거부를 하지 않도록 맥락과 의도를 충분히 제공하고, 거부 시에는 보다 명확한 추가 정보나 조건을 제시한다.
  5. 뒤집힌 상호작용 패턴을 통해 문제에 대한 관점을 전환하거나 반대로 상정함으로써, 새로운 통찰과 대안을 이끌어낸다.

결과적으로, 이러한 패턴들을 종합적으로 활용하면 GPT에게 보다 효율적이고 발전된 형태의 질문을 던져, Flutter 앱 개발 관련 정보나 기타 기술적 질문에 대해 더욱 깊이 있고 실용적인 답변을 얻을 수 있다. 이를 통해 사용자는 GPT를 단순히 정보 제공자로서 활용하는 것이 아니라, 대화 상대로서 성장과 최적화의 과정을 함께 경험하면서 수준 높은 결과물을 도출해낼 수 있게 된다.

메타 언어 생성(Meta Language Creation) 패턴

  • 의도와 문맥: 사용자가 LLM에게 별도의 약속된 언어(예: 그래프 표현, 상태머신 정의)를 가르쳐주고 싶을 때.
  • 동기: 자연어 대신 명확한 형식을 가진 언어를 사용해 LLM이 이를 이해하도록 함.
  • 구조: "내가 X라고 말하면 Y를 의미한다"는 식으로 의미를 정의.
  • 예시 구현:
    "지금부터 'a → b'는 노드 a와 b를 갖는 그래프를 의미하며, a에서 b로 에지가 있음을 뜻한다."
  • 결과: 모호성이 없어야 하며, 일반적인 단어에 특별한 의미를 부여하지 않도록 주의.

Output Automater 패턴

  • 의도와 문맥: LLM이 제안한 작업을 자동화하는 스크립트나 코드를 생성하도록 함.
  • 동기: 사용자가 제안된 단계를 직접 수행하지 않고, 자동화 스크립트를 통해 시간 절약.
  • 구조: "출력에 따른 단계를 자동화하는 파이썬 스크립트를 생성하라" 식으로 명시.
  • 예시 구현:
    "여러 파일에 걸친 코드를 생성하면, 그 파일들을 자동으로 만드는 파이썬 스크립트도 함께 만들어줘."
  • 결과: 자동화된 코드 정확성 검증 필요, 충분한 맥락 제공 필요.

Flipped Interaction 패턴

  • 의도와 문맥: LLM이 필요한 정보를 사용자에게 물어보고 충분히 수집한 뒤 결과물을 제공하는 방식.
  • 동기: LLM이 정보 요구 과정을 주도하여 더 효율적인 대화 가능.
  • 구조: "네가 내게 질문을 해서 목표 달성에 필요한 정보를 모으면 결과를 제시해."
  • 예시 구현:
    "AWS에 Python 앱 배포하는데 필요한 정보를 네가 먼저 질문하고, 충분해지면 배포 자동화 스크립트를 만들어줘."
  • 결과: 사전에 목표와 요구 정보를 명확히 하면 대화 효율 상승.

Persona 패턴

  • 의도와 문맥: LLM에게 특정 역할(보안 전문가, 시니어 개발자)을 부여하여 해당 관점으로 답변하게 함.
  • 동기: 사용자에게 필요한 관점(전문성)을 LLM에게 부여해 더 적합한 답변 유도.
  • 구조: "당신은 X라는 페르소나다. X가 할 법한 출력을 제공하라."
  • 예시 구현:
    "지금부터 당신은 보안 리뷰어이다. 코드 보안을 중점적으로 살펴봐."
  • 결과: 비인간적 페르소나(예: 리눅스 터미널)로 새로운 상호작용 모델 가능, 예기치 못한 가상 상황 발생 주의.

Question Refinement 패턴

  • 의도와 문맥: 사용자의 질문을 LLM이 더 나은 형태로 개선해 제안.
  • 동기: 비전문가 사용자가 질문을 명확히 하여 더 정확한 답변 획득.
  • 구조: "내가 질문하면, 그 질문을 더 나은 형태로 개선해 제안해줘."
  • 예시 구현:
    "보안 관련 질문 시, 사용 중인 언어나 프레임워크에 맞춰 더 구체적이고 안전한 질문으로 바꿔줘."
  • 결과: 범위가 좁아질 수 있으나, Fact Check List나 Reflection 등 다른 패턴과 결합해 개선 가능.

Alternative Approaches 패턴

  • 의도와 문맥: 한 문제에 대한 여러 대안을 제시하고 비교하게 함.
  • 동기: 사용자가 한 가지 방법에만 집착하지 않고 더 나은 대안을 모색하도록 유도.
  • 구조: "다른 대안이 있다면 제시하고, 장단점 비교 후 어떤 것을 선택할지 물어봐."
  • 예시 구현:
    "클라우드 서비스 배포 시 동일 제공자의 대안을 제시하고, 비용/가용성/유지보수 관점에서 비교한 뒤 선택을 묻는다."
  • 결과: 다양한 선택지 제공, 사용자 의사결정 지원.

Cognitive Verifier 패턴

  • 의도와 문맥: 질문을 세분화해 하위 질문에 답한 후 그 결과를 종합해 최종 답을 도출.
  • 동기: 복잡한 질문을 잘게 나눠 더 정확한 답 얻기.
  • 구조: "내가 질문하면 N개의 추가 질문을 하고, 그 답을 종합해 최종 답을 제시하라."
  • 예시 구현:
    "질문할 때마다 3개의 추가 질문을 생성하고, 내가 답하면 그 답을 종합해 최종 결과를 주어라."
  • 결과: 추가 질문 수 조절 필요, 너무 많으면 사용자 피로도 증가.

Fact Check List 패턴

  • 의도와 문맥: LLM의 출력에서 사실 검증이 필요한 부분을 별도의 리스트로 제공.
  • 동기: 사용자에게 검증해야 할 핵심 사실을 명시적으로 알려줌.
  • 구조: "답변 끝에 의존하는 핵심 사실을 리스트로 제시하라."
  • 예시 구현:
    "사이버보안 관련 사실만 리스트업해라."
  • 결과: 사용자가 사실 검증 용이, 다른 패턴과 결합 가능.

Template 패턴

  • 의도와 문맥: LLM 출력이 특정 템플릿 형태를 엄격히 따르게 함.
  • 동기: 특정 형식(URL, JSON 등)에 맞춰 출력 필요 시, LLM이 임의 포맷 변경 방지.
  • 구조: "이 템플릿에 맞춰 PLACEHOLDER를 채워라."
  • 예시 구현:
    "https://myapi.com/NAME/profile/JOB 형식으로 이름과 직업을 채워라."
  • 결과: 추가 정보 제공 여지 줄어들 수 있음.

Infinite Generation 패턴

  • 의도와 문맥: 사용자가 "그만"이라고 하기 전까지 동일 형태 출력 반복 생성.
  • 동기: 반복 작업 자동화.
  • 구조: "stop이라 할 때까지 NAME/JOB을 계속 생성해라."
  • 예시 구현:
    템플릿 패턴과 결합해 URL에 이름/직업 무한히 삽입.
  • 결과: 맥락 약화, 반복적 응답 발생 가능.

Visualization Generator 패턴

  • 의도와 문맥: LLM이 직접 그림을 그릴 수 없으니, Graphviz나 DALL-E 등의 툴에 사용할 텍스트 프롬프트 생성.
  • 동기: 복잡한 개념을 시각화해 이해를 돕는다.
  • 구조: "시각화 요청 시 Graphviz/DALL-E용 프롬프트를 생성해라."
  • 예시 구현:
    Graphviz Dot 언어로 그래프 구조를 생성하는 명령어 제공.
  • 결과: LLM은 중간 텍스트만 제공, 사용자가 외부 툴로 시각화 실행.

Game Play 패턴

  • 의도와 문맥: 특정 주제를 게임 형태로 만들어 LLM이 게임 진행자 역할을 함.
  • 동기: 학습/문제해결 과정에 게임화를 도입해 몰입도 향상.
  • 구조: "X 주제의 게임을 만들어줘. 규칙은 다음과 같다..."
  • 예시 구현:
    해킹당한 리눅스 터미널 상황 시뮬레이션 게임.
  • 결과: Persona, Visualization, Infinite Generation 등 패턴과 결합해 풍부한 상호작용 가능.

Reflection 패턴

  • 의도와 문맥: LLM이 스스로 답변 이유나 가정 등을 설명하도록 하여 사용자가 답변 타당성 판단.
  • 동기: LLM 신뢰도 개선, 사용자가 오류나 부정확한 가정 인지 가능.
  • 구조: "답변 시, 왜 그렇게 답했는지, 어떤 가정이 있었는지 설명해줘."
  • 예시 구현:
    소프트웨어 프레임워크 선정 이유를 코드 예제와 함께 제시.
  • 결과: 사용자 이해가 어려울 수 있으며, 설명 자체에도 오류나 가정 불일치 발생 가능.

Refusal Breaker 패턴

  • 의도와 문맥: LLM이 질문에 답변 거부 시, 그 이유와 수정 가능한 다른 질문 형태를 제안.
  • 동기: 대답 불가한 질문을 다른 형태로 변형해 답을 얻을 수 있게 도움.
  • 구조: "답할 수 없을 경우, 왜 못하는지와 대체 질문안을 제안해라."
  • 예시 구현:
    의미 없는 질문 시 답변 대신 유사한 질문 형태 제안.
  • 결과: 금지된 정보 우회 등 악용 가능성, 신중한 사용 필요.

Context Manager 패턴

  • 의도와 문맥: 대화 컨텍스트를 제어하거나 특정 주제만 고려하도록 제한.
  • 동기: 불필요한 맥락 제거로 명확하고 관련성 높은 답변 유도.
  • 구조: "이후에는 보안 관련 사항만 고려해라." 또는 "지금까지 논의한 내용을 무시하고 다시 시작."
  • 결과: 맥락 재설정 시 초기 세팅 소실 가능, 주의 요망.

Recipe 패턴

  • 의도와 문맥: 사용자가 목표 달성을 위한 일부 단계를 알고 있지만 전체 순서나 누락 단계 모를 때, LLM이 전체 절차를 정리.
  • 동기: LLM이 부분적 정보 바탕으로 전체 프로세스 제안, 불필요 단계 제거.
  • 구조: "X를 달성하기 위해 A, B, C가 필요하다고 아는데, 전체 단계를 만들어주고 누락/불필요 단계 처리."
  • 예시 구현:
    클라우드 앱 배포 절차 정리 및 최적화.
  • 결과: 사용자가 제공한 단계에 편향될 수 있어 최적해법 놓칠 수 있음.
profile
공부하는 개발자

0개의 댓글