[23/12/28] Chat GPT 프롬프트 엔지니어링

이카루스·2023년 12월 28일
0

읽을거리

목록 보기
19/29
post-thumbnail
  1. 고급 사용방법
    Chat GPT는 사용자의 입력에 따라 다양한 방식으로 반응한다. 그러나 더 고품질의 Chat GPT에게 답변을 제공받기 위해서는 적절한 프롬프트 작성법, 사용자 패턴 프롬프트, 마크다운을 사용해야 한다.
    1) 프롬프트 엔지니어링
    프롬프트란 생성형 AI에게 어떤 행동을 해야 하는지 자연어로 설명해 원하는 결과물을 출력할 수 있게 하는 입력값을 뜻한다. 즉, 원하는 작업을 수행하기 위해 언어모델에게 명령, 지시, 질문, 요청하는 것이다. 프롬프트를 구성하기 위해 반드시 필요한 특정 요소가 정해져 있는 것은 아니지만, 구글, 네이버와 같은 검색 엔진 사이트에서 원하는 결과를 찾기 위해 검색어를 몇 번씩 수정하던 경험은 누구에게나 있다. GPT로부터 답변을 얻는 경우에도 마찬가지이다. GPT가 원하는 답변을 얻기 위해서는 어떤 방식으로 입력값을 넣을 것인지 프롬프트에 대한 고민이 필요하다. 이러한 고민을 하여 언어모델을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화하는 작업을 프롬프트 엔지니어링이라고 한다. 그래서 자연어로 인공지능의 역량을 최대로 끌어내는 것이 프롬프트 엔지니어링의 핵심이라고 볼 수 있다.
    더욱 효과적인 프롬프트를 작성하기 위해서는 답변의 형태를 구체적으로 요청하거나 정보, 맥락, 예시를 추가로 제공, 역할을 부여, 조건을 설정하는 것이 필요하다. 첫 번째로, 답변의 형태를 구체적으로 요청하기 위해서는 사용자 의도에 따라 프롬프트를 구체적이고 명확하게 구성해야 한다. 또한 프로프트는 구조화되어 있을수록 더 의도에 맞는 결과물이 나올 수 있다. 특히 복잡한 질문이나 다중 단계 요청에 효과적이다. 그래서 문맥이 모호하거나 불분명한 프롬프트는 모델에 혼란을 주고 원치 않는 결과를 낸다. 예를 들어 “코로나19의 전파 방식에 대해 설명해주세요.”,“코로나19에 대해 이야기 해주세요.”는 언뜻 봤을때는 비슷해 보일지만, 첫 번째 예시는 명확한 요청으로 모델에게 무엇을 해야 할지 정확하게 지시하는 반면, 두 번째 예시는 원하는 답변의 형태가 모호하다. 두 번째로는 모델이 해결하려는 문제를 이해할 수 있는 충분한 내용을 제공해야 한다. 여기에는 관련 배경 정보를 제공하거나 문제를 자세히 정의하는 작업이 포함될 수 있다. 이를 통해 모델은 구체적인 답변을 제공하거나 사용자가 원하는 특정 작업을 수행할 수 있다. 만약 “오늘 비가 많이 올까?”라는 프롬프트를 작성했다고 했을 때 분명 답은 나오겠지만, 구체적으로 어느 지역인지 모르기 때문에 생성Ai가 알아서 판단한 지역의 날씨 혹은 주요 도시의 날씨를 알려줄 가능성이 있다. 따라서 “오늘 오후 3시에 서울시 강동구에 비올 가능성이 얼마나 되나요?‘라고 프롬프트를 작성하면 보다 구체적으로 원하는 답변을 얻을 수 있다. 세 번째로, 역할을 제공하여 보고서 피드백, 상담 관련 질문 시 Chat GPT에게 역할을 부여하면 Chat GPT는 그 역할에 맞는 답변을 준다. 언어 모델에게 역할을 부여하는 것은 해당 모델이 다양한 시나리오를 시뮬레이션하고, 특정 관점에서 문제를 해결하는데 도움이 된다. 예를 들어 ”당신이 미스터리 작가라고 상상하고, 한 대학에서 발생한 범죄 사건에 대한 이야기를 시작해주세요“ 라는 프롬프트가 역할을 부여하지 않는 프롬프트보다 더 나은 결과물을 받을 수 있다. 마지막으로 프롬프트에 원하는 조건을 설정함으로써 명확한 방향성을 제공하며, 일반적이거나 너무 광범위한 답변을 방지하는데 도움이 된다. 예를 들어 "초등학생이 이해할 수 있도록 태양계에 대해 설명해주세요." 이 프롬프트는 모델에게 단순하고 이해하기 쉬운 언어를 사용하여 복잡한 주제를 설명하도록 지시한다. 또한 "가능하다면 스포일러 없이 '인셉션' 영화를 리뷰해주세요." 이 프롬프트는 모델에게 특정한 제약조건, 즉 스포일러 없이 리뷰를 작성하도록 지시한다. 프롬프트로 인한 결과물의 차이는 밑에 제공된 사진에서 볼 수 있다.

    ∙ 맥락(상황,스타일) 제공_역할 수행
    ∙ 추가 정보 제공
    ∙예제 제공
    ∙조건 설정(응답 길이 및 형식 설정)

    ① 프롬프트 엔지니어링을 하지 않는 경우

사진 4.1 | 프롬프트 엔지니어링을 사용하지 않은 일반적인 프롬프트

② 프롬프트 엔지니어링을 한 경우

사진 4.1 | 초등학교 과학교사라는 역할을 부여하는 프롬프트 엔지니어링을 작성한 프롬프트

2) 사용자 패턴 프롬프트
사용자 패턴은 사용자가 원하는 답변 유형을 명확하게 지시하기 위해 사용하는 특별한 형식의 문구이다. 특정 패턴을 사용하면, 사용자는 챗봇에게 예상하는 답변 유형을 보다 더 명확하게 전달할 수 있다. 그래서 패턴들은 챗봇에게 더 명확한 지시를 주어, 사용자의 질문이나 요청에 대해 더 정확하고 관련성 높은 답변을 제공하도록 돕는다.

(1) 사용자 패턴 종류
#role:이 명령어는 사용자나 AI의 역할을 설정하는 데 사용됩니다. 예를 들어, "#role: 의사"라고 입력하면, AI는 의사의 역할을 수행하게 됩니다.
#explain-like: - 이 패턴은 AI에게 특정한 방식으로 정보를 설명하도록 요청할 때 사용됩니다. 예를 들어 "#explain-like: 나는 5살이야, 왜? 지구는 둥글어 설명해줘?"는 AI에게 5살짜리 아이가 이해할 수 있는 방식으로 설명을 요청하는 것입니다.
#summarize: - 이 패턴은 긴 텍스트를 요약하거나, 복잡한 개념을 간단히 설명할 때 사용됩니다. 예를 들어, #summarize: [long text] 혹은 #summarize: Quantum physics와 같은 방식으로 사용할 수 있습니다
brainstorm: 이 패턴을 사용하면 AI에게 아이디어를 생성하거나 문제 해결에 도움을 요청할 수 있습니다. 예를 들어 #brainstorm: ways to reduce plastic waste는 AI에게 플라스틱 폐기물을 줄이는 방법에 대한 아이디어를 제안하도록 합니다.
#generate-ideas: 이 패턴은 창의적인 아이디어를 생성하거나, 브레인스토밍을 진행하고자 할 때 사용됩니다. 예를 들어, #generate-ideas: for a sci-fi short story와 같이 사용할 수 있습니다.
#translate: 이 패턴은 언어 번역에 사용할 수 있습니다. 예를 들어, #translate: [Korean] 안녕하세요. 이런 식으로 사용할 수 있습니다.
#teach-me: 이 패턴은 특정 주제에 대해 배우고자 할 때 사용됩니다. 예를 들어, #teach-me: about the French Revolution와 같은 방식으로 사용됩니다.
#topic: 이 명령어는 대화의 주제를 설정하는 데 사용됩니다. 예를 들어, "#topic: 우주 여행"이라고 입력하면, 대화는 우주 여행에 관한 내용으로 진행되는 것으로 설정됩니다.
#emtion: 이 명령어는 AI의 감정 상태를 설정하는 데 사용됩니다. 예를 들어, "#emotion: 행복"이라고 입력하면, AI는 행복한 감정 상태에서 대화를 진행하게 됩니다.
#style: 이 명령어는 AI의 말투나 표현 방식을 설정하는 데 사용됩니다. 예를 들어, "#style: 공손한"이라고 입력하면, AI는 공손한 말투로 대화를 진행하게 됩니다.
#temperature은 응답의 창의성을 조절합니다. 0에서 1 사이의 값을 입력하며, 값이 높을수록 더 창의적인 응답을 생성합니다. 예). #temperature: 0.8
#top_p 응답의 다양성을 조절합니다. 0에서 1 사이의 값을 입력하며, 값이 낮을수록 더 일관된 응답을 생성합니다. 예) #top_p: 0.9

(2) 사용자 패턴 사용 예시
① #explain-like을 사용해서 프롬프트에 대해 질문

사진 4.1 | explain-like을 사용해서 프롬프트 작성

② #generate-ideas를 사용해서 AI를 활용한 창업 아이디어 질문

사진 4.1 | generate-ideas를 사용해서 AI를 활용한 창업 아이디어 프롬프트 작성

3) 마크다운
마크다운은 텍스트를 HTML로 변환하는 라이트웨이트 마크업 언어이다. 가독성이 좋고, 간단한 문법으로 HTML을 작성할 수 있게 한다. 제목, 강조, 링크, 이미지, 코드, 표, 속성을 나타낼 수 있다.

(1) 마크다운 종류
∙제목 : 하나 이상의 #기호로 줄을 시작하고 공백을 입력한 다음 제목 텍스트를 추가한다. #기호의 수는 제목 수준을 결정한다.

그림

∙ 강조 : 별표(*) 또는 텍스트 주위에 밑줄(_)

그림

∙링크 : 하이퍼링크를 생성할 수 있다.

그림

∙이미지 : 이미지를 삽입할 수 있습니다.

그림

∙코드 : 코드 블록은 백틱(`)세 개를 사용하여 생성할 수 있습니다.

그림

(2) 마크다운 사용 예시

사진 4.1 | 마크다운을 사용해서 프롬프트 작성

사진 4.1 | 마크다운을 사용해서 얻은 답변

profile
Der Schmerz, der mich nicht töten kann, macht mich nur stärker (나를 죽이지 못하는 고통은 나를 더 강하게 만든다)

0개의 댓글