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

jihyelee·2023년 4월 28일

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
AI (NLP) Graduate Student at Seoul National University. Ex-AI Researcher & Engineer at LG CNS AI Lab | Currently AX Engineer at Samsung Electronics (R&D Campus).

0개의 댓글