About Prompt Engineering : 3.프롬프트 설계

프롬프트의 요소

프롬프팅을 계속 다루다보면 특정 요소가 프롬프트를 구성한다는 것을 알 수 있는데요, 요소들은 다음과 같습니다.

Instruction - 모델이 수행할 특정 작업 또는 명령

Context - 더 나은 반응을 위해 모델을 조정할 수 있는 외부 정보

Input Data - 응답을 찾고자 하는 입력 또는 질문

Output Indicator - 출력의 유형 또는 형식

프롬프트에 네 가지 요소가 모두 필요한 것은 아니며 형식은 작업에 따라 다릅니다.

프롬프트를 설계하는 일반적인 방법들

들어가기 전에

언어를 통일하는 것은 가장 중요한 문제입니다. Chat gpt-4의 경우 한글 이해 능력이 이전 모델보다 월등히 상승하였습니다. 하지만 개선된 한국어 소통 결과에도, 여전히 Chat gpt-4는 한국어에 비해 영어의 정확도가 더 높습니다. 한국어로도 대화가 가능하지만 기본 언어인 영어로 질문한다면 명확한 소통이 가능합니다.

영어가 능숙하지 않다면 구글 번역이나 파파고를 이용해 번역하여 질문할 수 있습니다.

Untitled

출처 : Openai

들어가며

우리가 원하는 출력을 얻기 위해서는 많은 시행착오를 겪어야 합니다. 일반적으로 OpenAI의 Playground를 이용하는것을 추천하긴 하나 모델의 특성을 크게 고려하지 않는다면, 전문가가 아니라면 무료버전을 사용하셔도 무방합니다. (Playground에 대해서는 나중에 다루겠습니다.)

간단한 프롬프트 형식으로 시작해서 더 나은 출력을 받기 까지 앞서 말한 요소들을 추가하는 과정을 거칠 것입니다. 그렇기 때문에 프롬프트를 여러 방법으로 반복하는것이 매우 중요합니다.

또한 지시문이 길다고 무조건 좋은것은 아닙니다 간결하면서도, 구체적인 조건들이 더 나은 결과를 가져오는 경우를 쉽게 찾아 볼 수 있습니다.

지금부터 프롬프트를 간단하게 설계 해보겠습니다.

The Instruction

“쓰기”, “분류”, “요약”, “번역”, “명령” 등과 같이 모델에 원하는 작업을 지시하는 명령을 사용하여 다양한 단순 작업에 대한 효과적인 프롬프트를 설계할 수 있습니다.

프롬프트의 시작 부분에 지시사항을 배치할 수 있습니다. 또 다른 권장 사항은 “##”과 같은 명확한 구분 기호를 사용하여 명령과 컨텍스트를 구분하는 것입니다.

예를 들어:

Untitled

이렇게 말이죠.

특수성

모델이 수행할 지침과 작업에 대해 매우 구체적으로 설명합니다. 프롬프트가 더 설명적이고 상세할수록 결과는 더 좋습니다. 특히 원하는 답변이 있다면 더욱 중요합니다. 더 나은 결과로 이어지는 특정 토큰이나 키워드가 없습니다. 그렇기 때문에 좋은 형식과 설명적인 프롬프트를 갖는 것이 더 중요합니다. 실제로 프롬프트에 예제를 제공하면 원하는 출력을 특정 형식으로 얻을 수 있습니다.

또한 프롬프트를 설계할 때 프롬프트의 길이에 제한을 두고 있기 때문에 토큰이라고 하 프롬프트의 길이도 염두에 두어야 합니다. gpt-35-turbo에 대한 토큰 제한은 4096 토큰으로 알려져 있습니다.(이는 입력과 출력이 모두 포함된 토큰입니다.)

chatgpt의 토크나이저는 이곳에서 확인할 수 있습니다.

다시 돌아와서, 텍스트에서 특정 정보를 추출하는 간단한 프롬프트를 시도해 보겠습니다.

Untitled

적당한 한국어로 된 글을 이용하고 싶었으나 마땅히 떠오르는게 없었습니다 ㅎㅎ;

위에서 보시는 것과 같이 place라고 하는 곳의 특정 정보를 간단히 추출할 수 있었습니다.

부정확성 방지

프롬프트를 생성할 때 구체적이고 직접적으로 작성하는 것이 좋습니다. 효과적인 의사소통과 매우 유사하기 때문인데요, 더 직접적일수록, 너무 서술적이지 않게 할 수록 효과적으로 메시지를 전달합니다.

예를 들어보겠습니다.

‘프롬프트 엔지니어’ 에 대해 궁금하다면 어떻게 프롬프트를 작성하시나요?

프롬프트 엔지니어에 대해 설명해줘

위와 같이 작성을 하게 된다면 아까 말씀 드렸듯 부정확한 설명을 만들 수 있습니다.

그럼 다음과 같이 작성해볼까요

프롬프트 엔지니어에 대해 설명해줘 설명은 짧게 하고, 몇 문장만 하고, 너무 서술적으로 하지 마세요.

위의 프롬프트에서 몇 개의 문장을 사용해야 하는지, 어떤 스타일을 사용해야 하는지 명확하지 않습니다. 위의 프롬프트에서 여전히 좋은 반응을 얻을 수 있지만, 더 나은 프롬프트는 매우 구체적이고 간결하며 요점을 잘 설명하는 것입니다.

이렇게 말이죠.

고등학생에게 프롬프트 엔지니어의 개념을 설명하기 위해 2-3개의 문장을 사용해주세요

이렇게 구체적이고 직접적으로 프롬프트를 만들어줌으로써 부정확성을 방지할 수 있겠습니다.

직접 테스트 해보시고 차이를 느껴보세요

To do? or not to do?

프롬프트를 디자인할 때 자주 사용하는 또 다른 팁은 하지 말아야 할 것을 말하지 말고 대신 해야 할 것을 말하는 것입니다. 이를 통해 보다 구체적인 정보를 얻을 수 있으며 모델에서 좋은 반응을 이끌어내는 세부 정보에 초점을 맞출 수 있습니다.

여기 영화 추천 챗봇이 제가 하지 말아야 할 것에 초점을 맞춘 지침서를 작성했기 때문에 제가 원하지 않는 것에 정확히 실패한 예가 있습니다.

하지 말하야 할 것에 초점을 맞춘 프롬프트와 해야할 것에 초점을 맞춘 프롬프트를 비교해 보겠습니다.

하지 말아야 할 것에 초점을 둔 프롬프트

Untitled

해야 할 것에 초점을 둔 프롬프트

Untitled

이 밖에도 여러 영화들을 추천해준다.

Untitled

오늘은 추천할 만한 동영상이 없다고 하는 경우도 있었다.

사실, 답변은 고객의 관심사를 묻는것에 대해 제한하도록 했기 때문에

죄송합니다, 저는 당신의 관심사에 대한 정보가 없습니다.
하지만, 여기 현재 세계적으로 인기 있는 영화 목록이 있습니다
블라블라 ~~~

위와 같은 답변을 유도한 것이지만 생각만큼 잘 나오지는 못했다.(ㅠㅠ)

reference