본문 바로가기
Technology/AI

Chat GPT를 활용한 프롬프트 엔지니어링의 3원칙

by UG0 2023. 7. 25.

Chat Gpt 프롬프트로 작성된 내용은 2023년 07월 24일 Chat GPT3.5를 통해 작성하였습니다.

GPT의 놀라움

대형 언어 모델(LLM)은 컴퓨터가 할 수 있는 일을 놀라울 정도로 변화시키고 있다.

나는 올해 많은 시간을 GREG 및 다른 사람들과 함께 가장 강력한 LLM 중 하나인 GPT를 기반으로 세계 최초의 AI 언어 파트너인 MemBot을 만드는 데 보냈다.

MemBot은 수십 개의 언어로 모든 주제에 대해 완전히 인간과 같은 대화를 실시간으로 나눌 수 있다.

심지어 문법을 개선하는 방법에 대한 조언도 제공할 수 있다.

이처럼 인간과 같은 대화는 여러 분야에서 판도를 바꿀 수 있다.

LLM을 프로그래밍하는 분야는 매우 새롭고 아직 잘 이해되지 않은 분야이다.

모델이 인간의 뇌처럼 작동하고 기존의 컴퓨터처럼 작동하지 않기 때문에 "일반적인" 프로그래밍과는 매우 다르다.

이 글에서는 그동안 많은 시행착오를 겪으면서 얻은 몇 가지 교훈을 공유하고자 하며, LLM을 기반으로 구축하고자 하는 다른 사람들에게 도움이 될 수 있는 몇 가지 팁을 공유하고자 한다.

먼저, GPT가 무엇인지에 대한 정신적 모델을 갖는 것이 좋다.

간단히 설명하자면, 대규모 예측 엔진이다.

인터넷에 있는 거의 모든 텍스트, 즉 수조 페이지에 달하는 텍스트를 학습했다.

"이 텍스트가 먼저 나오면 다음에 어떤 단어가 나올까?"를 예측하도록 훈련되어 있다.

GPT에 코드가 아닌 일반 영어로 작성된 프롬프트를 입력하면 프롬프트 다음에 쓰여져야 할 단어에 대한 예측을 출력한다.

프롬프트는 말 그대로 일반 자연어로 작성된 요청으로, 원하는 작업을 요청하는 것이다.

예를 들어 "이야기 써줘"라고 프롬프트하면 이야기를 쓰며, 매번 스토리가 다르다.

 

 

원칙 1: 지침을 매우 구체적으로 작성하라

다음은 내 질문에 대한 대답이다.

 

그다지 흥미진진한 이야기는 아니지만... 사에게 "이야기를 써보라"라고 하면 반드시 좋은 결과가 나올 것이라고 기대할 수는 없다.

그렇다면 흥미로운 스토리를 작성하도록 요청하면 좀 더 나은 결과를 얻을 수 있는지 살펴보겠다:

적어도 주제에 있어서는 조금 더 흥미진진하다.

구체적이면 GPT의 성능이 조금 더 좋아지기는 하지만, 이 특별한 경우에는 여전히 만족스러운 내용을 쓰지 못했다.

이 문제를 개선하기 위해 학생에게 이야기를 쓰도록 가르치는 방법을 생각해 보자.

아마도 학생들에게 시작, 중간, 끝으로 나누어 글을 쓰도록 요청할 것이다.

 

원칙 2: GPT에게 작업을 작은 덩어리로 나누라고 요청한다.

그런 다음 이 모든 것을 프롬프트로 사용하여 스토리의 핵심을 작성하도록 요청한다

(프롬프트는 흰색으로, GPT의 응답은 녹색으로 표시됨):

보시다시피, 주제를 계속 이어가면서 자세히 설명한다.

여기서는 언어가 약간 투박하지만 나중에 다른 방법으로 수정할 수 있다.

그런 다음 이 모든 것을 바탕으로 설득력 있는 클라이맥스를 작성하도록 요청할 수 있다:

이 이야기의 끝을 보지 못했지만... 이 모든 이야기가 컴퓨터로 몇 초 만에 생성되었다는 것은 정말 놀랍다.

몇 년 전만 해도 상상도 못 했을 일이다.

그리고 이 두 번째 초안은 작업을 세분화하고 단계별로 해결하도록 하는 것만으로도 이미 첫 번째 스토리보다 훨씬 더 나아졌다.

이렇게 하면 인간과 마찬가지로 더 나은 결과를 얻을 수 있다.

이 두 가지 교훈을 모두 적용하면 훨씬 더 스토리에 가까운 결과물을 얻을 수 있지만, 아직 출판 가능한 소설에는 훨씬 못 미친다.

그렇다면 이제 어떻게 해야 할까?

인간 학생에게 시험지를 제출하기 전에 확인하라고 조언하는 것처럼, GPT에게도 자신의 작업을 확인하도록 요청하면 훨씬 더 나은 결과를 얻을 수 있다.

예를 들어, 나는 GPT가 단편 소설을 쓰도록 하는 작업을 해왔다.

이를 위해 2번 원칙에 따라 먼저 이야기 속 등장인물을 정의하도록 요청했다.

먼저 캐릭터에 대한 설명을 작성하도록 요청했다:

꽤 인상적이다.

하지만 실제로는 GPT에게 스토리를 작성하도록 요청하는 입력으로 그다지 유용하지 않다.

실제로 구체적인 입력으로 유용하지 않은 정보가 너무 많다.

이런 종류의 설명을 스토리 작성의 프롬프트로 사용했을 때 "매우 체계적이고 효율적"이라는 부분이 우선순위가 되어 기괴할 정도로 흥미롭지 않은 플롯으로 이어지는 등 흥미로운 스토리로 이어지지 않았다.

GPT가 원칙 1을 따르도록 하고 좀 더 구체화할 필요가 있다.

이 스토리에서는 캐릭터가 약간 엉뚱해야 한다고 가정해 보자. 이것도 프롬프트에 넣을 수 있다:

시끄럽고 뻔뻔한 성격은 좋은 플롯으로 이어지지 않는 것 같았어요. 그럼 GPT가 이를 확인하고 개선하도록 할 수 있는지 살펴보자.

 

 GPT가 자신의 출력을 확인하고 개선하도록 요청하라

이를 위해 "좋은" 프롬프트가 무엇인지 정의하고 이전 출력을 확인하여 "좋은" 프롬프트인지 확인하도록 요청하는 새 프롬프트를 설정할 수 있다.

GPT가 판단을 단계별로 세분화하여 판단을 내리기 전에 양쪽 모두에 대해 논증하도록 하는 구조를 사용했음을 알 수 있다.

이렇게 하면 훨씬 더 정확하고 일관된 판단을 내릴 수 있다.

그런 다음 위의 캐릭터 설명을 입력하고 좋은지 판단하고 그렇지 않은 경우 개선하도록 요청했다:

보시다시피, 설명을 조정하여 그의 성격을 "거칠고 엉뚱한"으로 변경했다.

이것이 실제로 더 나은 스토리로 이어지든 아니든, GPT가 우리가 준 규칙에 따라 판단하고 개선하고 있다는 것을 알 수 있다.

이 기술은 올바른 명령을 입력하여 진정으로 좋은 결과물이 나올 수 있도록 하는 것이 핵심이다.

중요한 점은 우리가 정의한 규칙에 따라 GPT가 스스로 반복하여 더 나은 결과물을 만들 수 있다는 것이다.

GPT를 프로그래밍하는 데는 인간 학생들을 가르치는 방식에서 '많은 부분'을 차용해야 한다.

여러 가지 면에서 기존 프로그래밍보다 훨씬 더 가르치는 것과 비슷하다.

 

기타

https://www.linkedin.com/pulse/3-principles-prompt-engineering-gpt-3-ben-whately/