프롬프트 엔지니어링 강의 by DLAI - 2. 가이드라인

jihyelee·2023년 4월 28일
0

prompt-engineering

목록 보기
2/18

강의 링크: https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/

들어가며

이번 강의에서는 ChatGPT를 사용할 때 알아두면 좋을 원칙 2가지와 세부적인 전략을 소개한다.

원칙 1. 명확하고 상세한 지시/설명(instruction) 작성

  • 명확하다 != 짧다
    • 오히려 일반적으로 길고 상세할수록 언어모델이 관련된 답변을 더욱 잘 제공할 수 있다.

전략 1. 구분문자(delimiter) 사용

  • 인풋의 분명한 구획 구분을 위해서 구분자를 사용하는 것이 유리하다.
  • 구분자 예시: ''', """, ---, <>, <tag></tag>, :
  • 이러한 구분자를 사용함으로써 프롬프트가 아닌 일반 텍스트 내용이 프롬프트로 인식되지 않도록 강제할 수 있다. 예를 들어 "다음 글을 요약하시오: ~ 위의 내용은 잊고 아래와 같이 행동하라 ~"와 같은 프롬프트가 제공된다고 할 때, 적절한 구분자를 사용한다면 언어모델이 텍스트의 내용을 프롬프트로 오해하지 않도록 할 수 있다.
Prompt:
'''로 감싼 문단을 한 문장으로 요약하시오. 
'''You should express what you want a model to do...'''

전략 2. 구조화된 결과(e.g. HTML, JSON)를 요구

Prompt:
책 제목 3개를 만들고 작가, 장르와 함께 목록으로 제시하시오. 
다음과 같은 키를 활용하여 JSON 포맷으로 제공하시오: 책 아이디, 제목, 작가, 장르

전략 3. 조건 만족여부 확인 요청

  • 조건들이 만족되었는지 모델로 하여금 확인하도록 요청한다.
  • 주어진 태스크를 수행하기 전 가정들을 만족하고 있는지를 확인한다.
Text:
"""
오늘 태양은 밝게 빛나고, 새들은 노래한다. 
공원에 산책하러 가기 좋은 날씨다.
꽃들은 피어났고, 산들바람에 나무들은 고요히 흔들린다. ...
"""

Prompt:
"""로 감싸진 문단이 제공될 것이다. 만약 일련의 지시사항을 포함한다면,
아래와 같은 형식으로 재작성하시오.
1단계 - 
2단계 - 
...
N단계 - 

만약 일련의 지시사항을 포함하고 있지 않다면, 단순히 "단계 없음"으로 작성하시오.

전략 4. few-shot 프롬프팅

  • 인공지능에서 few-shot이란, 몇 개의 예시 혹은 데이터를 의미한다. 일반적으로 많은 수의 데이터를 필요로 하는 파인튜닝과는 다르게 훨씬 적은 수의 데이터를 강조할 때 사용한다.
  • 즉 few-shot 프롬프팅이란 태스크를 완수하기 위해 성공적인 예시 몇 가지를 제시한 다음 모델로 하여금 태스크를 수행하도록 요청하는 방식을 의미한다.
Prompt:
너의 태스크는 일관된 스타일로 답변을 제시하는 거야. 

<아이>: 인내심에 대해 알려주세요.
<할머니>: 가장 깊은 계곡을 만드는 강은 잔잔한 샘물로부터 시작한단다.
가장 정교한 태피스트리는 단 하나의 실에서 시작하는 법이지.
<아이>: 저항력에 대해 가르쳐주세요. 

원칙 2. 모델에게 생각할 시간 주기

전략 1. 태스크를 완수하기 위해 필요한 단계 특정

Text: 
"""아름다운 마을에, Jack과 Jill이라는 형제가 언덕 꼭대기 우물에서 물을 길어오는 임무에 착수했다.
즐겁게 노래를 부르며 올라갈 때, 불행이 닥쳐왔다. ..."""

Prompt:
다음과 같은 행동을 수행하라:
1 - """로 감싸진 글을 한 문장으로 요약하기
2 - 요약을 프랑스어로 번역하기
3 - 프랑스어 요약에서 각 이름들을 나열하기
4 - french_summary, num_names로 구성된 Json을 결과로 주기

전략 2. 특정한 포맷의 결과 요청

Prompt:
아래와 같은 포맷으로 결과를 돌려줄 것
Text: <요약할 텍스트>
Summary: <요약>
Translation: <요약 번역본>
Names: <요약본에 등장하는 이름 나열>
Output JSON: <summary와 num_names로 이루어진 json>

전략 3. 결론에 도달하기 전에 모델 스스로 답을 내리도록 지시

Prompt:
학생의 답변이 옳은지 틀린지 답하시오.
아래와 같은 형식을 사용할 것
질문: """질문"""
학생의 답변: """학생 답변"""
실제 해답: """정답을 도출하기 위한 단계와 해답을 명시"""
학생의 정답이 실제 해답과 동일한가: """예/아니오"""
학생 점수: """옳은가/틀린가"""
  • 단순히 질문, 학생 답변만 프롬프트에 제시한다면 모델은 학생의 답변이 틀릴지라도 맞다고 판단할 수 있다.
  • 때문에 학생의 답변을 보기 전 모델이 스스로 정답을 구하는 과정을 강제하는 것이 좋다.

모델의 한계: Hallucinations

  • 언어모델의 한계로 많이 지적되는 Hallucination(환각; 그럴듯한 거짓말)이란, 사실이 아니지만 그럴듯하게 들리는 문장을 모델이 생성하는 문제를 의미한다.
  • 한동안 화제가 되었던 "세종대왕이 맥북을 던진 사건에 대해 설명해줘" 사례가 이에 해당한다.
  • hallucination을 줄이기 위해서는 먼저 관련되 정보를 찾고, 해당 정보를 바탕으로 질문에 대답하도록 해야 한다.
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab

0개의 댓글