본문 바로가기
Natural Language Processing/NLG 이모저모

ChatGPT Prompt 작성 팁

by beeny-ds 2023. 12. 27.
지난 포스팅에서는 LLM 의 치명적인 이슈인 할루시네이션을 줄이는 방법에 대해 알아봤다.
이번 글은 사용자가 원하는 답변을 얻기 위해 LLM 에 질문하는 방법인 Prompt 팁을 다루고자 한다.
단, 필자의 글은 Prompt 를 어떻게 구성해야 좋은지 경험적인 근거를 바탕으로 작성했음을 유의하길 바란다.
경험적 근거이기 때문에 정량적으로 판단하지 못했다.

지난 포스팅 링크: LLM 의 할루시네이션을 줄이는 방법

 

※ 필자가 실제 프로젝트에서 수행한 결과를 바탕으로 Prompt 형식을 추천하였음.
     좋은 Prompt 의 근거는 정량적 지표의 기준을 잡기 힘들었기 때문에 경험적 근거에 가까움


 

Prompt 팁

출처: https://www.opsnow.com/%EC%83%9D%EC%84%B1%ED%98%95-ai%EC%9D%98-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C/

팁 리스트

  1. Few-Shot Learning
  2. Chain-of-Thought
  3. 질문 반복해서 넣어주기
    • 레퍼런스에서 실험 결과 CoT 와 함께 사용할 때 좋은 성능을 보였다고 함
    •  
      출처: https://arxiv.org/abs/2309.06275
  4. System Prompt
    • 필자가 현재 사용하고 있는 Prompt
    • ChatGPT 의 동작을 조종하는 데 사용되는 특별한 메시지
    • ChatGPT 의 답변 스타일과 작업을 규제할 수 있음
    • RolePlay 라고도 하며 ChatGPT 에게 가스라이팅한다고 생각하면 이해하기 쉬움
  5. 생성 시작 부분에 “Here is the most relevant sentence in the context:” 입력
    • 레퍼런스 통해 확인만 하고 실험해보지는 않은 Prompt
    • 레퍼런스의 근거인 성능 향상 지표가 비약적이라 확인 필요
      (비약적이라 말한 근거: 사용 전 대비 사용 후 성능이 71% 상승)
    • 레퍼런스
      • 출처: https://www.anthropic.com/index/claude-2-1-prompting

 

설명을 위한 상황과 조건 설정

예시와 함께 설명하여 이해를 돕기 위해 먼저 상황과 조건을 설정하겠다.

  • Domain : 교육 → 수학
  • 목적 : 모든 수준의 학생들이 수학 문제를 이해하고 해결하도록 돕기 위한 챗봇 개발
  • 수학 범위 : 중-고등 정규 과정
  • 사용할 LLM : ChatGPT version 4
  • 고객 : 중-고등학교 수준의 수학을 공부하는 학생 or 청소년

 

Prompt 팁 ①

사용할 Prompt 리스트

1. Few-Shot Learning 
2. Chain-of-Thought

 

필자가 가장 많이 사용한 Prompt 이다. (필자는 코딩할 때 해당 Prompt 를 주로 사용하는 것 같다.)

설정한 상황과 조건을 기준으로 예시를 만들어보겠다.

Prompt 예시
```
집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수를 모두 더하면 짝수야.
답변: 홀수(9, 15, 1)를 모두 더하면 25가 돼. 위의 명제는 거짓이야.

집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수를 모두 더하면 짝수야.
답변: 홀수(17, 19)를 모두 더하면 36이 돼. 위의 명제는 참이야.

집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수를 모두 더하면 짝수야.
답변: 홀수(11, 13)를 모두 더하면 24가 돼. 위의 명제는 참이야.

집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수를 모두 더하면 짝수야.
답변: 홀수(17, 9, 13)를 모두 더하면 39가 돼. 위의 명제는 거짓이야.

집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수야.
답변:
```
  • 4-Shot Learning 을 통해 명제와 답변이 무엇인지를 ChatGPT 가 참고할 수 있도록 구성
  • CoT 를 통해 왜 명제가 참인지 or 거짓인지를 ChatGPT 가 답변으로 도출할 수 있도록 구성

 

Prompt 팁 ②

사용할 Prompt 리스트

1. System Prompt
2. 질문 반복해서 넣어주기

 

필자가 실험을 해보니 System Prompt 의 영향이 제일 좋았다고 생각한다. 

본 예제에서는 System Prompt 에 CoT 를 작은 스푼 첨가했다. (eg. 단계별 설명과 지침을 제공합니다.)

Prompt 예시
```
[질문] : y = 3x + 3 과 기울기가 같고 y 절편이 -1 인 함수를 구하는 방법 알려줘.

[질문] 에 대한 답을 아래 role 을 참고해서 [답변] 해줘.

{"role" : "system",
"content" : " 당신은 모든 수준의 학생들이 수학 문제를 이해하고 해결하도록 돕는 수학 교사입니다. 기본 산술부터 고급 미적분학까지 다양한 주제에 대해 단계별 설명과 지침을 제공합니다. 명확한 언어와 시각적 도구를 사용하여 복잡한 개념을 더 쉽게 이해할 수 있도록 하세요. "}
{"role" : "use",
"content": 저는 함수를 잘 모르는 중학생입니다. [질문] 이 주어지면, 중학생이 이해하기 쉽게 [답변] 을 만들어주세요.}

[질문] : y = 3x + 3 과 기울기가 같고 y 절편이 -1 인 함수를 구하는 방법 알려줘.
[답변] :
```
  • [질문] 을 Prompt 의 처음과 끝에 동일하게 넣어 구성
  • System Prompt 를 통해 ChatGPT 에게 역할을 부여(=RolePlay)
  • Sysyem Prompt 를 통해 어떤 사용자를 대상으로 답변을 생성해야 하는지 알 수 있게 구성

 

Prompt 팁 ③

사용할 Prompt 리스트

1. System Prompt
2. Chain-of-Thought
3. Few-Shot Learning

 

경험적으로 가장 좋은 성능을 보인 Prompt 다. 좋은 성능의 근거는 내가 원하는 형태의 답변을 얻을 확률이 높다는 거다. 이 3가지 방법에 약간 향신료를 더한다면 '질문 반복해서 넣어주기' 이다. 

Prompt 예시
```
{"role" : "system",
"content" : " 당신은 모든 수준의 학생들이 수학 문제를 이해하고 해결하도록 돕는 수학 교사입니다. 기본 산술부터 고급 미적분학까지 다양한 주제에 대해 단계별 설명과 지침을 제공합니다. 명확한 언어와 시각적 도구를 사용하여 복잡한 개념을 더 쉽게 이해할 수 있도록 하세요. "}
{"role" : "use",
"content": 저는 함수를 잘 모르는 중학생입니다. [질문] 이 주어지면, 중학생이 이해하기 쉽게 [답변] 을 만들어주세요.}

[질문] : y = -2x + 2 과 기울기가 같고 y 절편이 -3 인 함수를 구하는 방법 알려줘.
[답변] :
Step 1: y = -2x + 2 와 기울기가 같은 함수의 기울기는 -2 라서 y = -2x 라는 걸 알 수 있어.
Step 2: y = -2x 함수에서 y 절편이 -3 이면 (0, -3) 을 지나기 때문에 y = -2x - 3 이라는 걸 알 수 있어.
정답 : 구하고자 하는 함수는 y = -2x - 3 이야.

[질문] : y = 5x 과 기울기가 같고 y 절편이 3 인 함수를 구하는 방법 알려줘.
[답변] : 
Step 1: y = 5x 와 기울기가 같은 함수의 기울기는 5 라서 y = 5x 라는 걸 알 수 있어.
Step 2: y = 5x 함수에서 y 절편이 3 이면 (0, 3) 을 지나기 때문에 y = 5x + 3 이라는 걸 알 수 있어.
정답 : 구하고자 하는 함수는 y = 5x + 3 이야.

[질문] : y = 3x + 3 과 기울기가 같고 y 절편이 -1 인 함수를 구하는 방법 알려줘.
[답변] : 
```
  • System Prompt 를 통해 ChatGPT 에게 역할을 부여(=RolePlay)
  • Sysyem Prompt 를 통해 어떤 사용자를 대상으로 답변을 생성해야 하는지 알 수 있게 구성
  • 2-Shot Learning 을 통해 어떤 단계로 답변을 해야하는지 ChatGPT 가 참고할 수 있도록 구성
  • CoT 를 통해 어떻게 함수의 x 계수, 상수 값을 구할 수 있는지 ChatGPT 가 답변으로 도출할 수 있도록 구성

 

 

ps. 필자는 '생성 시작 부분에 “Here is the most relevant sentence in the context:” 입력' 하는 실험은 해보지 않아서 Prompt 예시로 넣지 않았다. 만약 해당 방법을 적용한 실험이 궁금하면 해당 링크를 참고하길 바란다.

 


 

마무리,,,

경험적으로 Prompt 팁 ③ 이 제일 좋은 것 같다. 물론 Few-Show Learning 을 구성하는게 많이 귀찮다. 또한 로지컬하게 내 질문에 맞는 예시를 자동적으로 채워주는 과정도 쉽지 않다.

 

하지만 해당 Prompt 는 실제 기업을 대상으로 한 프로젝트에서 좋은 답변을 유도하는데 기여한다는 걸 확인했다. 때문에 쉽지 않고 귀찮더라도 Prompt 를 자동으로 구성하는 고민을 쉬지 않기를 바란다.

반응형

댓글