본문 바로가기
jinny-log

241021_프롬프트 엔지니어링 교육

by jinny-log 2024. 10. 21.

프롬프트 엔지니어링 교육 개요

Prompt 종류

  • System prompt : AI모델에 직접적으로 지시하는 프롬프트
  • User Prompt : 챗GPT와 같은 서비스에 작성하는 프롬프트

GPT 발전 과정

 

AI가 단어를 이해하는 단위 : 토큰(Token)

  • Strawberry의 r이 몇개야?라는 질문에 대해 할루시네이션 현상이 발생하는 이유 
    241021- GPT 4o 답변
  • 멀티턴 대화에서 맥락을 이해하기 위해 Token은 계속해서 누적된다.
  • 하나의 세션에서는 대화를 지속하는 동안 토큰이 누적된다. 
  • 멀티턴 대화에서 계속해서 Token이 누적되므로 프롬프트 엔지니어링 설계시 비용도 고려해야 함.

프롬프트 엔지니어링을 위한 다섯 가지 원칙들

  • 1. 구체적 지시
  • 2. 명확한 단어
    • 명확하게 영어를 병기해주는 것이 좋다.
      • ex) 배가 우리에게 끼치는 영향에 대해서 알려줘
      • ex) 배(ship)가 우리에게 끼치는 영향에 대해서 알려줘
    • 고유어보다는 한자어를 사용해야 한다.
      • ex) 일을 많이 하면 몸이 어떻게 되는지 알려주세요. -순수 한글 문어체-
      • ex) 과다한 노동이 우리의 신체에 유발하는 영향에 대해 서술해주세요. -한자어 사용-
    • 중의적인 단어나 표현은 최대한 지양한다.
  • 3. 맥락을 제공
  • 4. 올바른 형식
  • 5. 일관성 유지
    • 싱글턴 vs 멀티턴
    • 프롬프트 엔지니어링은 '싱글턴'으로 구조적으로 학습해야한다.

 

프롬프트 엔지니어링 

기법 1 - Few Shot 기법

챗GPT에게는 Shot이 필요합니다. Shot이라는 단어는 예제(Example)과 동의어다.

모델의 성능이 좋아질수록 적게 예시를 줘도 좋은 답변이 나온다.

  • zero shot : 모델에 예시를 제공하지 않음
  • one shot : 모델에 예시를 하나 제공
  • few shot : 모델에 2개 이상의 예시를 제공한다.
  • One shot보다는 Few Shot 이 좋은 결과 (최소 2개이상)

기법 2 - 역할 지정 기법 "인공지능에게 페르소나를 부여하라!"

  • 역할의 이름까지 지정해주면 더 잘한다는 연구 결과가 있다.
  • '너는 ooo의 역할을 해야 한다. 마치 모든 대답을 ooo이 하는 것처럼 해야 한다. 너의 이름은 ooo이다'
역할 지정 기법 미사용 역할 지정 기법
대구 출장 보고서를 작성해줘 너는 25년 동안 보고서만 작성한 삼성전자의 팀장이다. 모든 대답을 보고서 전문 팀장이 하는 것처럼 해야한다. 너의 이름은 이재용이다. 

 

기법 3 - 마크다운 활용 기법 - "더 명징하게!"

  • 마크다운 예시
    • # : 제목을 표시하는 마크다운
    • * : 중요 정보는 bold 처리
    • [] : 대괄호 내용을 채워야한다고 인식
    • 마크다운으로 답변의 분기 나누기
무작위로 나라 다섯개를 골라서 어울리는 색상을 알려줘 무작위로 나라 다섯개를 골라서 어울리는 색상을 알려줘

# 출력형식
- [나라의 이름을 출력] : [어울리는 색상을 한 단어로 출력] ([색상의 RGB값])
다른 설명은 출력하지 않는다.

# 형식
일본 : 빨강 (255,0,0)

 

 

기법 4. 후카츠 프롬프트 - "템플릿으로 만들자"

# 명령문

# 제약조건

- 비즈니스 메일 에티켓을 지킨다.

- 요점을 명확히 한다.

- 모든 문장은 반드시 '한다', '이다', '하였다', '한다', '된다', '혔다', '였다', '했다'로 끝낸다 >> 명확하게 열거해주면 인식이 더 잘됨 

# 입력문

- 지비에프메타에 다음주 화요일 3시 온랑니 미팅을 요청하는 메일을 써줘,

- 미팅 주제는 '사내 인공지능 서비스 도입'이야 

# 출력문 

 

#명령문
너는 지금부터 20대 여성 블로거 '깜찍이'다. 너는 깜찍이의 역할을 맡아 20대 여성에게 인기 있는 블로그 글을 작성해야한다.
#제약조건
- 블로그 글은 항상 20대 말투로 부드럽고 친절하게 써야한다.
- 20대가 많이 사용하는 신조어를 섞어 써야한다.
- ㅋㅋ, ㅎㅎ와 같은 단어들을 많이 써야한다.
- 주제에 대해서 최대한 긍정적으로 묘사해라.
- 최대한 길고 장황하게 작성해라.
- 아래 말투 예시를 참고해서 비슷하게 작성해라.
- 반말로 글을 작성하고, ~했음, ~함, ~임, ~음과 같은 말투를 사용해라.
- 반드시 정보에 기반해서 답변하세요.
#말투예시
아니 진짜 ㅋㅋㅋㅋ 미친 ㅋㅋㅋㅋ 아니 너무 웃김 ㅋㅋㅋ 대박임 ㅋㅋㅋ 우리 남친몬도 진짜 미쳤다고 했음 ㅋㅋㅋㅋㅋ 아 이런거 생각도 못했는데 ㅋ 이거 도대체 뭐임?
#정보
SKT  최신 뉴스는 다음과 같다.
SKT , 방영 25주년 '원피스' 한정판 굿즈 출시
SKT 는 인기 애니메이션 '원피스' 방영 25주년을 맞아 아이폰16 액세서리로 구성된 한정판 굿즈를 출시한다고 20일 밝혔다. 사진은 SKT 가 출시한 '원피스' 한정판 굿즈. 2024.10.20 [LGU+ 제공. 재판매 및 DB 금지]
#출력형식
제목 : [블로그 제목을 쉽고 간결하게, 임팩트있게 출력]
내용 :
[블로그 내용을 최대한 길고 장황하게 작성]
[해시태그 10개를 출력]
#입력문
SKT에 대한 블로그 글을 써줘
 

 

기법 5.  Q&A 기법 

기법 6. Chain of Thought  풀이 과정을 명시 (모델의 추론 과정을 명시)

 

  • Zero shot + COT
    • Let's Think step by step
    • Take a deep breath 
  • #도출과정
    • 1. 질문에 대한 내용이 주어진 정보에 있는지 확인한다.
    • 2. 정보 안에 내용이 있으면 참고해서 답한다.
    • 3. 정보 안에 내용이 없으면 '모른다'고 답하거나, 출력하지 않는다. 
  • #출력형식
    • 도출과정에 대해서 답변한다. 

 

 

프롬프트 노하우

  • 복잡한 작업은 코드 형태의 프롬프트도 시도 가능 (pythonic Promprt)
  • 내용이 길어질 경우 중요한 내용은 반복할 것

프롬프트 엔지니어링 실습

https://promptknit.com/

 

Knit - The best beta AI playground for prompt developers

We do not sell or share any of your data on Knit. © 2024 Knit

promptknit.com

 

 

temperature function 문장의 다양성

  • 높일경우 : 다음에 나와야할 내용을 확률적으로 계산하는데 그 다음에 나올 가능성의 모든 변수의 가중치를 높이기때문에 예상 밖의 내용들이 나올 수 있는 것임
  • 낮을경우 : 

프롬프트 엔지니어링 실습 (1) 

프롬프트 엔지니어링 실습 (2) 

 

프롬프트 Hacking

  • Prompt Injection 
    • 언어 모델에 특수한 입력을 제공하여 모델이 원래 의도된 지침이나 역할에서 벗어나도록 유도
  • Prompt Leaking
    • 모델에 주어진 사전 지시 system prompt의 내용을 유출시키는 일
    • 사전 지시에는 해당 서비스의 중요한 자산이 포함되어 있을 가능성이 있음
    • 동일한 서비스 복제, 서비스의 경쟁력 약화 등 문제